penerapan metode simpleks untuk menentukan …
TRANSCRIPT
i
PENERAPAN METODE SIMPLEKS UNTUK MENENTUKAN JUMLAH
LILIN HIAS YANG DIPRODUKSI BERDASARKAN JUMLAH DAN
KOMPOSISI BAHAN
(STUDI KASUS : PERUSAHAAN LILIN HIAS RINDANG)
TUGAS AKHIR
Diajukan untuk Memenuhi Salah Satu Syarat
Memperoleh Gelar Sarjana Teknik
Program Studi Teknik Informatika
Oleh:
Tammyana Ranas
045314015
PROGRAM STUDI TEKNIK INFORMATIKA
FAKULTAS SAINS DAN TEKNOLOGI
UNIVERSITAS SANATA DHARMA
YOGYAKARTA
2009
ii
APLICATION OF SIMPLEX METHOD FOR DETERMINING THE
AMOUNT OF DECORATIVE CANDLES TO PRODUCE BASED ON THE
AMOUNT AND COMPOSITION OF MATERIAL
(CASE STUDY : RINDANG DECORATIVE CANDLE COMPANY)
FINAL PROJECT
Presented as Partial Fulfillment of The Requirements
to Obtain Sarjana Teknik Degree
in Informatics Engineering
By :
Tammyana Ranas
045314015
INFORMATICS ENGINEERING STUDY PROGRAM
FACULTY OF SCIENCE AND TECHNOLOGY
SANATA DHARMA UNIVERSITY
YOGYAKARTA
2009
vi
HALAMAN PERSEMBAHAN
�������������� �������������������������������� �������������������������������� �������������������������������� ����������������������
����
������������������������������������������������������������������������������������������������������������������������������������������������������������
����������������� ����������������������� ����������������������� ����������������������� ����������������������� ����������������������� ����������������������� ����������������������� ������
�� ���������� ���������� ���������� ��������������������������������
����
����������������������������������������������������������������������������������������������������������������������������
������������������������������������������������������������������������������������������������������������
����������������������������������������������������������� ������ ���� ��������������� ������ ���� ��������������� ������ ���� ��������������� ������ ���� ��������
!����������!����������!����������!��������������������������������������������������������������������������������������������������������������������������������������������������
��������������� ����������������������� ����������������������� ����������������������� ����������������
vii
MOTTO
������������� ������� ������� ��������� ����� � ������
�
������ ���� ��������������� ����� � ��� � � �� ��� ������� ��
����� ������� ��� ��������� ������ ����� � ��� � � ������� ������
��� ������� ������ ��� ��� ������ �������� ��������� !" #��
�
��� ���� ��������� ���� ����� � ��� �$%� �������� � ��
��� ��� ��� �
viii
ABSTRAKSI
Dalam kesehariannya, Perusahaan Lilin Hias Rindang memproduksi lilin
hias dengan menggunakan bahan-bahan yang sudah tersedia. Bahan-bahan yang
sudah tersedia ini kemudian digunakan semaksimal mungkin untuk membuat
beberapa macam bentuk lilin hias. Perusahaan Lilin Hias Rindang tidak pernah
memperhitungkan keuntungan optimal yang akan didapat dalam menggunakan
bahan-bahan yang tersedia tersebut. Hal ini menyebabkan perusahaan
mendapatkan keuntungan, namun belum semaksimal mungkin.
Dalam tugas akhir ini, penulis membuat program bantu untuk menentukan
jumlah lilin hias yang harus diproduksi untuk menghasilkan keuntungan yang
semaksimal mungkin menggunakan metode simpleks dan branch-bound. Program
bantu ini dibuat menggunakan bahasa pemrograman Java dan MySQL sebagai
database-nya. Inputan dari program ini berupa bentuk lilin hias yang akan
diproduksi, kendala minimum ataupun maksimum untuk tiap bentuk lilin hias
serta bahan-bahan yang tersedia. Kemudian hasil outputnya berupa jumlah lilin
hias yang harus diproduksi serta keuntungan maksimal yang akan didapat.
Output program menunjukkan hasil yang sama dengan QMForWindows 2
akan tetapi Program Bantu Penentuan Lilin Hias yang Harus Diproduksi lebih
mudah digunakan karena pemakai tidak perlu membuat model matematikanya.
ix
ABSTRACT
Rindang Decorative Candle Company produces decorative candles using
given materials each day. Those materials will be used as maximal as possible in
production of various shapes of decorative candles. Rindang Decorative Candle
Company had never calculate the optimal profits of it. That’s why this company
hasn’t get a maximal profit yet.
In this final project, the author make an application for determining the
amount of decorative candle of which should be produced to get a maximal profit
by using simplex method and branch-bound. This application is implemented
using Java programming language and MySQL as its database. The input of this
program is decorative candle shape to produce, the minimum or maximum
constraints for every shape of decorative candles and given materials. The output
is the amount of decorative candle of which should be produced and the maximal
profit.
Output from this application program has same result with QMForWindows
2, but “The Aplication Program for Determining How Many Decorative Candle
Should Be Produced” is easier to use because user doesn’t need to make
mathematic model.
xi
KATA PENGANTAR
Puji dan syukur penulis ucapkan kepada Alloh SWT yang telah
melimpahkan kasih sayang serta anugerah-Nya, sehingga dapat terselesaikannya
tugas akhir ini dengan judul PENERAPAN METODE SIMPLEKS UNTUK
MENENTUKAN JUMLAH LILIN HIAS YANG DIPRODUKSI
BERDASARKAN JUMLAH DAN KOMPOSISI BAHAN. Penulisan tugas akhir
ini ditujukan untuk memenuhi salah satu syarat memperoleh gelar sarjana Sains
dan Teknologi Jurusan Teknik Informatika.
Terselesaikannya penulisan tugas akhir ini tidak lepas dari peran serta
beberapa pihak, baik secara langsung maupun tidak langsung. Oleh karena itu
penulis ingin menyampaikan terima kasih kepada pihak-pihak yang telah ikut
membantu dalam penulisan tugas akhir ini, baik dalam memberi bimbingan,
petunjuk, kerjasama, kritikan, maupun saran, antara lain kepada :
1. Alloh SWT, yang telah melimpahkan kasih sayang serta anugerah-Nya yang
telah diberikan kepada penulis sehingga dapat menyelesaikan Tugas Akhir ini.
2. Dosen Pembimbing, Bapak Drs. Jong Jek Siang, M.Sc yang telah meluangkan
waktu, tenaga dan pikiran untuk membimbing penulis dari awal sampai
terselesaikannya penulisan tugas akhir ini.
3. Bapak Albertus Agung Hadhiatma, S.T. dan Bapak Eko Hari Parmadi, S.Si.,
M.Kom. selaku dosen penguji yang memberikan banyak masukan dan
inspirasi.
xii
4. Kedua orang tua, ayah dan ibu serta Rindang, yang selalu mendoakan,
memberi spirit dan dorongan kepada saya untuk dapat menyelesaikan
penulisan laporan tugas akhir ini.
5. Seluruh dosen, staf, dan karyawan Universitas Sanata Dharma khususnya
Fakultas Sains dan Teknologi Jurusan Teknik Informatika.
6. Teman-teman jurusan Teknik Informatika Angkatan 2004 terkhusus Ratih
Dewi Yulianti, Hylda Yusticianti dan Aldegonda Yulia Meriana.
7. Teman-teman FKM Budi Utama yang selalu memberi dukungan, semangat
serta doa.
Yogyakarta, 16 September 2009
Penulis
xiii
DAFTAR ISI
HALAMAN JUDUL ……………………………………………………….... i
HALAMAN PERSETUJUAN. ........................................................................ iii
HALAMAN PENGESAHAN .......................................................................... iv
HALAMAN PERNYATAAN .......................................................................... v
HALAMAN PERSEMBAHAN ....................................................................... vi
MOTTO ............................................................................................................ vii
ABSTRAKSI .................................................................................................... viii
HALAMAN PERSETUJUAN ......................................................................... x
KATA PENGANTAR ...................................................................................... xi
DAFTAR ISI .................................................................................................... xiii
DAFTAR GAMBAR........................................................................................ xvi
DAFTAR TABEL............................................................................................. xviii
BAB I PENDAHULUAN ................................................................................ 1
1.1 Latar Belakang Masalah .................................................................... 1
1.2 Rumusan Masalah ............................................................................. 1
1.3.Batasan Masalah ................................................................................ 2
1.4 Tujuan dan Manfaat Penelitian ......................................................... 2
1.5 Metodologi Penelitian ....................................................................... 2
1.6 Sistematika Penulisan ........................................................................ 3
BAB II DASAR TEORI .................................................................................... 4
2.1 Program Linier ................................................................................... 4
xiv
2.2 Metode Simpleks ............................................................................... 4
2.2.1 Bentuk Standar Metode Simpleks ........................................ 4
2.2.2 Langkah-Langkah Pemecahan Program Linier dengan
Metode Simpleks ................................................................ 7
2.3 Program Bilangan Bulat ................................................................... 9
2.4 Pemodelan Sistem ............................................................................ 12
BAB III ANALISIS DAN PERANCANGAN SISTEM ................................ 16
3.1 Gambaran Umum Sistem ................................................................. 17
3.2 Perancangan Sistem ......................................................................... 18
3.2.1 Use Case Diagram .............................................................. 18
3.2.2 Context Diagram ................................................................. 18
3.2.3 Decompotition Diagram ………………………………...... 19
3.2.4 Data Flow Diagram level 0 ................................................. 19
3.2.5 Data Flow Diagram Level 1 Proses 2…………………….. 20
3.2.6 Data Flow Diagram Level 1 Proses 3…………………….. 21
3.2.7 E-R Diagram……………………………………………… 21
3.2.8 Tabel Hasil Mapping E-R Diagram..................................... 22
3.3 Studi Kasus ..................................................................................... 23
3.4 Perancangan Antar Muka Produsen................................................. 24
3.4.1 Tampilan Form Login.......................................................... 24
3.4.2 Tampilan Form Menu......................................................... 24
3.4.3 Tampilan Form Update Bahan............................................. 25
3.4.4 Tampilan Form Update Lilin Hias...................................... 26
xv
3.4.5 Tampilan Form Perhitungan............................................... 26
3.4.6 Tampilan Form Hasil Perhitungan....................................... 27
3.4.7 Tampilan Form Administrator ............................................ 28
BAB IV IMPLEMENTASI SISTEM………………………………………. 30
4.1 Algoritma Metode Simpleks............................................................ 30
4.2 Algoritma Metode Branch and Bound............................................ 35
4.3 Hasil Implementasi……………………………………………….. 44
4.3.1 Login……………………………………………………… 44
4.3.2 Menu……………………………………………………… 45
4.3.3 Administrator …………………………………………….. 46
4.3.4 Update Bahan…………………………………………….. 47
4.3.5 Update Lilin Hias………………………………………… 48
4.3.6 Perhitungan……………………………………………….. 49
4.3.7 Hasil………………………………………………………. 51
4.4 Analisa Hasil Implementasi……………………………………….. 51
4.4.1 Kelebihan Program Bantu.................................................... 63
4.4.2 Kekurangan Program Bantu................................................. 63
BAB V PENUTUP......................................................................................... 65
5.1 Kesimpulan....................................................................................... 65
5.2 Saran................................................................................................. 66
DAFTAR PUSTAKA....................................................................................... 67
xvi
DAFTAR GAMBAR
GAMBAR KETERANGAN HALAMAN
2.1 Keterangan Tabel Simpleks 9
2.2 Keterangan Branch-Bound 11
2.3 Pemodelan Branch-Bound 16
3.1 Flow Chart 17
3.2 Use Case Diagram 18
3.3 Contex Diagram 18
3.4 Decompotition Diagram 19
3.5 Data Flow Diagram Level 0 19
3.6 Data Flow Diagram Level 1 Proses 2 20
3.7 Data Flow Diagram Level 1 Proses 3 21
3.8 E-R Diagram 21
3.9 Tampilan Form Login 24
3.10 Tampilan Form Menu 25
3.11 Tampilan Form Update Bahan 25
3.12 Tampilan Form Update Lilin Hias 26
3.13 Tampilan Form Perhitungan 27
3.14 Tampilan Form Hasil Perhitungan 28
3.15 Tampilan Form Administrator 29
4.1 Hubungan Antar Fungsi Simpleks 30
4.2 Form Login 44
4.3 Form Menu 45
4.4 Form Administrator 46
4.5 Form Update Bahan 47
xvii
4.6 Form Update Lilin Hias 48
4.7 Form Perhitungan 49
4.8 Tanpilan Hasil Perhitungan 51
4.9 Pemodelan branch-bound untuk Penyelesaian
Ganda
59
4.10
Output Jika Inputan Bahan yang Tersedia Tidak
Memenuhi Kebutuhan untuk Membuat Satu Buah
Lilin Hias
60
xviii
DAFTAR TABEL
TABEL KETERANGAN HALAMAN
2.1 Tabel Awal Simpleks 8
2.2 Tabel Bahan 12
2.3 Tabel Contoh Iterasi 15
3.1 Tabel Lilin Hias 22
3.2 Tabel Kebutuhan Bahan 22
3.3 Tabel Lilin Hias 22
3.4 Tabel Bahan 23
1
BAB I
PENDAHULUAN
1.1 Latar Belakang Masalah
Dalam keseharian memproduksi lilin hias, perusahaan lilin hias Rindang
menggunakan bahan-bahan yang sudah tersedia. Bahan-bahan yang sudah
tersedia ini biasanya akan diproduksi semaksimal mungkin dan setelah selesai
dalam pembuatannya barulah hasilnya dibagikan dan dikirimkan kepada
pelanggan.
Bentuk-bentuk lilin hias yang dikirimkan oleh perusahaan Rindang kepada
para pelanggannya ada 4 macam yaitu, juice, tart, ice cream dan jelly. Keempat
macam bentuk lilin hias tersebut membutuhkan bahan yang sama namun berbeda
komposisinya. Bahan-bahan yang dibutuhkan adalah parafin, stearic acid, candle
jell dan white oile.
1.2 Rumusan Masalah
Dari latar belakang masalah di atas dapat dirumuskan menjadi beberapa
masalah sebagai berikut:
1. Bagaimana menentukan jumlah lilin hias yang akan diproduksi agar
menghasilkan keuntungan maksimal dengan bahan yang tersedia.
2. Bagaimana mengimplementasikan metode simpleks untuk menentukan jumlah
lilin hias yang harus diproduksi dalam suatu program.
3. Bagaimana mengimplementasikan metode branch-bound untuk membulatkan
hasil dari implementasi metode simpleks dalam suatu program.
2
1.3 Batasan Masalah
Agar sistem yang penulis buat tidak keluar dari inti dan tujuan serta menjadi
luas, maka penulis memberikan batasan-batasan sebagai berikut:
1. Masalah diasumsikan dapat diselesaikan dengan menggunakan program
bilangan bulat dengan menggunakan metode branch-bound.
2. Program bantu digunakan untuk menghitung jumlah lilin hias yang akan
dikirimkan ke pelanggan.
3. Bahasa pemrograman yang digunakan untuk mengimplementasikan metode
simpleks dan branch-bound adalah bahasa pemrograman Java dan untuk
pengelolaan data menggunakan MySQL.
1.4 Tujuan dan Manfaat Penelitian
Dalam tugas akhir ini tujuan yang dicapai penulis adalah membuat program
bantu untuk menentukan jumlah lilin hias yang akan diproduksi dengan
keterbatasan bahan yang tersedia agar mendapatkan keuntungan yang maksimal.
1.5 Metodologi Penelitian
Metodologi penelitian yang digunakan untuk membuat program bantu ini
adalah sebagau berikut:
1. Studi pustaka tentang program linier terutama metode simpleks dan program
bilangan bulat terutama metode branch-bound.
2. Pembuatan rancangan dan implementasi program menggunakan siklus
waterfall.
3
1.6 Sistematika Penulisan
Sistematika penulisan laporan tugas akhir ini adalah sebagai berikut:
BAB I PENDAHULUAN
Bab ini berisi latar belakang masalah, rumusan masalah, batasan masalah,
tujuan dan manfaat penelitian, metode penelitian, dan sistematika penulisan
laporan.
BAB II DASAR TEORI
Bab ini berisi landasan teori yang akan dipakai untuk pembahasan laporan
BAB III ANALISIS DAN PERANCANGAN SISTEM
Bab ini berisi tentang analisis dan perancangan program yang akan
diimplementasikan.
BAB IV IMPLEMENTASI SISTEM
Bab ini berisi tentang proses implementasi sesuai dengan rancangan
program serta berisi analisa program yang telah berhasil dibuat.
BAB V KESIMPULAN DAN SARAN
Bab ini berisi kesimpulan dari apa yang dikerjakan dalam tugas akhir dan
merupakan jawaban untuk masalah yang telah dirumuskan di depan serta saran
yang dirasa berguna bagi para pembaca terkait dengan program bantu yang
dibangun.
4
BAB II
DASAR TEORI
2.1 Program Linier
Program linier adalah salah satu teknik pada Riset Operasi/Operations
Research yang bersifat analisis yang analisisnya menggunakan model matematika,
yang bertujuan untuk menemukan penyelesaian optimal terhadap suatu masalah.
Model program linier memliki 3 unsur utama, yaitu:
1. Variabel Keputusan : variabel persoalan yang akan mempengaruhi nilai tujuan
yang akan dicapai.
2. Fungsi Tujuan : tujuan yang akan dicapai dirumuskan dalam sebuah fungsi
matematika linier
3. Fungsi Kendala : digambarkan sebagai pembatas terhadap kumpulan
keputusan yang mungkin dibuat dan harus dituangkan ke dalam fungsi
matematika linier.
2.2 Metode Simpleks
Jika suatu masalah program linier hanya mengandung dua variabel
keputusan saja, maka dapat dipecahkan dengan metode grafik. Namun jika suatu
masalah program linier mengandung tiga atau lebih variabel keputusan maka
metode grafik sudah tidak dapat digunakan lagi, untuk itu diperlukan metode lain,
dalam hal ini adalah metode simpleks.
2.2.1 Bentuk Standar Metode Simpleks
5
Di bawah ini merupakan aturan bentuk standar metode program linier yang
diperlukan untuk pemecahan masalah dalam menggunakan metode simpleks.
1. Semua kendala adalah persamaan dengan sisi kanan dan sisi kiri yang tidak
negatif.
2. Semua variabel keputusan tidak negatif (x1, x2, x3, ..., xn).
3. Fungsi tujuan dapat berupa memaksimalkan atau meminimumkan.
Bentuk standar program linier dapat dirumuskan sebagai berikut:
Fungsi Tujuan → Maks/Min Z =
Kendala → untuk i = 1, 2, …, m
xj ≥ 0, untuk j = 1, 2, …, n
Dengan adanya aturan di atas maka jika tedapat kendala yang berbentuk
pertidaksamaan maka harus dikonversikan menjadi persamaan dengan
memasukkan variabel slack atau surplus.
Kendala dengan pertidaksamaan lebih kecil sama dengan “≤” dapat diubah
dengan menambahkan pertidaksamaan dengan variabel slack pada sisi kiri dan
menjadikan tanda “≤” menjadi “=”. Pada contoh di bawah ini yang merupakan
variabel slack adalah variabel x3 dan x4.
Contoh :
Maksimumkan Z = x1 + x2
Kendala :
2 x1 + x2≤ 4
x1 + 5 x2 ≤ 5
x1, x2 ≥ 0
�n
j=1Cj xj
�n
j=1aij xj = bi
6
Perubahan ke bentuk standar simpleks :
Maksimumkan Z = x1 + x2 + 0 x3 + 0x4
Kendala :
2 x1 + x2 + x3 = 4
x1 + 5x2 + x4 = 5
x1, x2, x3, x4 ≥ 0
Dengan bentuk standar simpleks di atas didapatkan variabel basis yaitu
vaiabel x3 dan x4.
Kendala dengan pertidaksamaan lebih besar sama dengan “≥” dapat diubah
dengan mengurangkan pertidaksamaan dengan variabel surplus pada sisi kiri.dan
menjadikan tanda “≥” menjadi “=”. Pada contoh di bawah ini yang merupakan
variabel surplus adalah variabel x3 dan x4.
Contoh :
Minimumkan Z = 12x1 + 5 x2
Kendala
4 x1 + 2 x2 ≥ 80
2 x1 + 3 x2 ≥ 90 ; x1, x2 ≥ 0
Perubahan ke bentuk standar simpleks :
Minimumkan Z = 12x1 + 5 x2 + 0x3 + 0x4
Kendala
4 x1 + 2 x2 - x3 = 80
2 x1 + 3 x2 - x4 = 90 ; x1, x2, x3, x4 ≥ 0
7
Dari persamaan di atas belum memiliki variabel basis sebab koefisien dari x3
dan x4 bernilai negatif. Untuk mendapatkan variabel basis maka diperlukan
penambahan variabel semu (untuk contoh di bawah variabel semu adalah x5, x6).
Bentuk standar simpleks menjadi sebagai berikut :
Minimumkan Z = 12x1 + 5 x2 + 0x3 + 0x4 + Mx5 + Mx6
Kendala
4 x1 + 2 x2 - x3 + x5 = 80
2 x1 + 3 x2 - x4 + x6 = 90 ; x1, x2, x3, x4, x5, x6 ≥ 0
Untuk soal meminimumkan koefisien pada fungsi sasaran untuk variabel
semu adalah M (bilangan positif besar). Sedangkan untuk soal memaksimumkan
koefisien pada fungsi sasaran untuk variabel semu adalah –M (bilangan negative
besar).
2.2.2 Langkah-Langkah Pemecahan Program Linier dengan Metode
Simpleks
Langkah-langkah penyelesaian metode simpleks adalah sebagai berikut :
1. Memformulasikan dan menstandarisasikan model simpleks.
2. Setelah menstandarisasikan model maka dapat dibentuk tabel awal simpleks
berdasarkan informasi model yang sudah dibuat. Di bawah ini adalah tabel
awal simpleks :
8
Cj C1 C2 ... Cn
xj(xB)i(CB)i x1 x2 xn bi...
Ko
efisie
n
Va
ria
bel ba
sis
Va
ria
bel ba
sis
Matriks kendala dalam
bentuk standar
A = Amxn = [aij] Koefisie
n
ruas k
ana
n k
en
da
la
da
lam
be
ntu
k s
tand
ar
Peng
ece
kan
varia
bel
yang
kelu
ar
dari
basis
zj
Cj - zj
�m
i=1(CB)i aij
�m
i=1(CB)i bi
Tabel 2.1 Tabel Awal Simpleks
�
3. Setelah membuat tabel awal simpleks dapat ditentukan kolom kunci di antara
kolom-kolom variabel yang ada, yaitu kolom yang mengandung nilai (cj-Zj)
paling positif unutk soal memaksimalkan atau yang mengandung nilai (cj-Zj)
paling negatif untuk soal meminimumkan.
4. Setelah menentukan kolom kunci maka dapat dilakukan perhitungan � untuk
menentukan baris kunci, yaitu baris yang memiliki rasio kuantitatif dengan
nilai positif terkecil.
� = bi/aij
5. Kemudian setelah didapatkan baris kunci maka dapat dilakukan langkah
berikutnya yaitu memasukkan variabel basis baru (variabel pada kolom kunci)
ke dalam kolom variabel basis (variabel pada baris kunci) dan mengeluarkan
variabel pada baris kunci yang lama.
6. Kemudian barulah dapat dilakukan transformasi baris-baris variabel. Berikut
ini adalah rumus-rumus transformasinya :
9
��
��
��
��
��
�
��
����
��� �
� ����
�
� �
�
��
�
��
���������
�
�� ��
� ��
�
������
�
� �
θθθθ
��
���� �
���
Calon basis
���� �����keluar dari basis
������ �����
Kolom kunci
� Baris baru selain baris kunci = baris lama – (rasio kunci x baris kunci
lama)
� Barus kunci baru = baris kunci lama/angka kunci
Keterangan : Rasio kunci = unsur kolom kunci/angka kunci
Gambar 2.1 Keterangan Tabel Simpleks
7. Langkah terakhir adalah melakukan uji optimalitas. Jika semua koefisien pada
baris (cj-Zj) sudah tidak ada lagi yang bernilai positif (untuk soal
memaksimalkan) atau sudah tidak ada lagi yang bernilai negatif (untuk soal
meminimalkan), berarti tabel sudah optimal.
8. Jika pada langkah 7 belum terpenuhi maka dilakukan pengulangan pada
langkah ke-3 sampai ke-7. Hingga terpenuhi kriteria pada langkah 7.
2.3 Program Bilangan Bulat
Hasil perhitungan dengan menggunakan metode simpleks bisa jadi berupa
bilangan pecahan. Maka untuk menghasilkan variabel-variabel keputusan yang
tidak dalam bentuk pecahan namun tetap optimal dapat menggunakan sebuah
10
program. Program yang digunakan untuk membulatkan hasil dari kasus
pemrograman linier disebut program bilangan bulat atau dapat juga disebut
integer programming.
Metode branch and bound merupakan salah satu metode pemrograman
bilangan bulat yang menghasilkan penyelesaian optimal pada masalah
pemrograman linier yang pada akhirnya menghasilkan variabel-variabel
keputusan berupa bilangan bulat.
Berikut adalah langkah-langkah dalam memecahkan masalah integer
programming menggunakan metode branch-bound.
1. Setelah ditemukan penyelesaian hasil dari program linier maka dapat
dilakukan pembulatan hasil dengan cara menentukan salah satu hasil variabel
keputusan yang komanya paling mendekati 0,5.
2. Setelah menentukan variabel keputusan yang nilai komanya paling mendekati
0,5 maka dapat dilakukan percabangan.
3. Percabangannya ditentukan dengan membuat 2 buah batasan yaitu bilangan
bulat yang berada diantara variabel keputusan yang telah ditentukan pada
langkah nomor 1 di atas.
Contoh :
11
Gambar 2.2 Keterangan Branch-Bound
Pada contoh di atas telah dibuat 2 buah cabang yaitu cabang 2 dan 3. Cabang 2
mempunyai batasan a ≤ 34. Sedangkan cabang 3 mempunyai batasan a ≥ 35.
4. Kemudian batasan tersebut dimasukkan ke dalam kendala dalam model
simpleks.
Pada contoh di atas cabang 2 ditambahkan kendala a ≤ 34, sedangkan untuk
cabang 3 ditambahkan kendala a ≥ 35.
5. Lakukan perhitungan simpleks dengan tambahan masing-masing kendala.
6. Jika salah satu cabang sudah memperoleh penyelesaian bulat (missal Xa),
maka hasil cabang tersebut f(Xa) dijadikan batas bawah (untuk soal
memaksimumkan) atau batas atas (untuk soal meminimumkan) dan
dibandingkan dengan cabang lainnya f(X).
7. Untuk soal memaksimumkan :
o Jika f(X) < f(Xa) maka cabang tersebut diabaikan
o Jika f(X) > f(Xa) maka ada 2 kemungkinan :
o X baru sudah bulat maka X baru menjadi batas bawah baru
o X baru tidak bulat maka dicabangkan lagi.
f(a, b, c, d)= 171418, 67 a ≥ 35
f(34,1667 , 10 , 10 , 0)
a ≤ 34
1
2
3
12
Untuk soal meminimumkan :
o Jika f (X) > f(Xa) maka cabang tersebut diabaikan.
o Jika f(X) < f(Xa) maka ada 2 kemungkinan:
o X baru sudah bulat maka X baru tersebut menjadi batas atas baru
o X baru tidak bulat maka dicabangkan lagi.
2.4 Pemodelan Sistem
Jika terdapat 3 buah variabel keputusan yaitu x1, x2, dan x3 maka dapat
dibuat pemodelannya sebagai berikut:
Maks/min Z = c1x1 + c2x2 + c3x3
Dengan kendala : a11x1 + a12x2 + a13x3 = b1
a21x1 + a22x2 + a23x3 = b2
...
am1x1 + am2x2 + am3x3 = bm
dengan x1, x2, x3 ≥ 0
Contoh :
Ada 4 buah bentuk lilin hias yaitu juice, tart, ice cream dan jelly. Masing-
masing bentuk tersebut membutuhkan bahan-bahan, keuntungan dan batasan-
batasan yang dinyatakan dalam tabel dibawah ini :
Tabel 2.2 Tabel Bahan
Ben-
tuk
Keun-
tungan Max Min
Bahan
Para
-fin
Stearic
Acid
Whit
e Oile
Candle
Jell
Sumb
u
Juice Rp
4.300,00
- 10 122
gr 12 gr 26 gr 3 gr 12 cm
Tart Rp
1.350,00
10 - 37 gr 4 gr 1.8 gr 0.2 gr 3 cm
Ice Rp - 10 41 gr 4 gr 0.9 gr 0.1 gr 6 cm
13
Cream 1.100,00
Jelly Rp
600,00
20 - 0.9 gr 0.1 gr 14 gr 1 gr 6 cm
Bahan yang tersedia 1000
0 gr 5000 gr
4000
gr 300gr
500c
m
Maka untuk pemodelan contoh di atas agar didapatkan keuntungan yang
maksimum adalah sebagai berikut :
Variabel-variabel keputusan :
a = jumlah lilin hias berbentuk juice
b = jumlah lilin hias berbentuk tart
c = jumlah lilin hias berbentuk ice cream
d = jumlah lilin hias berbentuk jelly
Fungsi tujuan : memaksimumkan Z = 4300a + 1350b + 1100c + 600d
Kendala : 122a + 37b + 41c + 0.9d ≤ 10000
12a + 4b + 4c + 0.1d ≤ 5000
26a + 1.8b + 0.9c + 14d ≤ 4000
3a + 0.2b + 0.1c + d ≤ 300
12a + 3b + 6c + 6d ≤ 500
a ≥ 10
c ≥ 10
b ≤ 10
d ≤ 20 dengan a, b, c, d bulat ≥ 0
14
Bentuk Standar Simpleks :
Memaksimumkan Z = 4300a + 1350b + 1100c + 600d + 0e + 0f + 0g + 0h +
0i + 0j + 0k + 0l + 0m - Mn - Mo
Kendala :
122a + 37b + 41c + 0.9d + e =10000
12a + 4b + 4c + 0.1d + f = 5000
26a + 1.8b + 0.9c + 14d + g = 4000
3a + 0.2b + 0.1c + d + h = 300
12a + 3b + 6c + 6d + i = 500
a –j + n = 10
c – k + o = 10
b +l = 10
d + m = 20
a, b, c, d, e, f, g, h, i, j, k, l, m, n, o bulat ≥ 0
15
Untuk iterasinya adalah sebagai berikut :
Tabel 2.3 Tabel Contoh Iterasi
�����������
�
�� � � � � � � � � � � �
���� ���� ���� ��� � � � � � � � � � �� ��
�
�
�
�
�
�
�
�
�
�
�
�
�
��
�
��
�
��� �� �� � !
�� � � � �
�� � " � ! ��
� � � � � �
�� � � �
�
�
�
�
�
� � �
� � �
� � �
� � �
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
��
�
�
�
�
�
�
�
�
��
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
� �
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�����
����
����
���
���
��
��
��
��
"� !�
��� ��
��� "�
���
�� ��
��
�
�
�
#�
�$� #�
�� ��� � � �� ��� � � �� � � �
����%� ���� ����%� ��� � � � �� �� � � ��� �����
�
�
�
�
�
�
�
�
�
�
�
�
�
��
�
����
�
�� �� � !
� � � �
� " � ! ��
� � � � �
� � �
�
�
�
�
� � �
� �
� �
� �
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
��
��
��
�
��
���
�
�
�
��
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
� �
�
�
�
�
�
�
�
�
�
���
���
��
���
����
�
�
�
�
�
�
�
�
�
�
�
�
"�"�
�""�
����
���
�"�
��
��
��
��
��� ��
����
���� ��
����
�� ��
�
��
�
�
#�
�$� #�
���� ��� ����� � ���� ��� � � �� � � �
� ���� ����%� ��� � � � �� ���� � ������� ��� �
������
���
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
����
�
����
�
�� � � !
� � � �
� " � ��
� � � �
� � �
�
�
�
�
� � �
� �
� �
� �
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
��
��
��
�
��
���
�
�
�
��
�
�&!
�&�
�
�
��
�
�
�
�
�
�
�
�
�
�
� �
�
�
�
�
�
�
�
�
�
���
���
��
���
����
�
�
�
�
��
��&!
��&�
��
�
�
���
�
"���
�"��
����
��!
���
��
��
��
��
�"&���
���&��
���&�
"!&���
��&���
�
�
�
�
#�
�$� #�
���� �� ����� � ���� �� � � �� � � �
� ���� ���� ��� � � � �� ���� �� ������� ��� �����
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
����
�
����
�
�&� � ���&�
� � ��&!
��&� � �
��&�� � ��&�
�&�� � �&�
�
�
�
�
�&�� � �&�
� �
� �
� �
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�&�"��
��
��&���
��&��
���&��
�&�"��
�
�
�
�
�
�
�
�
�
�
�
�
��
��
���&�
��&�
�&�
�&�
���
�
�
�
�
�
�
�
�
�
�
� �
�
�
�
�
�
�
�
�
�
�
�
�
��
�
�
�
�
�
�
��&�
�&�
��&�
��&�
�
��
�
����&�
����
����&�
�"!
��&���
��&���
��
��
��
�"�&�"
����
�
�
���&��
���&��
�
��
�
#�
�$� #�
���� �������� � � � ������ � � ��"&������ � ���� �
� ��� � ����� � � � ���"&��� � � �� ����������� ���"���
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
����
�
����
����
� � ���&�
� � ��&!
� � �
� � ��&�
� � �&�
�
�
�
�
� � �&�
� �
� �
� �
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�&�"��
��
��&���
��&��
���&��
�&�"��
�
�
�
�
�
�
�
�
�
�
�
�
��
��
���&�
��&�
�&�
�&�
���
�
�
�
��
�&�
�&��
��&��
��&��
�
��&�
� �
�
�
�
�
�
�
�
�
�
�
�
�
��
�
�
�
�
�
�
��&�
�&�
��&�
��&�
�
��
�
����&�
����
��"�&�
�!�&�
��&���
��&���
��
��
��
#�
�$� #�
���� �������� � ��� � ������ � � ��"&������ � ���� �
� � � ����� � � � ���"&��� � ���� �� ����������� �������
�
�
�
�
�
�
�
�
�
16
Pemodelan Integer Programming :
�
��� ����&$��&$��&$��
'$($������ ��
�
�
���&$��&$�� ����&$��
�$
'$($������ ��
�$
���&$� ����&$��&$��
'$($������
�
�
���&$��&$��&$� �����
$
$
'$($���!��
��� ����&$��&$��&$��
'$($������ ��
�
�
���&$��&$��&$��
'$($������
��� ����&$��&$��&$��
'$($��!"��&��
��)�*$��+��
Gambar 2.3 Pemodelan Branch-Bound
17
BAB III
ANALISIS DAN PERANCANGAN SISTEM
3.1 Gambaran Umum Sistem
�����
������� �������������
���������������������
��������������������������
� ��������������������
� �� ���
� �������������
���
� ������� ������
����������� �������������
�����������������
����� �
!�
���� � �������
�"����������#�������
�����������������
� ������������������
Gambar 3.1 Flow Chart
Program bantu penentuan jumlah lilin hias yang harus diproduksi digunakan
untuk menghitung jumlah lilin hias yang harus diproduksi untuk menghasilkan
keuntungan maksimal. Program ini dimulai dengan inputan jenis lilin hias yang
akan diproduksi, maksimal atau minimal jumlah lilin hias tiap bentuk, serta
18
jumlah bahan yang tersedia. Dengan inputan tersebut dilakukan perhitungan
simpleks yang kemudian hasil perhitungan simpleks tersebut digunakan untuk
perhitungan branch-bound agar didapat hasil dalam bentuk bilangan bulat. Hasil
perhitungan yang akan ditampilkan kepada user adalah jumlah lilin hias yang
harus diproduksi dan keuntungan maksimal yang akan didapat.
3.2 Perancangan Sistem
3.2.1 Use Case Diagram
Gambar 3.2 Use Case Diagram
3.2.2 Context Diagram
Pemilik
0
Program Bantu
Penentuan Produksi
Lilin Hias
Username, password
nama lilin hias, jumlah lilin hias, keuntungan
maksimum, data lilin yang baru, data bahan yang baru
Gambar 3.3 Contex Diagram
19
3.2.3 Decompotition Diagram
Gambar 3.4 Decompotition Diagram
3.2.4 Data Flow Diagram Level 0
Gambar 3.5 Data Flow Diagram Level 0
20
3.2.5 Data Flow Diagram Level 1 Proses 2
Gambar 3.6 Data Flow Diagram Level 1 Proses 2
21
3.2.6 Data Flow Diagram Level 1 Proses 3
� ����
$
%� ���&����'���
$()�������������������������������*����
����������������������������� �����+
�$ &����'���
������������������������������
*��������������� �����+
%"�����������������*�� ������������
��������������� �����+
,����-
���������
%"�������,����*�� �������
���������������
. �������,����/
����� �������������������
��������*�� ��������� �������������
%"������� �����������*�� �
�������� �������������+
%"����������������*�� ���������������������
�������������������������������
�����+
�����&����'%��
$(-������������������������� ����*���������
������������������������ �����+������������������������ ����*����
����������� �����+
%"�����������������*�� ������������
��������������� �����+
���������
%"�������,����*�� �������
���������������
����� ��������������������� ����
*�� ��������� �������������
%"������� �����������*�� �
�������� �������������+
%"����������������*�� ���������������������
�������������������������������
�����+
� � � �&����'%��
$($�������������������������������
*�������������+
������������������������������
*�������������+
%"�����������������*�� ������������
��������������� �����+
����� �������������������
��������*�� ����������+
%"������� �����������*�� �
�������� �������������+
�� �����
%"�����������*�� �������
���������������+
%"����������������*�� ���������������������
�������������������������������
�����+
Gambar 3.7 Data Flow Diagram Level 1 Proses 3
3.2.7 E-R Diagram
Gambar 3.8 E-R Diagram
22
3.2.8 Tabel Hasil Mapping E-R Diagram
Tabel Lilin Hias
Nama file Data : lilin_hias.sql
Primary Key : kode_lilin
Tabel 3.1 Tabel Lilin Hias
Nama Field Tipe Panjang Keterangan
PK kode_lilin Varchar 5 Kode lilin hias
nama Varchar 25 Nama bentuk lilin hias
keuntungan double - Keuntungan tiap bentuk
Tabel Kebutuhan Bahan
Nama file Data : kebutuhan_bahan.sql
Primary Key : -
Tabel 3.2 Tabel Kebutuhan Bahan
Nama Field Tipe Panjang Keterangan
kode_lilin Varchar 5 Kode lilin hias
kode_bahan varchar 5 Kode bahan
jumlah Double - Jumlah bahan yang
dibutuhkan tiap bentuk
Tabel Bahan
Nama file Data : bahan.sql
Primary Key : kode_bahan
Tabel 3.3 Tabel Lilin Hias
Nama Field Tipe Panjang Keterangan
PK kode_bahan Varchar 5 Kode bahan
nama Varchar 25 Nama bahan
satuan Varchar 10 Satuan bahan
23
3.3 Studi Kasus
Data yang diperoleh dan digunakan dalam program bantu penentuan jumlah
lilin hias yang harus diproduksi merupakan hasil praktek dan perhitungan secara
langsung pada Perusahaan Lilin Hias Rindang yang terletak di Jalan Ketandan
Kulon No.1 Yogyakarta. Data yang diperoleh dari hasil praktek dan perhitungan
adalah sebagai berikut :
Tabel 3.4 Tabel Bahan
Bentuk Keuntungan
Bahan
Parafin Stearic
Acid
White
Oile
Candle
Jell Sumbu
Juice Rp 4.300,00 122 gr 12 gr 26 gr 3 gr 12 cm
Tart Rp 1.350,00 37 gr 4 gr 1.8 gr 0.2 gr 3 cm
Ice
Cream Rp 1.100,00 41 gr 4 gr 0.9 gr 0.1 gr 6 cm
Jelly Rp 600,00 0.9 gr 0.1 gr 14 gr 1 gr 6 cm
Untuk mendapatkan jumlah bahan pada tiap bentuk lilin hias di atas penulis
melakukan penimbangan atau pengukuran pada tiap satuan bentuk lilin hias.
Sedangkan untuk mendapatkan keuntungan tiap lilin hias dilakukan dengan
mengurangkan harga jual dengan biaya kebutuhan bahan serta biaya aksesoris-
aksesoris yang dibutuhkan dengan mengabaikan biaya lain.
Dengan data kebutuhan bahan di atas Perusahaan Lilin Hias Rindang tiap
bulannya dapat mengirimkan lilin hias bentuk juice sekitar 120 buah, tart 700
buah, ice cream 600 buah dan jelly 1000 buah. Dari hasil penjualan tersebut
Perusahaan Lilin Hias Rindang mempunyai omset setiap bulannya sekitar Rp.
8.000.000,00.
24
3.4 Perancangan Antar Muka
3.4.1 Tampilan Form Login
Tampilan form login dari program bantu yang akan dibuat tampak pada
gambar 3.9. Form ini berfungsi sebagai sistem keamanan yang digunakan oleh
pemilik perusahaan lilin hias.
��01����,���2
2� ����
����#���
3
3
&01%�
�4%�
������2���52�&�'�&%&%��'%���!��1��%��0�2.�%
������������
Gambar 3.9 Tampilan Form Login
3.4.2 Tampilan Form Menu
Gambar 3.10 adalah tampilan form menu yang akan digunakan oleh pemilik
perusahaan untuk memilih menu perhitungan, update bahan, atau update lilin
hias.
25
Gambar 3.10 Tampilan Form Menu
3.4.3 Tampilan Form Update Bahan
Gambar 3.11 merupakan form yang digunakan untuk melakukan update data
bahan. Dalam form ini dapat dilakukan insert bahan baru, edit data bahan yang
sudah ada, dan menghapus bahan.
26
Gambar 3.11 Tampilan Form Update Bahan
3.4.4 Tampilan Form Update Lilin Hias
Gambar 3.12 merupakan form yang digunakan untuk melakukan update data
lilin hias. Dalam form ini dapat dilakukan insert lilin hias baru, edit data lilin hias
yang sudah ada, dan menghapus lilin hias.
Gambar 3.12 Tampilan Form Update Lilin Hias
3.4.5 Tampilan Form Perhitungan
Setelah melakukan klik pada menu perhitungan maka akan tampil form
seperti gambar 3.13 di bawah ini. Form ini digunakan untuk memilih bentuk-
bentuk lilin hias yang akan diproduksi, batasan minimal dan maksimal lilin yang
akan dibuat serta jumlah bahan yang tersedia.
27
Gambar 3.13 Tampilan Form Perhitungan
3.4.6 Tampilan Hasil Perhitungan
Gambar 3.14 adalah tampilan dari hasil perhitungan untuk tiap bentuk lilin
hias yang akan dibuat.
28
Gambar 3.14 Tampilan Hasil Perhitungan
3.4.7 Tampilan Form Administrator
Gambar 3.15 adalah tampilan form administrator yang berguna untuk
mengupdate username.
29
Gambar 3.15 Tampilan Form Administrator
30
BAB IV
IMPLEMENTASI SISTEM DAN ANALISA HASIL
4.1 Algoritma Metode Simpleks
Gambar 4.1 Hubungan Antar Fungsi Simpleks
Perhitungan simpleks ini dilakukan dalam metode iterate. Berikut adalah
pendeskripsian metode iterate:
public static int iterate(){
NumIterations++;
pi();
calculateReducedCosts();
31
if (!testForOptimality()) {
ChooseEnteringVariable();
resetReducedCost();
} else {
objectiveValue = calculateObjective();
return Optimal;
}
for (int i = 0; i < numConstraints; i++)
yB[i] = A[i][EnteringVariable];
if (!testUnboundedness()) {
chooseLeavingVariable();
updateSolution();
return Continue;
} else
return Unbounded;
}
Fungsi pi di atas digunakan untuk memberi nilai pada variabel pi berupa
koefisien variabel basis/(CB)j. Setelah menentukan pi maka dilakukan perhitungan
reducedCost/(Cj-Zj) pada fungsi calculateReducedCosts. Kemudian dapat
dilakukan uji optimalisasi pada fungsi testForOptimality. Jika belum optimal
maka dilakukan pemilihan kolom kunci pada ChooseEnteringVariable. Namun
jika sudah optimal maka akan dilakukan perhitungan nilai maksimum dari fungsi
tujuan. Kemudian dapat dilakukan pemilihan baris kunci pada fungsi
chooseLeavingVariable.
Berikut adalah pendefinisian fungsi calculateReducedCosts yang digunakan
untuk menghitung Cj-Zj:
32
public static void calculateReducedCosts() {
for (i = 0; i < numVariables; i++) {
for (j = 0; j < numConstraints; j++)
colOfA[j] = A[j][i];
reduceCost(i, colOfA);
}
}
private static void reduceCost(int i, double[] colOfA) {
double result = 0;
double result2 = 0;
for (int j = 0; j < numConstraints; j++){
if(typePi[j]==0){
result += pi[j] * colOfA[j];
}else if(typePi[j] == 1){
result2 += pi[j] * colOfA[j];
}
}
if(result2 == 0){
if(typeCost[i]==0){
reducedCost[i] = cost[i] - result;
}else{
reducedCost[i] = -result;
reducedCost2[i] = cost[i];
}
} else{
if(typeCost[i]==0){
reducedCost[i] = cost[i] - result;
reducedCost2[i] = -result2;
}else{
reducedCost[i] = -result;
reducedCost2[i] = cost[i]-result2;
}
}
}
33
Pada fungsi calculateReducedCosts di atas terdapat fungsi reduceCost yang
digunakan untuk menghitung Cj-Zj pada tiap kolom. Pada fungsi reduceCost
terdapat variabel result dan result2. Variabel-variabel tersebut digunakan untuk
menyimpan data hasil Zj. Kemudian setelah mendapatkan hasil result dan result2
dapat dilanjutkan menghitung variabel reducedCost dan reducedCost2. Variabel
reducedCost dan reducedCost2 digunakan untuk menyimpan Zj-Cj.
Berikut adalah pendefinisian fungsi ChooseEnteringVariable yang
digunakan untuk menentukan kolom kunci :
public static void ChooseEnteringVariable() {
int maxIndex = 0;
double maxValue = 0;
double maxValue2 = 0;
boolean reduced2 = false;
for (i = 0; i < numVariables;i++){
if(reducedCost2[i]==0 && reduced2==false){
if (reducedCost[i] > 0 && reducedCost[i] > maxValue) {
maxIndex = i;
maxValue = reducedCost[i];
}
}else{
if (reducedCost2[i] > 0 && reducedCost2[i] > maxValue2){
maxIndex = i;
maxValue2 = reducedCost2[i];
reduced2 = true;
}else if(reducedCost2[i]==maxValue2){
if(reducedCost[i]>reducedCost[maxIndex]){
maxIndex = i;
maxValue = reducedCost[i];
maxValue2 = reducedCost2[i];
}
34
}
}
}
EnteringVariable = maxIndex;
}
Pada fungsi ChooseEnteringVariable di atas variabel maxIndex adalah
variabel yang nantinya akan digunakan untuk menentukan indeks kolom kunci.
Mula-mula dilakukan pengujian apakah reducedCost2 sama dengan 0. Jika
reducedCost2 tidak sama dengan 0 ini menandakan bahwa Cj-Zj tidak memiliki
nilai M. Jika reducedCost2 sama dengan 0 maka dilakukan pemilihan
reducedCost yang paling besar untuk menentukan indeks kolom kunci. Namun
jika reducedCost2 mengandung nilai M maka dilakukan pemilihan reducedCost2
yang paling besar untuk menentukan indeks kolom kunci. Jika reducedCost2
memiliki nilai yang sama maka dilakukan pemilihan nilai reducedCost2 yang
memiliki nilai reducedCost yang paling besar.
Berikut adalah pendefinisian fungsi chooseLeavingVariable yang digunakan
untuk menentukan baris kunci :
public static void chooseLeavingVariable() {
double Ratio;
int minIndex = -1;
NumMinRatio = 0;
for (i = 0; i < numConstraints; i++) {
if (yB[i] > 0) {
Ratio = x[i]/yB[i];
if (NumMinRatio == 0) {
35
MinRatio = Ratio;
minIndex = i;
NumMinRatio = 1;
} else if (Ratio < MinRatio) {
MinRatio = Ratio;
minIndex = i;
NumMinRatio = 1;
} else if (Ratio == MinRatio)
NumMinRatio++;
}
}
LeavingVariable = minIndex;
}
Pada fungsi di atas variabel minIndex merupakan variabel yang digunakan
untuk menentukan indeks baris kunci. Variabel yB adalah kolom kunci yang harus
berupa bilangan lebih besar dari 0. Sedangkan x adalah variabel yang digunakan
untuk menyimpan nilai bi seperti pada teori BAB II. Fungsi ini digunakan untuk
mencari Ratio yang paling kecil untuk menentukan indeks baris kunci pada
minIndex.
4.2 Algoritma Metode Branch and Bound
Hasil dari perhitungan simpleks yang semula bilangan pecahan digunakan
kembali dalam perhitungan ini. Mula-mula hasil dicek dalam fungsi cekBilBul,
jika hasil merupakan bilangan pecahan maka akan dilakukan perhitungan branch-
bound dalam metode ReadDataAndBranchBound. Kemudian dicek apakah
hasilnya infisibel. Jika fisibel maka hasil dari perhitungan pada
ReadDataAndBranchBound disimpan dalam variabel baru yang nantinya
36
digunakan kembali dalam perhitungan sampai ditemukan hasil bilangan bulat.
Jika cabang merupakan bilangan ganjil maka akan dilakukan pengecekan apakah
nilai_dbl[i] yang merupakan nilai cabang ganjil lebih besar dari nilai_dbl[i-1]
yang merupakan nilai cabang sebelumnya atau cabang genap. Jika nilai_dbl[i-1]
lebih besar maka dilakukan penyimpanan hasil dari cabang genap yang nantinya
digunakan untuk perhitungan dalam fungsi ReadDataAndBranchBound. Namun
jika nilai_dbl[i-1] lebih kecil maka dilakukan penyimpanan hasil dari cabang
ganjil.
Jika hasil metode ReadDataAndBranchBound infisibel dan cabang
merupakan bilangan ganjil maka akan dilakukan cek apakah cabang sebelumnya
atau cabang genap infisibel. Jika cabang genap tidak infisibel maka data pada
cabang genaplah yang akan digunakan untuk percabangan berikutnya. Namun jika
cabang genap juga infisibel maka akan dilakukan pencarian cabang yang belum
dicabang dengan nilai yang paling besar. Kemudian data cabang hasil pencarian
tersebut yang nantinya digunakan sebagai percabangan lagi.
public static double[] hasilBulat() { int jmlKendala = simpleks.jmlKendala(); indCbg=4; cabang = 0; double[] value = new double[300]; for(int i=0; i<jmlVariabel; i++){ hasil[i] = simpleks.hasil[i]; } for(int i=2; i<=300; i++){ cabang =i; if(cabang == 2 || cabang == 3){ aras = cabang/2; }else{ aras = arasAray[indukCabang[cabang]] +1;
37
} boolean cekBilBul = cekBilanganBulat(cabang, simpleks.hasil, hasil_cek);
if(!cekBilBul){ setNull();
ReadDataAndBranchBound(jmlVariabel, jmlKendala+aras, cabang, hasil);
if(!simpleks.infisibel){ for(int j=0; j<jmlVariabel; j++){ dataCabang[i][j] = simpleks.hasil[j]; hasil_cek[j] = simpleks.hasil[j]; } arasAray[cabang] = aras; nilai[i] = simpleks.value; nilai_dbl[i] = Double.parseDouble(nilai[i]); kendalaBranchBound(i, jmlKendala+aras); rhsAndRowType(i, jmlKendala+aras); if(i%2!=0){ double temp=0; if(levelBawah){ if(nilai_dbl[i-1]>=nilai_dbl[i]){ temp = nilai_dbl[i-1]; }else{ temp = nilai_dbl[i]; } int maxBatasBawah = maxBatasBawah(); if(nilai_dbl[maxBatasBawah]>=temp){ int cabangMax = cekSemuaCabang(cabangBlmDicabang); maxBatasBawah = maxBatasBawah();
if(nilai_dbl[cabangMax]>nilai_dbl[maxBatasBawah]){
levelBawah(cabangMax); indukCabang(cabangMax, indCbg); indCbg=indCbg+2; } else{ hasilAkhir(maxBatasBawah); break; } }else{ if(nilai_dbl[i-1]>=nilai_dbl[i]){ hasilBerikutnya(i); indukCabang(i-1, indCbg);
38
indCbg=indCbg+2; }else{ hasilBerikutnya2(i); indukCabang(i, indCbg); indCbg = indCbg+2; } } }else{ if(nilai_dbl[i-1]>=nilai_dbl[i]){ if(!nilaiLebihBesar(nilai_dbl[i-1])){ hasilBerikutnya(i); indukCabang(i-1, indCbg); indCbg=indCbg+2; }else{ int cabangMax = cekSemuaCabang(cabangBlmDicabang); int maxBatasBawah = maxBatasBawah();
if(nilai_dbl[cabangMax]>nilai_dbl[maxBatasBawah]){
levelBawah(cabangMax); indukCabang(cabangMax, indCbg); indCbg=indCbg+2; }else{ hasilAkhir(maxBatasBawah); break; } } }else{ if(!nilaiLebihBesar(nilai_dbl[i])){ hasilBerikutnya2(i); indukCabang(i, indCbg); indCbg = indCbg+2; }else{ int cabangMax=cekSemuaCabang(cabangBlmDicabang); int maxBatasBawah = maxBatasBawah();
if(nilai_dbl[cabangMax]>nilai_dbl[maxBatasBawah]){
levelBawah(cabangMax); indukCabang(cabangMax, indCbg); indCbg=indCbg+2; }else{ hasilAkhir(maxBatasBawah); break;
39
} } } } } }else{ cabangInFisible[cbgInFsble] = i; cbgInFsble++; if(i%2!=0){ double temp=0; if(levelBawah){ if(inFisible(i-1)){ int maxBatasBawah = maxBatasBawah();
if(nilai_dbl[maxBatasBawah]>=nilai_dbl[i-1]){
int cabangMax = cekSemuaCabang(cabangBlmDicabang); if(nilai_dbl[maxBatasBawah]>=nilai_dbl[cabangMax]){
hasilAkhir(maxBatasBawah); break; }else{ levelBawah(cabangMax); indukCabang(cabangMax, indCbg); indCbg=indCbg+2; } }else{ for(int j=0; j<jmlVariabel; j++){ hasil[j] = dataCabang[i-1][j]; } indukCabang(i-1, indCbg); indCbg=indCbg+2; } }else{ if(!inFisible(i-1)){ if(btsBwh!=0){ int maxBatasBawah = maxBatasBawah(); int cabangMax = cekSemuaCabang(cabangBlmDicabang);
if(nilai_dbl[maxBatasBawah]>=nilai_dbl[cabangMax]){
hasilAkhir(maxBatasBawah);
break; }else{ levelBawah(cabangMax); indukCabang(cabangMax, indCbg); indCbg=indCbg+2; } }else{
40
int cabangMax = cekSemuaCabang(cabangBlmDicabang); levelBawah(cabangMax); indukCabang(cabangMax, indCbg); indCbg=indCbg+2; } } } else{ if(inFisible(i-1)){ if(!nilaiLebihBesar(nilai_dbl[i-1])){ for(int j=0; j<jmlVariabel; j++){ hasil[j] = dataCabang[i-1][j]; } indukCabang(i-1, indCbg); indCbg=indCbg+2; }else{ int cabangMax = cekSemuaCabang(cabangBlmDicabang); int maxBatasBawah = maxBatasBawah();
if(nilai_dbl[cabangMax]>nilai_dbl[maxBatasBawah]){
levelBawah(cabangMax); indukCabang(cabangMax, indCbg); indCbg=indCbg+2; }else{ hasilAkhir(maxBatasBawah); break; } } }else if(!inFisible(i-1)){ if(btsBwh!=0){ int maxBatasBawah = maxBatasBawah(); int cabangMax = cekSemuaCabang(cabangBlmDicabang);
if(nilai_dbl[maxBatasBawah]>=nilai_dbl[cabangMax]){
hasilAkhir(maxBatasBawah); break; }else{ levelBawah(cabangMax); indukCabang(cabangMax, indCbg); indCbg=indCbg+2; } }else{ int cabangMax = cekSemuaCabang(cabangBlmDicabang); for(int j=0; j<jmlVariabel; j++){ hasil[j] = dataCabang[cabangMax][j]; hasil_cek[j] = dataCabang[cabangMax][j];
41
} indukCabang(cabangMax, indCbg); indCbg=indCbg+2; } } } } } }else if(cekBilBul){ batasBawah[btsBwh] = i-1; btsBwh++; if(i%2!=0){ setNull();
ReadDataAndBranchBound(jmlVariabel, jmlKendala+aras, cabang, asil);
if(!simpleks.infisibel){ for(int j=0; j<jmlVariabel; j++){ dataCabang[i][j] = simpleks.hasil[j]; hasil_cek[j] = simpleks.hasil[j]; } arasAray[cabang] = aras; nilai[i] = simpleks.value; nilai_dbl[i] = Double.parseDouble(nilai[i]); kendalaBranchBound(i, jmlKendala+aras); rhsAndRowType(i, jmlKendala+aras); if(nilai_dbl[i-1]<nilai_dbl[i]){ if(!nilaiLebihBesar(nilai_dbl[i])){ for(int j=0; j<jmlVariabel; j++){ hasil[j] = dataCabang[i][j]; } indukCabang(i, indCbg); indCbg=indCbg+2; } else{ int cabangMax = cekSemuaCabang(cabangBlmDicabang); int maxBatasBawah = maxBatasBawah();
if(nilai_dbl[cabangMax]>nilai_dbl[maxBatasBawah]){
levelBawah(cabangMax); indukCabang(cabangMax, indCbg); indCbg=indCbg+2; }else{ hasilAkhir(maxBatasBawah); break; } } }else{
42
cabangMax = cekSemuaCabang(cabangBlmDicabang); if(nilai_dbl[cabangMax]>nilai_dbl[i-1]){ levelBawah(cabangMax); indukCabang(cabangMax, indCbg); indCbg=indCbg+2; }else{ hasilAkhir(i-1); break; } } } else{ cabangInFisible[cbgInFsble] = i; cbgInFsble++; if(inFisible(i-1)){ int maxBatasBawah = maxBatasBawah(); cabangMax = cekSemuaCabang(cabangBlmDicabang);
if(nilai_dbl[maxBatasBawah]>=nilai_dbl[cabangMax]){
hasilAkhir(maxBatasBawah); break; }else{ levelBawah(cabangMax); indukCabang(cabangMax, indCbg); indCbg=indCbg+2; } } } }else{ if(nilai_dbl[i-1]>=nilai_dbl[i-2]){ int maxBatasBawah = maxBatasBawah(); cabangMax = cekSemuaCabang(cabangBlmDicabang);
if(nilai_dbl[maxBatasBawah]>=nilai_dbl[cabangMax]){
hasilAkhir(maxBatasBawah); break; }else{ levelBawah(cabangMax); indukCabang(cabangMax, indCbg); indCbg=indCbg+2; } } else{ for(int j=0; j<jmlVariabel; j++){ hasil[j] = dataCabang[i-2][j]; }
43
setNull();
ReadDataAndBranchBound(jmlVariabel, jmlKendala+aras, cabang, hasil);
if(!simpleks.infisibel){ for(int j=0; j<jmlVariabel; j++){ dataCabang[i][j] = simpleks.hasil[j]; hasil_cek[j] = simpleks.hasil[j]; } arasAray[cabang] = aras; nilai[i] = simpleks.value; nilai_dbl[i] = Double.parseDouble(nilai[i]); kendalaBranchBound(i, jmlKendala+aras); rhsAndRowType(i, jmlKendala+aras); } else{ cabangInFisible[cbgInFsble] = i; cbgInFsble++; } } } } } return null; }
44
4.3 Hasil Implementasi
4.3.1 Login
Gambar 4.2 Form Login
Pada form Login, user diminta untuk memasukkan username dan password.
Form login ini diperlukan sebagai sistem keamanan agar data tidak diubah oleh
orang-orang yang tidak berkepentingan. Form Login ini akan tertutup jika user
menekan tombol Login.
45
4.3.2 Menu
Gambar 4.3 Form Menu
Pada form Menu, user diminta untuk menentukan form yang akan digunakan
dengan menekan salah satu tombol. Tombol Perhitungan digunakan untuk
menampilkan form Perhitungan yang nantinya digunakan untuk perhitungan
jumlah lilin hias. Tombol Update Bahan digunakan untuk menampilkan form
Update Bahan yang nantinya form ini digunakan untuk mengubah data bahan.
Tombol Update Lilin Hias digunakan untuk menampilkan form Update Lilin Hias
yang nantinya form ini digunakan untuk mengubah data lilin hias. Tombol
Administrator digunakan untuk menampilkan form Administrator yang nantinya
digunakan untuk update username. Setelah user menekan salah satu tombol maka
form Menu ini akan tertutup.
46
4.3.3 Administrator
Gambar 4.4 Form Administrator
Form Administrator ini digunakan untuk mengubah data username. Admin
dapat menambah data username, mengeditnya ataupun menghapusnya. Untuk
menambah username maka admin diminta untuk menekan tombol ”ADD”.
Setelah ditekan tombol ”ADD” maka form dibawahnya akan aktif dan user dapat
memasukkan data username yang ingin ditambahkan. Untuk mengedit data
username maka admin sebelumnya diminta memilih/select baris username mana
yang ingin diedit pada tabel username kemudian admin dapat menekan tombol
”EDIT”. Tombol ”EDIT” ini akan mengaktifkan form yang berada dibawahnya
dan admin dapat mengedit data username. Sedangkan untuk menghapus data
username admin diminta untuk memilih/select baris username mana yang ingin
47
dihapus pada tabel username, kemudian admin dapat menekean tombol
”DELETE”.
4.3.4 Update Bahan
Gambar 4.5 Form Update Bahan
Form Update Bahan ini digunakan untuk mengubah data bahan. User dapat
menambah data bahan, mengeditnya ataupun menghapusnya.Untuk menambah
data bahan maka user diminta untuk menekan tombol ”ADD”. Setelah ditekan
tombol ”ADD” maka form dibawahnya akan aktif dan user dapat memasukkan
data bahan yang ingin ditambahkan. Untuk mengedit data bahan maka user
sebelumnya diminta memilih/select baris bahan mana yang ingin diedit pada tabel
48
bahan kemudian user dapat menekan tombol ”EDIT”. Tombol ”EDIT” ini akan
mengaktifkan form yang berada dibawahnya dan user dapat mengedit data bahan.
Sedangkan untuk menghapus data bahan user diminta untuk memilih/select baris
bahan mana yang ingin dihapus pada tabel bahan, kemudian user dapat menekean
tombol ”DELETE”.
4.3.5 Update Lilin Hias
Gambar 4.6 Form Update Lilin Hias
Form Update Lilin Hias ini digunakan untuk mengubah data lilin hias. User
dapat menambah data lilin hias, mengeditnya ataupun menghapusnya.Untuk
menambah data lilin hias maka user diminta untuk menekan tombol ”ADD”.
Setelah ditekan tombol ”ADD” maka user dapat memasukkan nama bahan baru,
49
memilih bahan baru yang dibutuhkan, serta keuntungan yang diperoleh. Untuk
mengedit data lilin hias, user diminta untuk memilih lilin hias yang ingin diedit
berdasarkan nama lilin kemudian user dapat menekan tombol ”EDIT” untuk
mengedit data lilin. Sedangkan untuk menghapus data lilin hias, user diminta
untuk memilih lilin hias yang ingin diedit berdasarkan nama lilin kemudian user
dapat menekan tombol ”DELETE”.
4.3.6 Perhitungan
Gambar 4.7 Form Perhitungan
Form Perhitungan digunakan untuk memasukkan data-data yang dibutuhkan
agar dapat dilakukan perhitungan simpleks. Pada form ini user diminta untuk
50
memilih/select bentuk-bentuk lilin hias yang akan diproduksi pada tabel sebelah
kiri kemudian nama-nama bentuk lilin hias yang dipilih dipindahkan ke tabel
sebelah kanan dengan menekan tombol ”>>”. Kemudian user diminta mengisi
data kendala minimal dan maksimal pada kolom minimal atau maksimal jika.
Kemudian user dapat menekan tombol ”OK” untuk mendapatkan bahan-bahan
yang dibutuhkan oleh bentuk-bentuk lilin hias yang telah dipilih serta satuannya.
Setelah ditampilkan nama-nama bahan yang telah dipilih maka user dapat
mengisikan jumlah data bahan yang masih tersedia. Selanjut user dapat menekan
tombol ”OK” yang berada di bawah tabel bahan yang tersedia.
51
4.3.7 Hasil
Gambar 4.8 Tampilan Hasil Perhitungan
Tampilan di atas merupakan tampilan informasi hasil perhitungan.
Tampilannya di atas berupa informasi dalam bentuk text. Informasi yang
ditampilkan berupa jumlah lilin hias yang harus di produksi beserta bahan yang
tersisa.
4.4 Analisa Hasil Implementasi
Untuk mengetahui bahwa hasil dari Program Bantu Penentuan Jumlah Lilin
Hias yang Harus Diproduksi benar maka dilakukan berbagai uji coba dengan
menggunakan Program Bantu Penentuan Jumlah Lilin Hias yang Harus
Diproduksi. Salah satunya adalah dengan membandingkan hasil output dengan
52
menggunakan program lain. Dalam hal ini penulis menggunakan program QM for
Windows 2 sebagai perbandingannya.
Berikut ini adalah beberapa perbandingan yang telah dilakukan antara
Program Bantu Penentuan Jumlah Lilin Hias yang Harus Diproduksi dengan
program QM for Windows 2:
1. Inputan Tanpa Kendala Maksimum dan Kendala Minimum
Berikut ini adalah contoh pemodelan masalah jika tidak menggunakan kendala
maksimum dan kendala minimum:
Fungsi tujuan : memaksimumkan Z = 4300a + 1350b + 1100c + 600d
Kendala : 122a + 37b + 41c + 0.9d ≤ 10000
12a + 4b + 4c + 0.1d ≤ 5000
26a + 1.8b + 0.9c + 14d ≤ 4000
3a + 0.2b + 0.1c + d ≤ 300
12a + 3b + 6c + 6d ≤ 500 dengan a, b, c, d bulat ≥ 0
Hasil dari Program Bantu : Hasil dari QM for Windows 2:
a = Juice = 0.00 a = 0
b = Tart = 166.00 b = 166
c = Ice Cream = 0.00 c = 0
d = Jelly = 0.00 d = 0
Keuntungan = 224100.00 Solution Value = 224100
53
Dari hasil di atas dapat dilihat bahwa keduanya memiliki hasil yang
sama. Dengan ini dapat dibuktikan bahwa perhitungan dari program bantu
benar untuk permasalahan tanpa kendala maksimum dan minimum.
2. Inputan dengan Kendala Minimum
Berikut adalah kendala minimum yang digunakan :
a = Juice = 10
b = Tart = 10
c = Ice Cream = 10
d = Jelly = 10
Dari kendala minimum di atas maka pemodelannya adalah sebagai
berikut :
Fungsi tujuan : memaksimumkan Z = 4300a + 1350b + 1100c + 600d
Kendala : 122a + 37b + 41c + 0.9d ≤ 10000
12a + 4b + 4c + 0.1d ≤ 5000
26a + 1.8b + 0.9c + 14d ≤ 4000
3a + 0.2b + 0.1c + d ≤ 300
12a + 3b + 6c + 6d ≤ 500
a ≥ 10
b ≥ 10
c ≥ 10
d ≥ 10 dengan a, b, c, d bulat ≥ 0
Hasil dari Program Bantu : Hasil dari QM for Windows 2:
54
a = Juice = 10.00 a = 10
b = Tart = 86.00 b = 86
c = Ice Cream = 10.00 c = 10
d = Jelly = 10.00 d = 10
Keuntungan = 176100.00 Solution Value = 176100
Dari hasil di atas juga dapat dilihat bahwa hasil perhitungan memenuhi
syarat yaitu setiap hasilnya harus lebih besar atau sama dengan 10. Dengan
ini dapat dibuktikan bahwa perhitungan dari program bantu benar untuk
permasalahan dengan kendala minimum.
3. Inputan dengan Kendala Maksimum
Berikut adalah kendala maksimum yang digunakan :
a = Juice = 10
b = Tart = 10
c = Ice Cream = 10
d = Jelly = 10
Dari kendala maksimum di atas maka pemodelannya adalah sebagai
berikut :
Fungsi tujuan : memaksimumkan Z = 4300a + 1350b + 1100c + 600d
Kendala : 122a + 37b + 41c + 0.9d ≤ 10000
12a + 4b + 4c + 0.1d ≤ 5000
26a + 1.8b + 0.9c + 14d ≤ 4000
55
3a + 0.2b + 0.1c + d ≤ 300
12a + 3b + 6c + 6d ≤ 500
a ≤ 10
b ≤ 10
c ≤ 10
d ≤ 10 dengan a, b, c, d bulat ≥ 0
Hasil dari Program Bantu : Hasil dari QM for Windows 2:
a = Juice = 10.00 a = 10
b = Tart = 10.00 b = 10
c = Ice Cream = 10.00 c = 10
d = Jelly = 10.00 d = 10
Keuntungan = 73500.00 Solution Value = 73500
Dari hasil di atas dapat dilihat bahwa hasil perhitungan memenuhi syarat
yaitu setiap hasilnya lebih kecil atau sama dengan 10. Dengan ini dapat
dibuktikan bahwa perhitungan dari program bantu benar untuk permasalahan
dengan kendala maksimum.
4. Inputan dengan Kendala Maksimum dan Minimum
Kendala minimum yang digunakan :
a = Juice = 5
c = Ice Cream = 5
Kendala minimum yang digunakan :
56
b = Tart = 5
d = Jelly = 10
Dari kendala maksimum dan minimum di atas maka pemodelannya
adalah sebagai berikut :
Fungsi tujuan : memaksimumkan Z = 4300a + 1350b + 1100c + 600d
Kendala : 122a + 37b + 41c + 0.9d ≤ 10000
12a + 4b + 4c + 0.1d ≤ 5000
26a + 1.8b + 0.9c + 14d ≤ 4000
3a + 0.2b + 0.1c + d ≤ 300
12a + 3b + 6c + 6d ≤ 500
a ≥ 5
b ≤ 5
c ≥ 5
d ≤ 10 dengan a, b, c, d bulat ≥ 0
Hasil dari Program Bantu : Hasil dari QM for Windows 2:
a = Juice = 38.00 a = 38
b = Tart = 4.00 b = 4
c = Ice Cream = 5.00 c = 5
d = Jelly = 0.00 d = 0
Keuntungan = 174300.00 Solution Value = 174300
57
Dari hasil di atas dapat dilihat bahwa seluruh hasil memenuhi syarat
kendala maksimum dan minimum. Sehingga dapat dibuktikan bahwa
perhitungan dari program bantu benar untuk permasalahan dengan kendala
maksimum dan kendala minimum.
5. Uji coba jika salah satu bahan yang tersedia hanya dapat membuat satu buah
lilin hias.
Berikut ini adalah contoh pemodelan masalah jika data bahan parafin
yang tersedia adalah 0.9 gram :
Fungsi tujuan : memaksimumkan Z = 4300a + 1350b + 1100c + 600d
Kendala : 122a + 37b + 41c + 0.9d ≤ 0.9
12a + 4b + 4c + 0.1d ≤ 5000
26a + 1.8b + 0.9c + 14d ≤ 4000
3a + 0.2b + 0.1c + d ≤ 300
12a + 3b + 6c + 6d ≤ 500 dengan a, b, c, d bulat ≥ 0
Hasil dari Program Bantu : Hasil dari QM for Windows 2:
a = Juice = 0.00 a = 0
b = Tart = 0.00 b = 0
c = Ice Cream = 0.00 c = 0
d = Jelly = 1.00 d = 1
Keuntungan = 600.00 Solution Value = 600
58
Dari seluruh bentuk lilin hias, lilin jelly yang paling sedikit memerlukan
parafin, sehingga dari seluruh bahan yang tersedia hanya satu lilin jelly yang
dapat dibuat. Dari hasil di atas dapat dibuktikan bahwa hasil perhitungan
dengan menggunakan program bantu benar yaitu hanya satu lilin jelly yang
harus diproduksi dengan keuntungan maksimum Rp 600,00.
6. Jika suatu permasalahan simpleks mempunyai penyelesaian ganda.
Berikut ini adalah contoh pemodelan suatu permasalahan simpleks yang
mempunyai penyelesaian ganda:
Fungsi tujuan : memaksimumkan Z = 2X1 + 4X2
Kendala : X1 + 2X2 ≤ 5
X1 + X2 ≤ 4 dengan X1, X2 bulat ≥ 0
Hasil dari Program Bantu : Hasil dari QM for Windows 2:
X1 = 1.00 X1 = 1
X2 = 2.00 X2 = 2
Keuntungan = 10.00 Solution Value = 10
Dari hasil di atas dapat dilihat baik menggunakan program bantu
maupun program QM for Windows 2 memiliki hasil yang sama.
7. Jika permasalahan branch-bound mempunyai penyelesaian ganda.
Berikut ini adalah contoh pemodelan permasalahan branch-bound yang
mempunyai permasalahan ganda:
59
Fungsi tujuan : memaksimumkan Z = X1 + X2
Kendala : X1 + 2X2 ≤ 20
3X1 + X2 ≤ 24 dengan X1, X2 bulat ≥ 0
Berikut adalah pemodelan branch-bound dari masalah di atas :
Gambar 4.9 Pemodelan branch-bound untuk Penyelesaian Ganda
Hasil dari Program Bantu : Hasil dari QM for Windows 2:
X1 = 5.00 X1 = 5
X2 = 7.00 X2 = 7
Keuntungan = 12.00 Solution Value = 12
Dari hasil di atas dapat dilihat bahwa untuk masalah yang memiliki
penyelesaian ganda baik menggunakan program bantu maupun program QM
for Windows 2 memiliki hasil yang sama yaitu mengambil cabang nomer 4.
60
Setelah melakukan perbandingan dengan menggunakan program QM for
Windows 2, penulis juga melakukan beberapa uji coba sebagai berikut :
1. Uji coba jika bahan yang tersedia tidak memenuhi kebutuhan untuk membuat
satu buah lilin hias sama sekali.
Berikut ini adalah contoh pemodelan masalah jika bahan yang tersedia
tidak memenuhi kebutuhan untuk membuat satu bua lilin hias sama sekali :
Fungsi tujuan : memaksimumkan Z = 4300a + 1350b + 1100c + 600d
Kendala : 122a + 37b + 41c + 0.9d ≤ 0.9
12a + 4b + 4c + 0.1d ≤ 0.1
26a + 1.8b + 0.9c + 14d ≤ 0.9
3a + 0.2b + 0.1c + d ≤ 0.1
12a + 3b + 6c + 6d ≤ 3 dengan a, b, c, d bulat ≥ 0
Hasil dari program bantu :
61
Gambar 4.10 Output Jika Inputan Bahan yang Tersedia Tidak Memenuhi
Kebutuhan untuk Membuat Satu Buah Lilin Hias
Dari gambar 4.10 dapat dilihat bahwa bahan-bahan yang diinputkan tidak
dapat membuat satu buah lilin hias pun. Dari gambar tersebut warna abu-abu
merupakan tanda bahwa kebutuhan minimum bahan tidak terpenuhi. Dengan
adanya kekurangan bahan ini maka perhitungan tidak dapat dilanjutkan.
2. Uji coba jika koefisien fungsi tujuan di ganti dengan prosentasi keuntungan.
Berikut ini adalah pemodelan masalah yang akan digunakan untuk
perbandingan jika menggunakan prosentase keuntungan:
Fungsi tujuan : memaksimumkan Z = 4300a + 1350b + 1100c + 600d
¯ ¯ ̄ ̄
Koefisien tujuan dalam prosentase : 34.4 58.7 40 9.6
Kendala : 122a + 37b + 41c + 0.9d ≤ 10000
12a + 4b + 4c + 0.1d ≤ 5000
26a + 1.8b + 0.9c + 14d ≤ 4000
3a + 0.2b + 0.1c + d ≤ 300
12a + 3b + 6c + 6d ≤ 500
a ≥ 5
b ≤ 5
62
c ≥ 5
d ≤ 10 dengan a, b, c, d bulat ≥ 0
Hasil program bantu bukan prosentase: Hasil program bantu dalam prosentase:
a = Juice = 38.00 a = 5.00
b = Tart = 4.00 b = 5.00
c = Ice Cream = 5.00 c = 70.00
d = Jelly = 0.00 d = 0.00
Keuntungan = 174300.00 Keuntungan = 105250.00
Dari perbandingan di atas dapat diambil kesimpulan bahwa koefisien
tujuan dengan menggunakan prosentase keuntungan ternyata menghasilkan
keuntungan maksimum yang lebih kecil maka koefisien fungsi tujuan dengan
menggunakan prosentase sebaiknya tidak digunakan.
Dibandingkan dengan QM for Windows 2, program bantu penentuan jumlah
lilin hias yang harus diproduksi dapat digunakan oleh orang awam yang sama
sekali tak mengerti tentang pemodelan simpleks, karena user program bantu ini
tidak perlu memasukkan satu persatu koefisien kendala serta koefisien tujuan satu
persatu seperti pada QM for Windows 2.
Dari hasil seluruh uji coba diketahui bahwa dibandingkan dengan
menggunakan program QM for Windows 2, program bantu ini akan lebih
mempermudah user untuk menginputkan data. User tidak perlu menginputkan
kebutuhan bahan lilin hias setiap akan melakukan perhitungan. Dengan
63
menggunakan program bantu ini, data kebutuhan bahan tiap lilin hias telah
disimpan dalam database. Demikian pula dengan inputan kendala maksimum dan
kendala minimum, dengan menggunakan program bantu ini akan mempermudah
user karena user tidak perlu memahami terlebih dahulu bagaimana memasukkan
formula kendala dalam metode simpleks.
Program bantu ini juga telah diujicobakan pada perusahaan lilin hias
Rindang yang hasilnya adalah program bantu ini membantu produsen untuk
menentukan jumlah lilin hias yang akan diproduksi.
4.4.1 Kelebihan Program Bantu
Program bantu yang telah berhasil dibuat ini memiliki beberapa kelebihan
antara lain :
1. Data kebutuhan bahan disimpan di dalam database sehingga user tidak perlu
memasukkan data kebutuhan bahan satu per satu.
2. Program bantu dapat digunakan untuk update lilin hias dan update bahan.
3. Output program bantu dapat memberikan informasi sisa bahan yang tersedia
setelah digunakan.
4.4.2 Kekurangan Program Bantu
Disamping kelebihan yang berhasil ditunjukkan, program bantu juga
memiliki beberapa kekurangan. Kekurangan program bantu yang telah dibuat
antara lain :
64
1. Data lilin hias yang dimasukkan belum mencakup seluruh lilin hias yang ada
dipasaran. Data lilin hias hanya diperoleh dari perusahaan lilin hias Rindang
saja.
2. Belum ada penanganan stok bahan yang tersedia.
3. Inputan/Output tidak dapat disimpan dalam file.
65
BAB V
PENUTUP
5.1 Kesimpulan
Berdasarkan data yang diperoleh, analisa dan perancangan sistem serta
implementasi program yang tercantum pada BAB III dan BAB IV, maka dapat
ditarik kesimpulan antara lain:
1. Setelah dibandingkan dengan program QM for Windows 2, Program Bantu
Penentuan Jumlah Lilin Hias yang Harus Diproduksi lebih mudah digunakan
oleh produsen lilin hias karena tidak perlu menginputkan data kebutuhan
bahan satu persatu serta dengan program bantu ini user tidak perlu memahami
tentang perhitungan simpleks maupun branch-bound untuk melakukan
perhitungan.
2. Dari hasil perbandingan dengan program QM for Windows 2, Program Bantu
Penentuan Jumlah Lilin Hias yang Harus Diproduksi memiliki output yang
sama sehingga dapat dibuktikan bahwa hasil perhitungan dari program bantu
sudah benar.
3. Algoritma simpleks dan branch-bound dapat diterapkan pada Program Bantu
Penentuan Jumlah Lilin Hias yang Diproduksi. Algoritma simpleks digunakan
untuk menghitung jumlah lilin hias yang diproduksi serta keuntungan
maksimum yang akan diperoleh. Sedangkan algoritma branch-bound
digunakan untuk membulatkan hasil dari perhitungan simpleks yang berupa
bilangan pecahan.
66
5.2 Saran
1. Program Bantu Penentuan Jumlah Lilih Hias yang Diproduksi belum
mencakup seluruh bentuk lilin hias yang ada di pasaran.
2. Dalam Program Bantu Penentuan Jumlah Lilin Hias yang Diproduksi tidak
hanya dapat diselesaikan dengan menggunakan metode simpleks saja.
Program ini juga dapat diselesaikan dengan menggunakan metode lain yang
dapat menghasilkan perhitungan optimal.
67
DAFTAR PUSTAKA
Aminudin, 2005, Prinsip-Prinsip Riset Operasi, Jakarta, Erlangga.
Irwanto, Djon., S.Kom., MM, 2005, Perancangan Object Oriented Software
dengan UML, Yogyakarta, Andi Offset.
Kadir, Abdul, Dasar Pemrograman Java 2, Andi, Yogyakart, 2003
Khannedy, Eko Kurniawan, Mengubah Warna Background JTable Agar Warna-
Warni,
http://eecchhoo.wordpress.com/2008/11/10/mengubah-warna-background-
jtable-agar-warna-warni/
Siang, J.J. Drs., 2006, Riset Operasi.
Siswanto, Drs., M.Sc., 2007, Operation Research, Jakarta, Erlangga.
Whitten, 2004, System Analysis and Design Methods 6th edition.
Yu, Wei, This is the Simplex Java Applet!,
http://www-
new.mcs.anl.gov/otc/Guide/CaseStudies/simplex/applet/SimplexTool.html