PEMROGRAMAN INTEGER DENGAN
FUNGSI OBJEKTIF LINEAR SEPOTONG - SEPOTONG
Oleh :
FEBIANA RESI SAPTA
G54102037
DEPARTEMEN MATEMATIKA
FAKULTAS MATEMATIKA DAN ILMU PENGETAHUAN ALAM
INSTITUT PERTANIAN BOGOR
ABSTRACT
FEBIANA RESI SAPTA. Integer Programming with Piecewise Linear Objective Function. Supervised by PRAPTO TRI SUPRIYO and SISWANDI.
Integer Linear programming (ILP/IP) can not be used to finish problems containing piecewise linear objective function, because basically piecewise linear function is not representing a linear function.
This article give an method to express piecewise linear function as linear function, so that problem ILP with piecewise linear objective function can be expressed as ILP in the standard form. This matter can be done with two steps, the first step is to change the piecewise linear objective function ( f x( )) becomes z f b1 ( 1)+z f b2 ( 2)+ +... z f bn ( n), where b1, , b2 ..., bn represent break points. The Second step is adding new constraints so that the formula at step one can be used.
ABSTRAK
FEBIANA RESI SAPTA. Integer Programming dengan Fungsi Objektif Linear Sepotong-Sepotong. Dibimbing oleh PRAPTO TRI SUPRIYO dan SISWANDI.
Integer Linear Programming (ILP) tidak dapat digunakan untuk menyelesaikan permasalahan yang mengandung fungsi objektif linear sepotong-sepotong, karena pada dasarnya fungsi linear sepotong-sepotong bukan merupakan fungsi linear.
Tulisan ini memberikan suatu metode untuk menyatakan fungsi linear sepotong-sepotong sebagai fungsi linear, sehingga masalah ILP dengan fungsi objektif linear sepotong-sepotong dapat dinyatakan sebagai ILP dalam bentuk standar.
Hal ini dapat dilakukan dengan dua langkah, langkah pertama adalah merubah fungsi objektif linear sepotong-sepotong (f x( )) menjadi z f b1 (1)+z f b2 ( 2)+ +... z f bn ( n), dimana
, , ..., 1 2
b b bn merupakan break point. Kemudian langkah kedua menambahkan kendala-kendala baru sedemikian sehingga formula pada langkah satu dapat berfungsi.
PEMROGRAMAN INTEGER DENGAN
FUNGSI OBJEKTIF LINEAR SEPOTONG - SEPOTONG
Skripsi
Sebagai salah satu syarat untuk memperoleh gelar Sarjana Sains
Pada Fakultas Matematika dan Ilmu Pengetahuan Alam
Institut Pertanian Bogor
Oleh :
FEBIANA RESI SAPTA
G54102037
DEPARTEMEN MATEMATIKA
FAKULTAS MATEMATIKA DAN ILMU PENGETAHUAN ALAM
INSTITUT PERTANIAN BOGOR
BOGOR
2008
Judul : Pemrograman Integer dengan Fungsi Objektif Linear
Sepotong- Sepotong
Nama : Febiana Resi Sapta
NIM : G54102037
Menyetujui:
Tanggal Lulus :
Pembimbing I,
Drs. Prapto Tri Supriyo, M.Kom.
NIP 131878952
Pembimbing II,
Drs. Siswandi, M.Si.
NIP 131957320
Mengetahui
Dekan Fakultas Matematika dan Ilmu Pengetahuan Alam
Institut Pertanian Bogor
Dr. drh. Hasim, DEA.
RIWAYAT HIDUP
Penulis dilahirkan di Ciamis pada tanggal 18 februari 1984, penulis merupakan putra keempat dari pasangan Bapak Djuarman Tanuwirya dan Ibu Tarsini Yahya.
Pada tahun 2002 penulis lulus dari SMU Negri 1 Cibadak Sukabumi, dan diterima untuk melanjutkan kuliah di Institut Pertanian Bogor mengambil jurusan Matematika dan Ilmu Pengetahuan Alam.
Selama menempa ilmu perkuliahan, penulis juga menjalani aktifitas lain, yaitu berorganisasi di dalam dan luar kampus. Di dalam kampus penulis pernah menjabat sebagai Ketua GUMATIKA (Himpunan Mahasiswa Matematika), Dewan Pembina HIMASI (Himpunan Mahasiswa Sukabumi), Dewan Pembina KBMGJ (Himpunan Mahasiswa Ciamis Jabodetabek), dan menjadi kepanitian di berbagai kegiatan BEM FMIPA. Sedangkan di luar Kampus penulis aktif sebagai Sekretaris Jendral di DAMAS (Daya Mahasiswa Sunda) cabang Bogor, Kordinator Wilayah VI (Bogor, Sukabumi, Cianjur) BARA SUNDA (Barisan Putra Sunda), Kordinator Wilayah Bogor GEMA JABAR (Gerakan Masyarakat Jawa Barat), Pengurus Widang Pariwisata DPD KNPI Kota Bogor, dan sering terlibat serta diberi tanggung jawab untuk melaksanakan sebuah kegiatan oleh Pemda Kabupaten dan Kota Bogor.
PRAKATA
Puji syukur penulis haturkan ke hadirat Allah SWT yang telah memberi nikmat sehat jasmani maupun rohani sehingga penulis dapat menyelesaikan skripsi ini. Shalawat serta salam tercurah kepada junjungan nabi besar Muhammad SAW yang telah memberikan contoh teladan agar tidak tersesat dalam menjalani hidup.
Pada kesempatan ini penulis ingin mengucapkan banyak terima kasih kepada semua pihak yang telah membantu penulis dalam menyelesaikan skripsi ini, diantara lain :
• Bapak Drs. Prapto Tri Supriyo, M.Kom dan Bapak Drs. Siswandi, M.Si Selaku dosen pembimbing yang senantiasa sabar memberikan bimbingan dan arahan sampai skripsi ini dapat selesai.
• Bapak Donny Citra Lesmana, M.Sc sebagai dosen penguji atas saran dan masukannya. • Keluarga tercinta, mamih, kaka, aa, emas, eneng, serta bi mamah yang telah memberikan
dorongan moril dan materil yang mungkin sampai kapanpun takan terbalaskan. • Dhita Swaditra sebagi sumber inspirasiku
• Seluruh dosen beserta staf Departemen Matematika atas ilmunya yang tak ternilai.
• Teman-teman angkatan 39 terutama irwan, kabul, arip, fitrah yang sekian lama senasib sepenanggungan.
• Rekan-rekan seperjuangan angkatan 35, 36, 37, 38, 40 dan 41. • Dulur-dulur di DAMAS
• Seluruh pihak yang telah membantu terselesaikannya skripsi ini yang tidak dapat disebutkan satu per satu.
Penulis sadar sepenuhnya bahwa banyak sekali kekurangan dalam penyusunan skripsi ini. Harapan penulis adalah bahwa karya ilmiah ini akan dapat memberikan banyak manfaat bagi penulis maupun para pembacanya.
Bogor, Agustus 2008
DAFTAR ISI
Halaman
I. PENDAHULUAN
1.1 Latar Belakang ... 1
1.2 Tujuan ... 1
II. LANDASAN TEORI 2.1 Pemrograman Linear... 1
2.2 Pemrograman Linear Bilangan Bulat ... 2
2.3 Metode Branch and Bound untuk menyelesaikan masalah Pemrograman Linear Bilangan Bulat ... 2
III. PEMBAHASAN ... 5
IV. CONTOH KASUS... 7
V. SIMPULAN DAN SARAN 5.1 Simpulan ... 9
5.2 Saran ... 9
DAFTAR PUSTAKA... 9
I PENDAHULUAN
1.1 Latar Belakang
Banyak masalah dalam dunia nyata yang dapat diformulasikan ke dalam model matematika. Misalnya masalah dalam pendistribusian barang, penentuan rute kendaraan, penjadwalan mata pelajaran dan masih banyak lagi.
Riset operasi merupakan salah satu metode yang sering digunakan untuk memformulasikan, menganalisa, dan menentukan solusi optimum dari masalah-masalah tersebut. Tahap-tahap yang harus dilalui untuk melakukan sebuah studi riset operasi mencakup: (1) Definisi masalah; (2) Pengembangan model; (3) Pemecahan
model; (4) Pegujian keabsahan model; (5) Implementasi hasil akhir.
Pada karya ilmiah ini akan dibahas mengenai pemodelan dalam bentuk integer programming dengan fungsi objektif linear sepotong-sepotong (piecewise linear functions).
1.2 Tujuan
Tujuan penulisan karya ilmiah ini adalah memberikan metode untuk menyelesaikan masalah integer programming dengan fungsi objektif linear sepotong-sepotong.
II LANDASAN TEORI
2.1 Pemrograman Linear
Pemrograman linear adalah pemodelan secara matematis dari suatu masalah nyata untuk mencari solusi optimum yang memenuhi sejumlah kendala tertentu.
Fungsi yang dioptimalkan disebut dengan fungsi objektif yang merupakan suatu fungsi linear. Kendalanya dapat berupa persamaan atau pertidaksamaan linear.
Dalam bentuk matriks-vektor masalah pemrograman linear standar dapat dituliskan sebagai berikut :
Maksimumkan
z
=
c
Tx
Dengan kendala Ax= b x≥0
dengan x dan c berupa vektor berukuran n, b berupa vektor berukuran m, sedangkan A berupa matriks berukuran m n× yang disebut juga matriks kendala.
Definisi 1 (Fungsi Linear)
Misalkan f x x( ,1 2,...,xn) menyatakan
suatu fungsi dalam variabel - variabel
, ,..., 1 2
x x xn, f x x( ,1 2,...,xn) dikatakan
fungsi linear jika dan hanya jika f dapat disajikan sebagai
f x x( ,1 2,...,xn)=c x1 1+c x2 2+ +... c xn n. Dengan c c1, , 2 ..., cn adalah konstanta.
(Winston, 1995)
Fungsi yang Terdefinisi Sepotong-Sepotong
Fungsi yang didefinisikan oleh rumus yang berlainan di bagian yang berbeda dari daerah asalnya dinamakan fungsi yang terdefinisi sepotong-sepotong.
Contoh 1: Fungsi f didefinisikan oleh : ( )
{
jika 0 jika 0 x x f x x x ≥ = − <Definisi 2 (Pertidaksamaan Linear)
Untuk sembarang fungsi linear 1 2
( , ,..., )n
f x x x dan sembarang bilangan b, pertidaksamaan f x x( , ,..., )1 2 xn ≤ dan b 1 2 ( , ,..., )n f x x x ≥ dinamakan b pertidaksamaan linear. (Winston, 1995)
2
Definisi 3 (Daerah Fisibel)
Daerah fisibel pemrograman linear adalah daerah yang memenuhi semua kendala pada pemrograman linear.
(Nash & Sofer, 1996)
Definisi 4 (Solusi Fisibel)
Suatu solusi disebut fisibel jika memenuhi semua kendala pada pemrograman linear.
(Nash & Sofer, 1996)
Definisi 5 (Solusi Optimum)
Solusi optimum (terbaik) adalah suatu solusi dalam daerah fisibel yang menyebabkan nilai fungsi objektif terkecil (dalam masalah minimisasi), untuk masalah maksimisasi solusi optimum suatu pemrograman linear adalah suatu solusi dalam daerah fisibel yang menyebabkan nilai fungsi objektif terbesar.
(Winston, 1995)
2.2 Integer Linear Programming
Model pemrograman linear bilangan bulat (integer linear programming/ILP) atau disebut juga integer programming (IP), adalah suatu model pemrograman linear dengan variabel yang digunakan berupa bilangan bulat (integer). Jika semua variabel harus berupa integer, maka masalah tersebut disebut pure integer programming. Jika hanya sebagian yang harus integer maka disebut mixed integer programming. IP dengan semua variabelnya harus bernilai 0 atau 1 disebut 0-1 ILP.
Definisi 6 (Pemrograman Linear Relaksasi)
Pemrograman linear relaksasi dari suatu IP merupakan pemrograman linear yang diperoleh dari IP tersebut dengan menghilangkan kendala integer atau kendala 0-1 pada variabelnya.
(Winston, 1995)
2.3 Metode Branch and Bound untuk menyelesaikan masalah Integer
Programming
Dalam penulisan karya ilmiah ini, untuk memperoleh solusi optimal dari masalah IP digunakan software LINGO 8.0 yaitu sebuah program yang didesain untuk membangun dan menentukan solusi model linear, nonlinear, dan optimisasi integer menjadi lebih cepat, mudah, dan lebih efisien dari pada penyelesaian secara manual, dengan
prinsip pemecahannya berdasarkan metode branch and bound.
Prinsip dasar metode branch and bound adalah memecah daerah fisibel dari masalah LP-relaksasi dengan membuat subproblem-subproblem.
¾ Branch
Membuat partisi daerah solusi ke dalam subproblem. Tujuannya untuk menghapus daerah solusi yang tidak fisibel. Hal ini dicapai dengan menentukan kendala yang penting untuk menghasilkan solusi IP, secara tidak langsung titik integer yang tidak fisibel terhapus. Dengan kata lain, hasil pengumpulan dari subproblem – subproblem yang lengkap menunjukkan setiap titik integer yang fisibel dari masalah asli. Karena sifat alami partisi itu, maka proses tersebut dinamakan Branching.
¾ Bound
Misalkan masalahnya diasumsikan merupakan tipe maksimisasi, nilai objektif yang optimal untuk setiap subproblem dibuat dengan membatasi pencabangan dengan batas bawah dari nilai objektif yang dihubungkan dengan sembarang nilai integer yang fisibel. Hal ini sangat penting untuk mengatur dan menempatkan solusi optimum. Operasi ini yang menjadi alasan dinamakan Bounding.
(Taha, 1975) Langkah-langkah dari metode branch and bound adalah sebagai berikut :
Langkah 1 : Periksa apakah IP memenuhi kondisi berikut:
(1) Subproblem tidak fisibel.
(2) Subproblem menghasilkan solusi optimal dengan semua variabel bernilai integer. (3) Nilai optimal untuk subproblem lebih
kecil dari (dalam masalah memaksimumkan) batas bawah (lower bound/LB).
Jika kondisi tersebut terpenuhi, maka cabang subproblem tidak diperlukan.
Langkah 2 : Sebuah subproblem mungkin dapat dihapuskan dari pertimbangan dengan kondisi sebagai berikut :
(1) Subproblem tidak fisibel.
(2) Batas bawah (yang menunjukkan nilai optimal dari kandidat terbaik) setidaknya lebih besar dari nilai optimal subproblem.
3
1
x
Contoh 2:
Misalkan diberikan masalah integer programming berikut: Maksimumkan z=5x1+4x2 terhadap x1+x2≤5 10x1+6x2≤45 1, 2 0 x x ≥ dan integer Daerah fisibel untuk masalah IP di atas diberikan pada gambar berikut:
1 2 3 4 5 1 2 3 4 5 6 7
Gambar 1 Daerah fisibel IP.
Metode Branch and Bound dimulai dengan menentukan solusi LP-relaksasi (subproblem 1 : maksimumkan 1 2 5 4 z= x + x dengan kendala x1+x2≤5, 1 2 10x +6x ≤45, x x1, 2≥ ). 0
Solusi LP-relaksasi untuk masalah di atas adalah x1=3,75, x2 =1,75, dan
23, 75
z= . Solusi tersebut tidak memenuhi kendala bilangan bulat. Oleh karena itu harus dibuat subproblem yang baru dengan memilih variabel yang tidak memenuhi kendala bilangan bulat. Dengan memilih
1 3,75
x = , diketahui bahwa daerah
(
3< <x1 4)
dari daerah fisibel subproblem 1tidak akan memuat solusi IP yang fisibel karena tidak memenuhi kendala integer. Subproblem yang baru adalah sebagai berikut:
• Subproblem 2 : Subproblem 1 + kendala
(
x1≤ , yaitu : 3)
Maksimumkan 1 2 5 4 z= x + x Terhadap kendala : x1+x2≤5 10x1+6x2≤45 1, 2 0 x x ≥ dan integer(
x1≤ 3)
• Subproblem 3 : Subproblem 1 + kendala
(
x1≥4)
, yaitu : Maksimumkan 1 2 5 4 z= x + x Terhadap kendala : x1+x2≤5 10x1+6x2 ≤45 1, 2 0 x x ≥ dan integer(
x1≥4)
Daerah fisibel untuk subproblem 2 dan subproblem 3 diberikan pada gambar berikut: 1 2 3 4 5 1 2 3 4 5 6 7
Gambar 2 Daerah fisibel untuk subproblem 2 dan subproblem 3.
Pada subproblem 2 diperoleh solusi LP-relaksasi x1=3, x2 = , dan 2 z=23. Karena semua variabel bernilai bilangan bulat (solusinya memenuhi kendala bilangan bulat), maka tidak perlu dibuat subproblem baru. Pada subproblem 3 diperoleh solusi LP-relaksasi x1=4, x2=0.8333, dan
23, 3333
z= . Karena variabelnya tidak memenuhi kendala bilangan bulat, maka harus dibuat subproblem baru. Subproblem yang baru adalah sebagai berikut:
• Subproblem 4 : Subproblem 3 + kendala
(
x2≥ , yaitu : 1)
Maksimumkan 1 2 5 4 z= x + x Terhadap kendala : x1+x2≤5 10x1+6x2 ≤45 1, 2 0 x x ≥ dan integer(
x1≥4)
(
x2≥ 1)
1x
2 xx
24
Subproblem 5 Subproblem 4
1 4, 5 , 2 0 dan 22, 5
x = x = z=
Batas bawah (optimum)
x1 < 3 x1 > 4 Subproblem 2* Subproblem 3 Subproblem 1 1 3, 75 , 2 1, 25 dan 23, 75 x = x = z= 1 4, 2 0, 8333 dan 23, 3333 x = x = z= 1 3, 2 2 dan 23 x = x = z= Solusi takfisibel
• Subproblem 5 : Subproblem 3 + kendala
(
x2≤ , yaitu : 0)
Maksimumkan 1 2 5 4 z= x + x Terhadap kendala : x1+x2≤5 10x1+6x2≤45 1, 2 0 x x ≥ dan integer(
x1≥4)
(
x2≤ 0)
Pada subproblem 4 diperoleh solusi tak fisibel, maka tidak perlu dibuat subproblem
baru. Pada subproblem 5 diperoleh solusi LP-relaksasi x1=4,5, x2= , dan 0 z=22,5. Karena variabelnya tidak memenuhi kendala bilangan bulat, maka seharusnya dibuat subproblem baru., akan tetapi karena nilai z maksimum yang akan dihasilkan lebih kecil dari batas bawah, maka tidak perlu dibuat subproblem baru.
Branching Subproblem untuk masalah IP di atas diberikan pada Gambar 3, sedangkan solusi lengkapnya dapat dilihat pada lampiran 1.
5
III PEMBAHASAN
Grafik fungsi linear sepotong-sepotong(piecewise linear function) terdiri dari beberapa segmen garis yang kontinu. Fungsi linear sepotong–sepotong pada Gambar 4 terdiri dari tiga segmen garis. Nilai x yang membuat kemiringan dari fungsi linear sepotong – sepotong berubah (atau titik yang membuat fungsi tersebut tidak linear) disebut break point. Jadi x=0, x=20,
40,
x= x=50adalah break point dari fungsi pada Gambar 4.
Sebagai ilustrasi mengenai bagaimana fungsi linear sepotong-sepotong dapat terjadi dan sangat berguna dalam aplikasi nyata dapat dilihat pada Gambar 5. Misalkan dalam pembelian bahan baku pada sebuah pabrik tahu. Pemasok bahan baku (kedelai)
akan memberikan diskon harga kepada pabrik tahu tersebut, yang besarannya disesuaikan dengan banyaknya pembelian kedelai, dengan rincian sebagai berikut :
• biaya pembelian 500 karung kedelai pertama seharga $25 per karung. • biaya pembelian 500 karung kedelai
berikutnya seharga $20 per karung. • biaya pembelian 500 karung kedelai
berikutnya seharga $15 per karung. Semakin banyak pabrik tahu tersebut membeli, maka harga kedelainya menjadi semakin murah. Andaikan pemasok hanya memiliki persediaan kedelai sebanyak 1500 karung. Misalkan x adalah banyaknya karung kedelai yang dibeli dan ( )c x adalah biaya pembelian tiap x karung kedelai untuk :
Untuk 0≤ ≤x 500, ( )c x =25x Untuk 500< ≤x 1000,
c x( )= biaya pembelian 500 karung kedelai pertama yaitu $25 per karung ditambah biaya pembelian berikutnya yaitu
500
x− karung kedelai dengan harga $20 perkarung 25(500) 20( 500) 12500 20( ) 1000 20 2500 x x x = + − = + − = + Untuk 1000< ≤x 1500, c x( )=biaya pembelian 1000 karung kedelai pertama ditambah biaya pembelian berikutnya yaitu x-1000 karung kedelai dengan harga $15 per karung
Sehingga fungsi biaya pembelian tiapx karung kedelai dapat dituliskan dalam bentuk: 25 (0 500) ( ) 20 2500 (500 1000) 15 7500 (1000 1500) x x c x x x x x ≤ ≤ = + < ≤ + < ≤
⎧
⎪
⎨
⎪⎩
20(1000) 2500 15( 1000) 20(1000) 2500 15( ) 15(1000) 15 2500 5(1000) 15 7500 x x x x = + + − = + + − = + + = + 10 20 30 40 50 x C(x) Gambar 4Gambar 5 Biaya pembelian bahan baku tahu 500 1000 1500 6000 12000 18000 24000 30000
6
Pada pembelian sejumlah tertentu pabrik tahu akan mendapatkan diskon harga dari si pemasok, hal ini menyebabkan fungsi pembelian bahan baku tahu menjadi tidak linear, akan tetapi termasuk dalam fungsi linear sepotong-sepotong. Sehingga dapat disimpulkan bahwa ( )c x memiliki break point b1 = 0, b2 = 500, b3 = 1000, b4 = 1500.
Fungsi linear sepotong-sepotong sebenarnya bukan merupakan fungsi linear, maka pemrograman linear tidak dapat digunakan untuk memecahkan masalah-masalah optimisasi dengan melibatkan fungsi ini.
Namun demikian ternyata fungsi linear sepotong-sepotong dapat direpresentasikan ke dalam bentuk linear dengan menambah kendala-kendala linear tertentu.
Misalkan ( )f x adalah fungsi linear sepotong-sepotong, yang memiliki break point b1, b2, b3, …, bn. Untuk suatu
( k k = 1, 2, ..., -1),n bk ≤ ≤x bk+1. Selanjutnya untuk suatu bilangan
(0 1), k k z ≤ z ≤ x dapat dituliskan sebagai : 1 (1 ) k k k k x=z b + −z b+
karena ( )f x merupakan fungsi linear untuk 1
,
k k
b ≤ ≤x b+ sehingga dapat dituliskan : 1 1 ( ) (z (1 z ) ) z ( ) (1 z ) ( ) k k k k k k k k f x f b b f b f b + + = + − = + −
Untuk mengilustrasikannya, lihat lagi contoh pembelian kedelai pada Gambar 5, ambil x = 1100, sehingga kita memiliki b3 = 1000 ≤ 1100 ≤ 1500 = b4, dan dapat dituliskan: 4(1000) 1(1500) 5 5 x= + ( ) (1100) 4 1 (1000) (1500) 5 5 f x f f f = = + 4 1 (22500) (30000) 5 5 24000 = + =
Ada dua langkah utama yang harus kita lakukan ketika menemukan suatu masalah yang mengandung fungsi linear sepotong-sepotong, yaitu :
• Langkah Pertama
Nyatakan ( )f x dalam bentuk ( )
f x =z f b1 ( )1 +z f b2 ( ) ...2 + +z f bn ( )n • Langkah Kedua
Untuk menjamin formula di atas dapat berfungsi, selain kendala-kendala yang telah ada pada permasalahan tersebut, tambahkan kendala-kendala baru :
1 1 z ≤ y 2 1 2 z ≤ y +y
3 2 3 z ≤ y +y
M
1 2 1 n n n z− ≤ y− +y− 1 n n z ≤y− 1 2 ... n1 1 y + y + + y− = 1 2 ... n 1 z +z + +z = 1 1 2 2 ... n n x= z b +z b + +z b 0 atau 1, ( 1, 2, ..., 1) i y = i= n−0, ( 1, 2, ..., ) i z ≥ i= n
(y merupakan variabel tambahan). Dari langkah satu dan dua akan didapatkan sebuah fungsi objektif yang linear dengan kendala-kendalanya yang dapat diselesaikan dengan menggunakan pemrograman linear.
7
IV CONTOH KASUS
Euing Gas memproduksi 2 jenis gas(gas 1 dan gas 2) dari 2 jenis minyak (minyak 1 dan minyak 2). Setiap galon gas 1 harus berisi minimal 50% minyak 1, dan setiap galon gas 2 harus terisi sedikitnya 60% minyak 1. Setiap galon gas 1 dapat terjual $12 dan gas 2 terjual seharga $14 per galon. Saat ini telah tersedia 500 galon minyak 1 dan 1000 galon minyak 2. Sebanyak 1500 galon lebih minyak 1 dapat dibeli dengan harga berikut : 500 galon pertama seharga $25 per galon, 500 galon berikutnya $20 per galon, dan 500 galon berikutya $15 per galon. Formulasikan Integer Programming yang dapat memaksimalkan keuntungan Euing Gas.
Penyelesaian :
Terlihat bahwa biaya pembelian minyak 1merupakan fungsi linear sepotong-sepotong, kita misalkan :
( )
c x = fungsi pembelian minyak 1 x = banyaknya minyak 1 yang dibeli
=
xij banyaknya minyak i yang digunakan untuk memproduksi gas j (i,j = 1,2)
Keuntungan Euink Gas (Z) = total pendapatan – biaya pembelian minyak 1
11 21 12 22 12( ) 14( ) ( ) Z = x +x + x +x −c x Dengan : 25 (0 500) ( ) 20 2500 (500 1000) 15 7500 (1000 1500) x x c x x x x x ≤ ≤ = + < ≤ + < ≤
⎧
⎪
⎨
⎪⎩
Fungsi objektifnya adalah memaksimumkan
Z = 12(x11+x21) 14(+ x12 +x22)−c x( ) dengan kendala :
1. Euink Gas dapat menggunakan paling banyak x + 500 galon minyak 1.
x
11+
x
12≤ +
x
500
2. Euing Gas dapat menggunakan paling banyak 1000 galon minyak 2.
x
21+
x
22≤
1000
3. Campuran minyak untuk membuat gas 1 minimal mengandung 50% minyak 1.
 11 11 21
0.5
atau
x
x
+
x
≥
0.5
x
11−
0.5
x
21≥
0
4. campuran minyak untuk membuat gas 2 minimal mengandung 60% minyak 1.
 12 12 22
0.6
atau
x
x
+
x
≥
0.4
x
12−
0.6
x
22≥
0
5.x
ij≥
0
6.0
≤ ≤
x
1500
Karena
c x
( )
merupakan fungsi linear sepotong-sepotong, fungsi objektifnya bukanlah fungsi linear dari x, dan optimisasi ini bukanlah suatu pemograman linear. Akan tetapi sesuai dengan penjelasan pada materi ini, kita dapat mengubah bentuk masalah ini menjadi masalah pemograman bilangan bulat. Setelah mengetahui break points untukc x
( )
adalah b1 = 0, b2 = 500, b3 = 1000, b4 = 1500, langkah selanjutnya adalah: Langkah 1 .Nyatakan
c x
( )
dalam bentuk1 2 3 4 ( ) (0) (500) (1000) (1500) c x z c z c z c z c = + + + Langkah 2.
Tambahkan kendala baru
1 2 3 4
0
500
1000
1500
x
=
z
+
z
+
z
+
z
1 1z
≤
y
,z
2≤
y
1+
y
2 3 2 3z
≤
y
+
y
,z
4≤
y
3 1 2 3 41
z
+ + +
z
z
z
=
,y
1+
y
2+
y
3=
1
,0,(
1, 2,3, 4)
iz
≥
i
=
0 atau 1,(
1, 2,3)
iy
=
i
=
Persamaan baru yang merupakan masalah pemograman linear yaitu :
11 21 12 22 1 2 3 4 max 12( ) 14( ) (0) (500) (1000) (1500) z x x x x z c z c z c z c = + + + − − − − dengan kendala :
8
11 12 500 x +x ≤ +x (1) 21 22 1000 x +x ≤ (2) 11 21 0.5x −0.5x ≥ 0 (3) 12 22 0.4x −0.6x ≥ 0 (4) 1 2 3 4 0 500 1000 1500 x= z + z + z + z (5) 1 1 z ≤ y (6) 2 1 2 z ≤ y +y (7) 3 2 3 z ≤ y + y (8) 4 3 z ≤ y (9) 1 2 3 4 1 z +z +z +z = (10) 1 2 3 1 y +y + y = (11) 0 atau 1, ( 1, 2, 3) i y = i= (12) 0, ( 1, 2, 3, 4) i z ≥ i= (13) 0 ij x ≥ (14)Untuk melihat kenapa formula ini bekerja, karena y1+y2+y3= dan 1
0 atau 1,
i
y = perhatikan (6)-(11) jika 1,
i
y = kemudian zi dan zi+1 positif, tapi
semua zi yang lain harus sama dengan 0,
misalkan jika y2 = maka 1, y3 = y1 =0,
kemudian perhatikan (6)-(9) menjadi
1 0, 1, 2 1, 3 4 0.
z ≤ z ≤ z ≤ z ≤ Kendala ini memaksa z1 =z4 =0 dan membiarkan z2
dan z3 menjadi bilangan tak negatif kurang
dari atau sama dengan 1. Selanjutnya pilih suatu nilai x sembarang, misalkan x=800. Catatan bahwa b2 =500≤ ≤x 1000=b3
.
Untuk x=800 nilai y1= tidak 1 dimungkinkan, karena jika y1= maka 1
2 3 0,
y = y = kemudian (8)&(9) memaksa
3
=
40.
z z
=
Kemudian masukan ke kendala (5) 800= =x 500 z2,
yang tidak dapat dipenuhi dengan z2 ≤ 1. Serupa juga jika diambil y3=1 pada x=800 tidak akan terpenuhi. Jika kita coba y2=1 dari (6)&(9) memaksa z1=
z4=
0.
Kemudian (7)&(8) menjadi z2 ≤ 1 dan z3 ≤ 1 sekarang masukan ke kendala (5) 800 = x = 500z2 + 1000z3. karena z2+z3 = , kita peroleh 12 3 2 3 dan 5 5 z = z = . Sekarang fungsi objektifnya menjadi : 11 21 12 22 2 (500) 12 12 14 14 5 3 (1000) 5 c z x x x x c = + + + − − dengan kendala(1)-(14) Karena 2 (500) 3 (1000) (800) 5 5 c c c = +
Fungsi objektif kita menghasilkan nilai yang tepat untuk Euing Gas, jika dilakukan perhitungan maka solusi optimal untuk masalah maksimisasi pada perusahaan Euing Gas adalah sebagai berikut :
Z = $12500 x = 1000 galon x12 = 1500 galon x22 = 1000 galon x11 = 0 galon x21 = 0 galon
terlihat bahwa untuk mendapat keuntungan yang optimal Euing Gas harus membeli 1000 galon minyak 1 dan memproduksi 2500 galon gas 2. Solusi lengkapnya dapat dilihat pada lampiran 2.
9
V SIMPULAN DAN SARAN
5.1 Simpulan
Langkah pertama yang harus dilakukan untuk menyelesaikan masalah integer programming dengan fungsi objektif linear sepotong-sepotong yaitu dengan cara menyatakan fungsi linear sepotong-sepotong tersebut menjadi sebuah fungsi linear secara utuh.
Sehingga dengan demikian masalah pemrograman integer dengan fungsi objektif linear sepotong-sepotong dapat ditransformasikan menjadi pemrograman linear integer, dengan cara menyatakan
( )
f x dalam bentuk
1 ( )1 2 ( ) ...2 n ( ).n
z f b +z f b + +z f b
Kemudian tambahkan beberapa kendala baru yang menjamin fungsi objektif menjadi linear.
5.2 Saran
Pada pembahasan skripsi ini hanya dipelajari mengenai transformasi fungsi linear sepotong-sepotong yang kontinu, bagi yang berminat meneruskan, disarankan untuk menggali lagi apakah metode ini dapat digunakan untuk fungsi linear sepotong-sepotong yang tidak kontinu.
DAFTAR PUSTAKA
Nash, S.G. & A. Sofer. 1996. Linear and
Nonlinear Programming. McGraw-Hill, New York.
Taha, H. A. 1975. Integer Programming :
Theory, Aplications, and Computations Academic Press, New York.
Winston, W.L. 1995. Introduction to
Mathematical Programming 2nd ed.
Duxbury, New York.
Winston, W.L. 2004. Operation Research
Applications and Algorithms. Brooks /Cole-Thomson Learning. New York.
10
11
1
x
Lampiran 1 Syntax Program LINGO 8.0 untuk Menyelesaikan LP dengan Metode Branch and
Bound Dari LP pada Contoh 2
Misalkan diberikan masalah integer programming berikut: Maksimumkan z=5x1+4x2 terhadap x1+x2≤ 5 10x1+6x2≤45 1, 2 0 x x ≥ dan integer Penyelesaian:
Daerah fisibel untuk masalah IP di atas diberikan pada gambar berikut: 2 x 1 2 3 4 5 1 2 3 4 5 6 7
Gambar 1 Daerah fisibel IP
Anggap LP tersebut sebagai subproblem 1. 1. Cari solusi LP-Relaksasi dari subproblem 1
Syntax program LINGO 8.0: max=5*x1+4*x2; x1+x2<=5;
10*x1+6*x2<=45; x1>=0;
x2>=0;
Hasil yang diperoleh:
Global optimal solution found at iteration: 2 Objective value: 23.75000 Variable Value Reduced Cost
X1 3.750000 0.000000 X2 1.250000 0.000000 Row Slack or Surplus Dual Price 1 23.75000 1.000000 2 0.000000 2.500000 3 0.000000 0.2500000 4 3.750000 0.000000 5 1.250000 0.000000
Karena solusi yang didapat belum memenuhi kendala integer maka harus dibuat subproblem baru, yaitu:
• Subproblem 2 : Subproblem 1 + kendala
(
x1≤ 3)
• Subproblem 3 : Subproblem 1 + kendala(
x1≥4)
2. Cari solusi LP dari subproblem 2Syntax program LINGO 8.0: max=5*x1+4*x2; x1+x2<=5; 10*x1+6*x2<=45; x1>=0; x2>=0; x<=3;
12
Hasil yang diperoleh:
Global optimal solution found at iteration: 2 Objective value: 23.00000 Variable Value Reduced Cost
X1 3.000000 0.000000 X2 2.000000 0.000000 Row Slack or Surplus Dual Price 1 23.00000 1.000000 2 0.000000 4.000000 3 3.000000 0.000000 4 3.000000 0.000000 5 2.000000 0.000000 6 0.000000 1.000000
Karena hasilnya sudah memenuhi kendala integer maka subproblem 2 kita jadikan batas bawah.
3. Cari solusi LP dari subproblem 3 Syntax program LINGO 8.0: max=5*x1+4*x2; x1+x2<=5; 10*x1+6*x2<=45; x1>=0; x2>=0; x1>=4;
Hasil yang diperoleh:
Global optimal solution found at iteration: 3 Objective value: 23.33333 Variable Value Reduced Cost
X1 4.000000 0.000000 X2 0.8333333 0.000000 Row Slack or Surplus Dual Price 1 23.33333 1.000000 2 0.1666667 0.000000 3 0.000000 0.6666667 4 4.000000 0.000000 5 0.8333333 0.000000 6 0.000000 -1.666667
Karena solusi yang didapat belum memenuhi kendala integer maka harus dibuat subproblem baru, yaitu:
• Subproblem 4 : Subproblem 3 + kendala
(
x2≥ 1)
• Subproblem 5 : Subproblem 3 + kendala(
x2≤ 0)
4. Cari solusi LP dari subproblem 4Syntax program LINGO 8.0: max=5*x1+4*x2; x1+x2<=5; 10*x1+6*x2<=45; x1>=0; x2>=0; x1>=4; x2>=1;
13
Daerah subproblem 4 merupakan daerah tidak fisibel maka subproblem 4 tidak memiliki solusi fisibel.
5. Cari solusi LP dari subproblem 5 Syntax program LINGO 8.0: max=5*x1+4*x2; x1+x2<=5; 10*x1+6*x2<=45; x1>=0; x2>=0; x1>=4; x2<=0;
Hasil yang diperoleh
Global optimal solution found at iteration: 3 Objective value: 22.50000 Variable Value Reduced Cost
X1 4.500000 0.000000 X2 0.000000 0.000000 Row Slack or Surplus Dual Price 1 22.50000 1.000000 2 0.5000000 0.000000 3 0.000000 0.5000000 4 4.500000 0.000000 5 0.000000 0.000000 6 0.5000000 0.000000 7 0.000000 1.000000
Karena solusi yang didapat belum memenuhi kendala integer maka harus dibuat subproblem baru, yaitu:
• Subproblem 6: Subproblem 5 + kendala
(
x1≥ 5)
• Subproblem 7 : Subproblem 5 + kendala(
x1≤4)
Akan tetapi karena hasilnya (22.5) kurang dari batas bawah (23)maka tidak perlu lagi melakukan perhitungan, karena sudah pasti nilai dari pencabangan berikutnya akan kurang dari batas bawah, sehingga dapat kita simpulkan bahwa subproblem 2 sebagai solusi optimum.
Lampiran 2 Penyelesaian solusi pada contoh kasus permasalahan perusahaan Euing Gas
menggunakan software LINGO 8.0 Syntax program LINGO 8.0: MODEL:
! solusi pada permasalahan Euink Gas;
SETS:
PRODUK / GAS1, GAS2/: HARGA_JUAL;
BAHAN_BAKU / MINYAK1, MINYAK2/: KAPASITAS, BELI; DECISION_VARIABLES(BAHAN_BAKU, PRODUK): PRODUKSI; DUMMY1 / Z1..Z4/: BETA, COST, BREAK_POINT;
DUMMY2 / Y1..Y3/: GAMMA; ENDSETS
DATA:
14
HARGA_JUAL = 12 14;
COST = 0 12500 22500 30000;!lengkapnya hitung dari c(0) sampai c(1500); BREAK_POINT = 0 500 1000 1500; ENDDATA !Fungsi objektif; Max = @sum(DECISION_VARIABLES(I, J): HARGA_JUAL(J)*PRODUKSI(I,J)) - @SUM(DUMMY1(I): BETA(I)*COST(I)); !Kendala 1; @FOR(BAHAN_BAKU(I)|I#EQ#1:
@SUM(PRODUK(J): PRODUKSI(I,J)) <= BELI(I) + KAPASITAS(I));
!Kendala 2;
@FOR(BAHAN_BAKU(I)|I#EQ#2:
@SUM(PRODUK(J): PRODUKSI(I,J)) <= KAPASITAS(I));
!kendala 3; @FOR(PRODUK(J)|J#EQ#1: @SUM(BAHAN_BAKU(I)|I#EQ#1: 0.5*PRODUKSI(I,J) - 0.5*PRODUKSI(I+1,J))>= 0); !kendala 4; @FOR(PRODUK(J)|J#EQ#2: @SUM(BAHAN_BAKU(I)|I#EQ#1: 0.4*PRODUKSI(I,J) - 0.6*PRODUKSI(I+1,J))>= 0); !kendala 5; @FOR(BAHAN_BAKU(I)|I#EQ#1:
@SUM(DUMMY1(J): BREAK_POINT(J)*BETA(J)) = BELI(I));
!kendala tambahan, memaksa pembelian untuk minyak 2 tidak ada;
@FOR(BAHAN_BAKU(I)|I#EQ#2: BELI(I)=0); !kendala 6; @FOR(DUMMY1(I)|I#EQ#1: @SUM(DUMMY2(J)|J#EQ#1:GAMMA(J))>= BETA(I)); !kendala 7; @FOR(DUMMY1(I)|I#EQ#2: @SUM(DUMMY2(J)|J#LT#3:GAMMA(J))>= BETA(I)); !kendala 8; @FOR(DUMMY1(I)|I#EQ#3: @SUM(DUMMY2(J)|J#GT#1:GAMMA(J))>= BETA(I)); !kendala 9; @FOR(DUMMY1(I)|I#EQ#4: @SUM(DUMMY2(J)|J#EQ#3:GAMMA(J))>= BETA(I)); !kendala 10; @SUM(DUMMY1(I):BETA(I))=1; !kendala 11; @SUM(DUMMY2(I):GAMMA(I))=1;
15
!kendala biner atau kendala 12; @FOR( DUMMY2: @BIN( GAMMA));
! kendala 13 dan 14 tidak perlu ditulis, sudah default Lingo untuk set up variabel yang dicari nilainya >=0;
END
Hasil yang didapat:
Global optimal solution found at iteration: 32 Objective value: 12500.00
Variable Value Reduced Cost
HARGA_JUAL( GAS1) 12.00000 0.000000 HARGA_JUAL( GAS2) 14.00000 0.000000 KAPASITAS( MINYAK1) 500.0000 0.000000 KAPASITAS( MINYAK2) 1000.000 0.000000 BELI( MINYAK1) 1000.000 0.000000 BELI( MINYAK2) 0.000000 0.000000 PRODUKSI( MINYAK1, GAS1) 0.000000 0.000000 PRODUKSI( MINYAK1, GAS2) 1500.000 0.000000 PRODUKSI( MINYAK2, GAS1) 0.000000 3.500000 PRODUKSI( MINYAK2, GAS2) 1000.000 0.000000 BETA( Z1) 0.000000 0.000000 BETA( Z2) 0.000000 0.000000 BETA( Z3) 1.000000 0.000000 BETA( Z4) 0.000000 0.000000 COST( Z1) 0.000000 0.000000 COST( Z2) 12500.00 0.000000 COST( Z3) 22500.00 0.000000 COST( Z4) 30000.00 0.000000 BREAK_POINT( Z1) 0.000000 0.000000 BREAK_POINT( Z2) 500.0000 0.000000 BREAK_POINT( Z3) 1000.000 0.000000 BREAK_POINT( Z4) 1500.000 0.000000 GAMMA( Y1) 0.000000 -10000.00 GAMMA( Y2) 0.000000 -2500.000 GAMMA( Y3) 1.000000 0.000000
Row Slack or Surplus Dual Price 1 12500.00 1.000000 2 0.000000 15.00000 3 0.000000 12.50000 4 0.000000 -6.000000 5 0.000000 -2.500000 6 0.000000 -15.00000 7 0.000000 0.000000 8 0.000000 -7500.000 9 0.000000 -2500.000 10 0.000000 0.000000 11 1.000000 0.000000 12 0.000000 -7500.000 13 0.000000 0.000000