APLIKASI MASALAH 0/1 KNAPSACK
MENGGUNAKAN ALGORITMA GREEDY
Skripsi
Diajukan untuk Menempuh Salah Satu Syarat
Memperoleh Gelar Sarjana Komputer
Program Studi Teknik Informatika
Oleh :
Yohanes Tommy Gratsianto
NIM : 065314035
PROGRAM STUDI TEKNIK INFORMATIKA
FAKULTAS SAINS DAN TEKNOLOGI
UNIVERSITAS SANATA DHARMA
YOGYAKARTA
ii
APPLICATION 0/1 KNAPSACK PROBLEM
USING GREEDY ALGORITHM
Final Project
Presented as Partial Fulfillment of the Requirements
To Obtain Sarjana Komputer
Informatics Engineering Study Program
By :
Yohanes Tommy Gratsianto
065314035
INFORMATICS ENGINEERING STUDY PROGRAM
FACULTY OF SCIENCE AND TECHNOLOGY
SANATA DHARMA UNIVERSITY
YOGYAKARTA
iii
SKRIPSI
APLIKASI MASALAH 0/1 KNAPSACK
MENGGUNAKAN ALGORITMA GREEDY
Oleh :
Yohanes Tommy Gratsianto
NIM : 065314035
Telah disetujui oleh :
Dosen pembimbing
iv
SKRIPSI
APLIKASI MASALAH 0/1 KNAPSACK
MENGGUNAKAN ALGORITMA GREEDY
Dipersiapkan dan ditulis oleh
Yohanes Tommy Gratsianto
NIM : 065314035
Telah dipertahankan di depan Paniti Penguji
Pada Tanggal : 6 Mei 2013
Dan dinyatakan memenuhi syarat
Susunan Panitia Penguji :
Nama Lengkap
Tanda Tangan
Ketua
: Eko Hari Parmadi, S.Si., M.Kom.
……….
Sekretaris : Drs. J. Eka Priyatma, M.Sc., Ph.D.
……….
Anggota
: Alb. Agung Hadhiatma, S.T., M.T.
……….
Yogyakarta, .... Mei 2013
Fakultas Sains dan Teknologi
Universitas Sanata Dharma
Dekan
v
HALAMAN PERSEMBAHAN
Penulis mempersembahkan Tugas Akhir ini kepada :
Yesus Kristus
Atas segalanya yang telah kau berikan kepada kami.
Bapak Aloysius Hendarto dan Ibu M.M. Sri Utami
Terima kasih atas kasih sayang, cinta, pengorbanan,
doa dan dukungannya selama ini.
Christophorus Tommy Astanto
vi
PERNYATAAN KEASLIAN KARYA
Saya menyatakan bahwa skripsi yang saya tulis ini tidak memuat karya
atau bagian karya orang lain, kecuali yang telah disebutkan dalam kutipan dan
daftar pustaka, sebagaimana layaknya karya ilmiah.
Yogyakarta, 16 Mei 2013
vii
LEMBAR PERNYATAAN PERSETUJUAN
PUBLIKASI KARYA ILMIAH UNTUK KEPENTINGAN AKADEMIS
Yang bertanda tangan dibawah ini, saya mahasiswa Universitas Sanata
Dharma :
Nama : Yohanes Tommy Gratsianto
NIM
: 065314035
Demi pengembangan ilmu pengetahuan, saya memberikan kepada
Perpustakaan Universitas Sanata Dharma karya ilmiah saya yang berjudul :
APLIKASI MASALAH 0/1 KNAPSACK
MENGGUNAKAN ALGORITMA GREEDY
Beserta perangkat yang diperlukan (bila ada). Dengan demikian saya
memberikan kepada Perpustakaan Universitas Sanata Dharma hak untuk
menyimpan, mengalihkan dalam bentuk media lain, mengelola dalam bentuk
pangkalan data, mendistribusikan secara terbatas, dan mempublikasikannya di
Internet atau media lain untuk kepentingan akademis tanpa perlu meminta ijin dari
saya maupun memberi royalti kepada saya selama tetap mencantumkan nama saya
sebagai penulis.
Demikian pernyataan ini yang saya buat dengan sebenarnya.
Dibuat diYogyakarta
Pada tanggal : .... Mei 2013
Yang menyatakan
viii
ABSTRAK
Masalah Knapsack adalah masalah di mana kita dihadapkan dengan
persoalan optimasi pemilihan benda untuk dimasukkan ke dalam sebuah wadah
yang memiliki keterbatasan ruang dan daya tampung tetapi benda yang akan
dimasukkan ke dalam wadah tersebut haruslah tetap dalam keadaan utuh bukan
merupakan fraksi dari benda tersebut. Masing-masing benda yang ada memiliki
sebuah nilai berupa berat, volume, harga, atau nilai lainnya yang dapat dipakai
sebagai penentu dalam proses pemilihannya. Sedangkan wadah memiliki sebuah
nilai konstanta yang dimilikinya dan merupakan sebuah pembatas dalam proses
pemilihan benda untuk dapat dimasukkan ke dalam wadah tersebut. Penelitian ini
bertujuan untuk mengetahui apakah algoritma Greedy dapat menyelesaikan semua
permasalahan Knapsack.
ix
ABSTACT
Knapsack problems are problems in which we are faced with the selection
of the optimization problem to put objects in a container that has limited space
and capacity but objects to be inserted into the container must remain intact is not
a fraction of these objects. Each object has a value that is in the form of weight,
volume, prices, or other value that can be used as a determinant in the selection
process. Meanwhile, the container has a value of its constants and is a barrier in
the process of selecting objects to be inserted into the container. This study aims
to determine whether the Greedy algorithm can solve all the problems Knapsack.
x
KATA PENGANTAR
Puji syukur saya panjatkan ke hadirat Tuhan Yang Maha Esa karena atas
berkat dan rahmatnya sehingga penulis dapat menyelesaikan Skripsi ini.
Skripsi ini disusun sebagai salah satu syarat untuk memperoleh gelar
sarjana di program studi Teknik Informatika Universitas Sanata Dharma,
Yogyakarta.
Dalam penulisan Skripsi ini, penulis telah mendapatkan bantuan dari
berbagai pihak. Untuk itu penulis dengan segala rendah hati ingin menyampaikan
ucapan terimakasih kepada:
1. Ibu Paulina Heruningsih Prima Rosa, S.Si., M.Sc., selaku Dekan Fakultas
Sains dan Teknologi Universitas Sanata Dharma.
2. Ibu Ridowati Gunawan S.Kom., M.T., selaku Ketua Program Studi Teknik
Informatika Univesitas Sanata Dharma.
3. Bapak Puspaningtyas Sanjoyo Adi, S.T., M.T., selaku Dosen Pembimbing
Akademik Teknik Informatika angkatan 2006 kelas A.
4. Bapak Alb. Agung Hadhiatma, S.T., M.T., selaku Dosen Pembimbing
Skripsi yang telah membimbing selama proses pembuatan Skripsi ini.
5. Seluruh Dosen Teknik Informatika Sanata Dharma yang telah
membimbing penulis selama studi.
6. Seluruh Laboran dan karyawan Fakultas Sains dan Telnologi Universitas
Sanata Dharma.
xi
8. Teman-teman Teknik Informatika Universitas Sanata Dharma angkatan
2006. Terimakasih atas kebersamaanya selama ini.
9. Teman-teman UKF Basketball Fakultas Sains dan Teknologi Universitas
Sanata Dharma.
Penulis menyadari bahwa dalam penulisan skripsi ini masih banyak
kekurangan. Oleh karena itu kritik dan saran yang bersifat membangun akan
sangat diharapkan dalam sempurnanya skripsi ini.
Akhir kata, penulis berharap semoga penelitian dan tulisan ini dapat
bermanfaat bagi pembaca.
Yogyakarta, 16 Mei 2013
xii
DAFTAR ISI
HALAMAN JUDUL ... i
TITLE PAGE ... ii
HALAMAN PERSETUJUAN ... iii
HALAMAN PENGESAHAN ... iv
HALAMAN PERSEMBAHAN ... v
HALAMAN KEASLIAN KARYA ... vi
HALAMAN PUBLIKASI KARYA ... vii
ABSTRAK ... viii
ABSTACT ... ix
KATA PENGANTAR ... x
DAFTAR ISI ... xii
DAFTAR TABEL ... xiv
DAFTAR GAMBAR ………. xv
BAB I. PENDAHULUAN
1.1 Latar Belakang ………... 1
1.2 Rumusan Masalah ………... 2
1.3 Batasan Masalah ………...… 2
1.4 Tujuan ……… 2
1.5 Metodologi ……… 2
1.6 Sistematika Penulisan ……… 4
BAB II. LANDASAN TEORI
2.1 Pengertian Permasalahan Knapsack ... 5
2.2 Knapsack 0/1 (Integer Knapsack) ... 5
2.3 Algoritma Greedy ... 6
2.4 Bubble Sort (Exchange Sort) ... 8
2.5 Bahasa Pemrograman JAVA ... 9
BAB III. ANALISA DAN PERANCANGAN SISTEM
3.1 Analisa Sistem ... 11
3.2 Kebutuhan Sistem ... 11
xiii
3.3.1 Perancangan Proses ...12
3.4 Algoritma Program ... 13
3.4.1 Algoritma Greedy By Profit ... 14
3.4.2 Flowchart Algoritma Greedy By Profit ………. 14
3.4.3 Algoritma Greedy By Weight ……… 15
3.4.4 Flowchart Algoritma Greedy By Weight ……….. 16
3.4.5 Algoritma Greedy By Density ………... 17
3.4.6 Flowchart Algoritma Greedy By Density ……….. 17
3.5 Perancangan Interface Program ……….……… 18
3.5.1 Form Menu Awal ……….…. 19
3.5.2 Form Menu Utama ……….…… 19
3.5.3 Form Menu Informasi Program ……….……… 20
BAB IV. IMPLEMENTASI PROGRAM
4.1 Implementasi Program ……….…. 21
4.1.1 Tampilan Menu Awal ………... 21
4.1.2 Tampilan Menu Informasi Program ………. 22
4.1.3 Tampilan Menu Utama ………. 23
4.1.4 Tampilan Menu Peringatan ……… 24
BAB V. ANALISA DAN HASIL PENGUJIAN PROGRAM
5.1 Analisa Program ………. 26
5.2 Hasil Pengujian Program ……… 26
BAB VI. KESIMPULAN DAN SARAN
6.1 Kesimpulan ……… 31
6.2 Saran ……….. 31
DAFTAR PUSTAKA ……….. 32
xiv
DAFTAR TABEL
Table 2.1 Contoh Solusi Menggunakan Algoritma Greedy ……… 8
Tabel 2.2 Iterasi Pertama Bubble Sort ……… 8
Tabel 2.3 Iterasi Lengkap Bubble Sort ………... 9
Tabel 5.1 Hasil Pengujian Pertama ………. 27
Tabel 5.2 Hasil Pengujian Kedua ……… 28
Tabel 5.3 Hasil Pengujian Ketiga ……… 29
xv
DAFTAR GAMBAR
Gambar 1.1 Diagram Metode Waterfall ………. 3
Gambar 3.1 Diagram Konteks ………. 12
Gambar 3.2 Diagram Alur Data Level 1 ………. 12
Gambar 3.3 Diagram Alur Data Level 2 ………. 13
Gambar 3.4 Flowchart Algoritma Greedy By Profit ….……….. 15
Gambar 3.5 Flowchart Algoritma Greedy By Weight .……… 16
Gambar 3.6 Flowchart Algoritma Greedy By Density ….………... 18
Gambar 3.7 Form Menu Awal ……….……… 19
Gambar 3.8 Form Menu Utama ……….……….. 19
Gambar 3.9 Form Menu Informasi Program ……….……….. 20
Gambar 4.1 Tampilan NetBeans 5.5 ……….……….. 21
Gambar 4.2 Menu Awal Program ………... 22
Gambar 4.3 Menu Informasi Program .……… 23
Gambar 4.4 Menu Utama Program ………. 24
BAB I
PENDAHULUAN
1.1 Latar Belakang
Masalah Knapsack merupakan persoalan yang menarik. Masalah
Knapsack merupakan salah satu permasalahan optimisasi yang sering
dihadapi. Masalah Knapsack adalah masalah di mana kita dihadapkan dengan
persoalan optimasi pemilihan benda untuk dimasukkan ke dalam sebuah
wadah yang memiliki keterbatasan ruang dan daya tampung tetapi benda yang
akan dimasukkan ke dalam wadah tersebut haruslah tetap dalam keadaan utuh
bukan merupakan fraksi dari benda tersebut. Masing-masing benda yang ada
memiliki sebuah nilai berupa berat, volume, harga, atau nilai lainnya yang
dapat dipakai sebagai penentu dalam proses pemilihannya. Sedangkan wadah
memiliki sebuah nilai konstanta yang dimilikinya dan merupakan sebuah
pembatas dalam proses pemilihan benda untuk dapat dimasukkan ke dalam
wadah tersebut.
Dalam dunia nyata, Knapsack sering digunakan terutama pada bidang
pengangkutan barang. Dalam usaha tersebut, diinginkan suatu keuntungan
yang maksimal untuk mengangkut barang yang ada dengan tidak melebihi
batas kapasitas yang ada.
Banyak algoritma yang dapat digunakan untuk menyelesaikan masalah
Knapsack. Misalnya algoritma Brute Force, Dynamic Programming, Greedy,
algoritma Genetika dan masih banyak lagi.
Pemilihan algoritma dalam penyelesaian permasalahan Knapsack sangat
penting. Penggunaan algoritma yang tepat akan membantu penyelesaian kasus
knapsack dengan baik. Sebaliknya, ketidaktepatan memilih salah satu
algoritma optimisasi akan menyebabkan terhambatnya proses pengambilan
keputusan.
Dalam Tugas Akhir ini penulis akan membuat aplikasi untuk
menyelesaikan permasalahan Integer Knapsack menggunakan algoritma
Greedy.
1.2 Rumusan Masalah
Apakah algoritma Greedy dapat menyelesaikan semua permasalahan
Integer Knapsack terutama dalam bidang pengiriman barang.
1.3 Batasan Masalah
Adapun batasan masalah dari tugas akhir ini adalah :
1. Pembuatan aplikasi yang dirancang menggunakan bahasa pemrograman
JAVA.
2. Program yang akan dibuat menggunakan algoritma Greedy untuk
menyelesaikan permasalahan Integer Knapsack.
3. Data masukan berupa data integer.
1.4 Tujuan
Tujuan dari tugas akhir ini adalah merancang dan mengembangkan
aplikasi masalah Integer Knapsack menggunakan algoritma Greedy dalam
kasus pengangkutan barang.
1.5 Metodologi
1. Metode Studi Pustaka
Metode ini sebagai penunjang dalam proses pengumpulan data dengan
mempelajari berbagai macam literatur yang berkaitan dengan pembuatan
program ini.
Gambar 1.1 Diagram metodewaterfall
Metode ini digunakan sebagai penunjang dalam proses pembuatan
program sesuai dengan kebutuhan pemakai. Didalam metode ini terdapat
beberapa tahapan yang akan dilakukan yaitu:
1. Rekayasa Sistem
Tahapan ini digunakan untuk mengumpulkan kebutuhan program
dengan sedikit melibatkan analisis dan perancangannya.
2. Analisis
Tahapan ini digunakan untuk menganalisis tentang prosedur atau
fungsi yang akan digunakan dan
user interface
program.
3. Perancangan
Merupakan tahapan yang memusatkan pada karakteristik dari
user
inteface
dan prosedure atau fungsi secara mendetail.
4. Penulisan Program
Menterjemahkan hasil rancangan ke dalam program.
5. Pengujian
1.6 Sistematika Penulisan
Tugas akhir ini nantinya akan disusun dengan sistematika penulisan
sebagai berikut :
BAB I
Pendahuluan
Bab ini berisi tentang latar belakang, rumusan masalah, batasan
masalah, tujuan, metodilogi dan sistematika penulisan.
BAB II
Landasan Teori
Bab ini berisi tentang teori-teori yang dapat digunakan sebagai
bahan pendukung dari pembuatan program dan penulisan tugas
akhir secara keseluruhan.
BAB III
Analisa dan Perancangan Sistem
Bab ini berisi tentang analisa sistem, analisa kebutuhan, rancangan
user interface yang akan digunakan dalam pembuatan program.
BAB IV
Implementasi Program
Bab ini berisi tentang hasil implementasi program, menjelaskan
setiap aplikasi yang ada dalam program.
BAB V
Analisa dan Hasil Pengujian Program
Bab ini berisi tentang analisa program serta analisa perbandingan
kedua algoritma berdasarkan hasil pengujian program.
BAB VI
Kesimpulan dan Saran
Bab
ini
berisi
tentang
kesimpulan
dan
saran
setelah
mengimplementasikan program.
BAB II
LANDASAN TEORI
2.1 Pengertian Permasalahan Knapsack
Knapsack adalah tas atau karung yang digunakan untuk memasukkan
sesuatu. Tapi tidak semua barang bisa ditampung kedalam karung tersebut.
Karung tersebut hanya dapat menyimpan beberapa objek dengan total ukuran
lebih kecil atau sama dengan ukuran kapasitas karung.
Knapsak adalah permasalahan mengenai optimisasi kombinatorial.
Knapsack merupakan suatu permasalahan bagaimana memilih objek dari
sekian banyak dan berapa besar objek tersebut akan disimpan sehingga
diperoleh suatu penyimpanan yang optimal dengan memperhatikan objek yang
terdiri dari n objek (1,2,3,...,n) dimana setiap objek memiliki bobot (wn) dan
Nilai profit (p
n) dengan memperhatikan juga kapasitas dari media
penyimpanan sebesar W dan nilai probabilitas dari setiap objek (Xn). Kita
diberi suatu set barang dengan masing-masing barang mempunyai nilai dan
harga yang berbeda dan kita harus menebak jumlah barang yang harus
dimasukkan ke dalam knapsack sehingga total nilainya tidak melebihi batas
yang diberikan, tetapi memiliki harga total tertinggi yang paling
memungkinkan.
Permasalahan knapsack memiliki tiga jenis persoalan, yaitu :
1. Knapsack 0/1 ( Integer Knapsack)
2. Knapsack Bounded
3. Knapsack Unbounded
2.2 Knapsack 0/1 ( Integer Knapsack)
Dalam persoalan ini, kita diberikan n buah objek yang masing-masing
memiliki nilai bobot dan keuntungan. Kita diminta untuk memilih objek-objek
yang akan dimasukkan ke dalam knapsack yang memiliki bobot maksimum W
sehingga didapat keuntungan yang maksimum. Persoalan ini disebut Integer
Knapsack karena tiap objek hanya memiliki dua status yaitu terpilih atau
tidak.
Permasalahan tersebut dapat dinyatakan dalam bentuk formal sebagai
berikut :
Diberikan n buah objek dengan bobot masing-masing w1, w2, ..., wn dan
keuntungan p1, p2, ..., pn. Lalu terdapat sebuah knapsack dengan bobot
maksimum K. Solusi dari persoalan diatas dinyatakan dalam vektor n-tupel :
X = {x1, x2, ..., xn}
Dimana xi bernilai 1 jika objek ke-i dipilih dan bernilai 0 jika objek ke-i
tidak dipilih. Misal X = {1,0,0} merupakan solusi dimana objek yang dipilih
ialah objek ke-1, sedangkan objek ke-2 dan ke-3 tidak dipilih.
Solusi dihasilkan dengan batasan
Maksimal
ni i i
x
p
F
1
Dengan kendala
ni i i
x
K
w
1
2.3 Algoritma Greedy
Secara harafiah,
greedy
berati rakus atau tamak. Algoritma
Greedy
merupakan algoritma sederhana dan lempang yang paling populer untuk
pemecahan persoalan optimasi (maksimum atau minimum). Prinsip
greedy
adalah “
take what you can get now
!”, yang digunakan dalam konteks positif.
Ada tiga pendekatan dalam menyelesaikan persoalan integer knapsack
dengan algoritma Greedy, yaitu:
1. Greedy by profit
Pada setiap langkah, knapsack diisi dengan objek yang mempunyai
keuntungan terbesar. Strategi ini memcoba memaksimumkan keuntungan
dengan memilih objek yang paling menguntungkan terlebih dahulu.
Pertama kali yang dilakukan adalah mengurutkan secara menurun
objek-objek berdasarkan
profit
-nya. Kemudian baru diambil satu-persatu objek
yang dapat ditampung oleh
knapsack
sampai
knapsack
penuh atau sudah
tidak ada objek lagi yang bisa dimasukkan.
Pada setiap langkah, knapsack diisi dengan objek yang mempunyai
berat paling ringan. Strategi ini memcoba memaksimumkan keuntungan
dengan memasukkan sebanyak mungkin objek ke dalam
knapsack
.
Pertama kali yang dilakukan adalah mengurutkan secara menaik
objek-objek berdasarkan
weight
-nya. Kemudian baru diambil satu-persatu objek
yang dapat ditampung oleh
knapsack
sampai
knapsack
penuh atau tidak
ada objek lagi yang bisa dimasukkan.
3. Greedy by density
Pada setiap langkah, knapsack diisi dengan objek yang mempunyai
densitas (
p
i/
w
i) terbesar. Strategi ini mencoba memaksimumkan
ke-untungan per unit berat terbesar. Pertama kali yang dilakukan adalah
mencari nilai profit per unit (
density
) dari tiap-tiap objek. Kemudian
objek-objek tersebut diurutkan secara menurun berdasarkan
density
-nya.
Kemudian baru diambil satu-persatu objek yang dapat ditampung oleh
knapsack
sampai
knapsack
penuh atau tidak ada objek lagi yang bisa
dimasukkan.
Pemilihan objek berdasarkan salah satu dari ketiga strategi di atas tidak
menjamin akan memberikan solusi optimal. Bahkan ada kemungkinan ketiga
strategi tersebut tidak memberikan solusi optimum.
Tinjauan persoalan Integer Knapsack dengan
n
= 3. Misalkan objek-objek
tersebut kita beri nomor 1, 2, 3. Properti setiap objek
i
dan kapasitas knapsack
adalah sebagai berikut:
w
1 = 3;p
1 = 30w
2 = 2;p
2 = 25w
3 = 5;p
3 = 20Kapasitas knapsack
W
= 8
Properti Objek
Greedy by
i
w
ip
ip
i/w
iWeight
Profit
Density
Solusi
Optimal
1
3
30
10
1
1
1
1
2
2
25
12,5
1
1
1
1
3
5
20
4
0
0
0
0
Total Bobot
5
5
5
5
Total Keuntungan
55
55
55
55
Tabel 2.1 Contoh Solusi menggunakan Algoritma Greedy
Dari tabel diatas, algoritma greedy dengan ketiga strategi yang ada
menghasilkan solusi yang optimal yaitu X = {1,1,0}. Artinya objek ke-1 dan
ke-2 dimasukkan ke dalam knapsack, sedangkan objek ke-3 tidak dimasukkan.
2.4 Bubble Sort (Exchange Sort)
Metode pengurutan ini merupakan metode yang paling umum dikenal
dalam dunia pemrograman. Kelebihan metode ini ada pada kemudahan dalam
membuat programnya. Walaupun semua metode yang digunakan akhirnya
harus mempertimbangkan tingkat efisiensinya.
Ide dasar metode
bubble sort
adalah melewatkan data dalam larik
beberapa kali. Setiap melewati larik, dilakukan perbandingan setiap elemen
sesudahnya (x[i] dengan x[i+1]) dan dilakukan penukaran antara kedua
elemen tersebut bila tidak terurut. Perhatikan contoh berikut :
25
57
48
37
12
92
86
33
Hasil iterasi pembadingan pertama akan menghasilkan :
x[0]
dengan
x[1]
(25 dengan 57)
Tidak berubah
x[1]
dengan
x[2]
(57 dengan 48)
Ditukar
x[2]
dengan
x[3]
(57 dengan 37)
Ditukar
x[3]
dengan
x[4]
(57 dengan 12)
Ditukar
x[4]
dengan
x[5]
(57 dengan 92)
Tidak berubah
x[5]
dengan
x[6]
(92 dengan 86)
Ditukar
x[6]
dengan
x[7]
(92 dengan 33)
Ditukar
Hasil perbandingan pertama, komponen terbesar (92) sudah pada posisi
yang benar. Secara umum, x[n-iterasi] akan ada pada posisi yang benar setelah
iterasi ke iterasi. Metode ini disebut
bubble sort
karena setiap elemen lambat
seperti gelembung untuk sampai ke posisi yang benar.
Setelah pembandingan kedua, larik yang terbentuk :
25
37
12
48
57
33
86
92
Perhatikan angka 86 menempati posisi kedua tertinggi. Setiap iterasi
menempatkan setiap elemen larik ke tempat yang benar. Untuk mengurutkan
n
elemen larik, iterasi yang dibutuhkan tidak lebih dari
n
-1 iterasi.
Iterasi lengkap untuk pengurutan bubble sort :
25
57
48
37
12
92
86
33
Iterasi 1
25
48
37
12
57
86
22
92
Iterasi 2
25
37
12
48
57
33
86
92
Iterasi 3
25
12
37
48
33
57
86
92
Iterasi 4
12
25
37
33
48
57
86
92
Iterasi 5
12
25
33
37
48
57
86
92
Iterasi 6
12
25
33
37
48
57
86
92
Iterasi 7
12
25
33
37
48
57
86
92
Tabel 2.3 Iterasi Lengkap Bubble Sort
Implementasi algoritma bubble sort dalam suatu method :
2.5 Bahasa Pemrograman JAVA
void BubbleSort(int[] data){
int temp;
for(int i=1; i<data.length; i++){
for(int j=0; j<data.length-1; j++){
if(data[j]>data[j+1]){
temp=data[j];
data[j]=data[j+1];
data[j+1]=temp;
}
Java adalah bahasa pemrograman serbaguna yang dapat digunakan untuk
membuat program sebagaimana Anda membuatnya dengan bahasa Pascal atau
C++.
Java dikembangkan oleh Sun Microsystem pada Agustus 1991, dengan
nama semula Oak. Konon Oak adalah pohon semacam jati yang terlihat dari
jendela tempat pembuatannya, James Gosling, bekerja. Ada yang mengatakan
bahwa Oak adalah singkatan dari “Object Application Kernel”, tetapi ada yang
menyatakan hal itu muncul setelah nama Oak diberikan. Pada Januari 1995,
karena nama Oak dianggap kurang komersial, maka diganti dengan Java.
Java merupakan hasil perpaduan sifat dari sejumlah bahasa pemrograman,
yaitu C, C++, Object-C, SmallTalk, dan Common LISP. Selain itu Java juga
dilengkapi dengan unsur keamanan. Yang tak kalah penting adalah bahwa
Java menambahkan paradigma pemrograman yang sederhana.
Java memiliki beberapa keunggulan, diantaranya (Hermawan, 2004) :
1. Java berorientasi pada objek
Dalam memecahkan masalah, Java membagi program menjadi
objek-objek, kemudian memodelkan sifat dan tingkah laku masing-masing.
Selanjutnya, Java menentukan dan mengatur interaksi antara objek yang
satu dengan yang lain.
2. Java bersifat terdistribusi
Pada dekade awal perkembangan PC (
Personal Computer
), komputer
hanya bersifat sebagai
workstation
tunggal, tidak terhubung satu sama
lain. Saat ini, sistem komputerisasi cenderung terdistribusi, mulai dari
workstation client
,
e-mail server
,
database server
,
web server
,
proxy
server
, dan sebagainya.
3. Java bersifat multiplatform
BAB III
ANALISA DAN PERANCANGAN SISTEM
3.1 Analisa Sistem
Masalah Integer Knapsack adalah masalah di mana kita dihadapkan
dengan persoalan optimasi pemilihan benda untuk dimasukkan ke dalam
sebuah wadah yang memiliki keterbatasan ruang dan daya tampung tetapi
benda yang akan dimasukkan ke dalam wadah tersebut haruslah tetap dalam
keadaan utuh bukan merupakan fraksi dari benda tersebut. Masing-masing
benda yang ada memiliki sebuah nilai berupa berat, volume, harga, atau nilai
lainnya yang dapat dipakai sebagai penentu dalam proses pemilihannya.
Sedangkan wadah memiliki sebuah nilai konstanta yang dimilikinya dan
merupakan sebuah pembatas dalam proses pemilihan benda untuk dapat
dimasukkan ke dalam wadah tersebut. Maka penulis akan mengembangkan
suatu program yang dapat digunakan untuk menyelesaikan permasalahan
Integer Knapsack dalam kasus pengiriman barang.
Adapun program yang akan dibuat untuk mennyelesaikan permasalahan
Integer Knapsack menggunakan algoritma Greedy. Perangkat lunak yang
digunakan dalam pembuatan program ini yaitu NetBeans versi 5.5.
3.2 Kebutuhan Sistem
Dalam pembuatan Tugas Akhir ini penulis menggunakan perangkat lunak
NetBeans versi 5.5. Selain itu penulis juga menggunakan perangkat keras
yang terdiri dari :
Processor
: Intel Celeron M
Memory
: 1790 Mb
VGA
: 256 Mb
Media Penyimpanan :
Hard disk
Media Masukan
:
Keyboard
System Operasi
: Windows XP
3.3 Perancangan
Pada tahap ini, akan dilakukan proses perancangan terhadap program yang
akan dibangun. Proses perancangan ini akan dibagi dalam dua bagian yaitu :
perancangan proses dan perancangan
interface
program.
3.3.1 Perancangan Proses
Proses yang terjadi dalam sistem, akan dijelaskan dalam diagram
konteks dan diagram arus data (DAD). Diagram konteks dan DAD untuk
proses-proses yang terjadi dalam sistem adalah sebagai berikut :
Gambar 3.1 Diagram Konteks
Pada gambar 3.1 terdapat proses pengolahan data menggunakan
algoritma Greedy dimana dalam proses tersebut mempunyai masukan
berupa data berat, keuntungan, kapasitas knapsack dan menghasilkan
keluaran berupa data yang sudah diolah dengan algoritma Greedy.
Gambar 3.2 Diagram Alur Data Level 1
keluaran berupa data jumlah berat dan jumlah keuntungan hasil dari proses
pencarian solusi. Untuk proses menampilkan hasil masukkannya berasal
dari proses pencarian solusi yaitu data jumlah berat dan jumlah
keuntungan. Sedangkan data keluarannya yaitu data jumlah berat dan
keuntungan.
Gambar 3.3 Diagram Alur Data Level 2
Pada gambar 3.3 menjelaskan bahwa pada proses pencarian solusi
(Proses 1 dalam DAD Level 1) dipecah menjadi 3 proses yaitu proses
pencarian solusi menggunakan Greedy by profit, proses pencarian solusi
meng-gunakan Greedy by weight, dan proses pencarian solusi
menggunakan Greedy by density.
3.4 Algoritma Program
Algoritma pemgrograman sangat penting untuk dibuat karena akan
mempermudah dalam proses
coding
, karena dengan menggunakan algoritma
kita dapat mengetahui jalannya proses yang akan kita buat. Untuk algoritma
program dalam tugas akhir ini menggunakan algoritma Greedy yang
mempunyai tiga pendekatan, yaitu :
Greedy by weight
Greedy by density
3.4.1 Algoritma Greedy By Profit
Untuk algoritma
Greedy by profit
langkah-langkahnya adalah :
1. Masukkan data yang akan diolah.
2. Proses pengolahan data.
Proses pengurutan data dimana data diurutkan berdasarkan
p
secara descending.
Proses membandingkan
w
+knapsack dengan W.
o
Jika
w
+knapsack <= W, maka
w
akan dimasukkan ke
dalam knapsack.
o
Jika
w
+knapsack > W, maka
w
tidak akan dimasukkan ke
dalam knapsack.
Menampilkan hasil.
Selesai
Gambar 3.4 Flowchart Algoritma Greedy By Profit
3.4.3 Algoritma Greedy By Weight
Untuk algoritma Greedy by weight langkah-langkahnya adalah :
1. Masukkan data yang akan diolah.
2. Proses pengolahan data.
Proses pengurutan data dimana data diurutkan berdasarkan w
secara ascending.
o
Jika w+knapsack <= W, maka w akan dimasukkan ke
dalam knapsack.
o
Jika w+knapsack > W, maka w tidak akan dimasukkan ke
dalam knapsack.
Menampilkan hasil.
Selesai
3.4.4 Flowchart Algoritma Greedy By Weight
3.4.5 Algoritma Greedy By Density
Untuk algoritma
Greedy by density
langkah-langkahnya adalah :
1. Masukkan data yang akan diolah
2. Menghitung nilai density =
p
/
w
.
3. Proses pengolahan data.
Proses pengurutan data dimana data diurutkan berdasarkan
density secara descending.
Proses membandingkan
w
+knapsack dengan W.
o
Jika
w
+knapsack <= W, maka
w
akan dimasukkan ke
dalam knapsack.
o
Jika
w
+knapsack > W, maka
w
tidak akan dimasukkan ke
dalam knapsack.
Menampilkan hasil.
Selesai
Gambar 3.6 Flowchart Algoritma Greedy By Density
3.5 Perancangan Interface Program
3.5.1
Form Menu Awal
Gambar 3.7 Form Menu Awal
Pada form ini terdapat 3 tombol, yaitu :
Tombol Masuk
: Untuk memanggil Form Utama.
Tombol Keluar
: Untuk keluar dari program.
Tombol Informasi
: Untuk memanggil Form Informasi Program
3.5.2
Form Menu Utama
Pada form ini terdapat 2 tombol, yaitu :
Tombol Kembali : Untuk kembali ke Form Awal
Tombol Proses
: Untuk melakukan proses optimisasi
menggunakan Algoritma Greedy.
Pada form ini, disebelah kiri terdapat kolom-kolom untuk
memasukkan data yang akan diproses dan yang di sebelah kanan untuk
menampilkan hasil dari optimalisasi.
3.5.3
Form Menu Informasi Program
Gambar 3.9 Form Menu Informasi Program
Pada Form ini terdapat 2 tombol, yaitu :
BAB IV
IMPLEMENTASI PROGRAM
4.1 Implementasi Program
Dalam pembuatan program ini menggunakan bahasa pemrograman JAVA
dan menggunakan perangkat lunak NetBeans 5.5. NetBeans ini digunakan
untuk membuat project program yang dibuat dan digunakan juga untuk
menjalankan program yang telah dibuat.
Gambar 4.1
TampilanIDE NetBeans 5.5.
4.1.1 Tampilan Menu Awal
Gambar 4.2 Menu Awal Program
Pada menu awal ini terdapat tiga tombol yaitu tombol Info
Program, Masuk, dan Keluar. Untuk tombol Info program akan
memanggil layer informasi tentang aplikasi masalah knapsack
menggunakan algoritma greedy ini. Untuk tombol Masuk akan
memanggil tampilan menu utama. Sedangkan untuk tombol Keluar
digunakan untuk keluar dari program ini.
Gambar 4.3 Menu Informasi Program
Pada menu ini berisi informasi aplikasi masalah knapsack
menggunakan algoritma greedy. Pada menu ini juga terdapat dua tombol
yaitu tombol Keluar dan tombol Kembali. Tombol keluar digunakan
untuk keluar dari program. Sedangkan tombol Kembali digunakan untuk
kembali ke menu awal.
Gambar 4.4 Menu Utama
Pada menu utama ini terdapat tiga tombol yaitu tombol Keluar,
Kembali dan Proses. Tombol keluar digunakan untuk keluar dari
program. Tombol Kembali digunakan untuk kembali ke menu awal.
Sedangkan tombol Proses digunakan untuk memproses data dan mencari
solusi optimal.
Didalam menu utama juga terdapat beberapa kolom untuk
memasukkan data yang akan diproses. Untuk memasukkan data harus
mencentang checkbox terlebih dahulu supaya kolom menjadi enable dan
bisa mengisi kolom tersebut.
Gambar 4.5 Menu Peringatan
BAB V
ANALISA DAN HASIL PENGUJIAN PROGRAM
5.1 Analisa Program
Berdasarkan hasil uji coba, program ini secara keseluruhan dapat bekerja
dengan baik dan dapat membantu
proses pemilihan barang
untuk
menghasilkan keuntungan maksimal.
Adapun kelebihan dan kekurangan dari program ini antara lain sebagai
berikut :
5.1.1 Kelebihan
Program ini dapat digunakan untuk mencari solusi optimal.
Algoritma Greedy dapat digunakan untuk menyelesaikan masalah 0/1
Knapsack.
Program ini sangat sederhana sehingga dapat dengan mudah
digunakan.
5.1.2 Kekurangan
Untuk memasukkan datanya masih secara manual jadi bisa saja terjadi
kesalahan saan memasukkan data.
Untuk beberapa percobaan solusi yang dihasilkan tidak selalu optimal.
Keluaran yang dihasilkan masih berdasarkan pada strategi yang ada
pada algoritma Greedy, sehingga pemakai masih harus menyeleksi
mana dari ketiga keluaran itu yang menghasilkan solusi optimal.
5.2 Hasil Pengujian Program
Pada tahap uji coba program digunakan beberapa masukan data yang akan
di proses. Berikut ini akan ditampilkan hasil dari proses pencarian solusi
optimal menggunakan algoritma Greedy.
Pengujian pertama :
Jumlah data = 10
Kapasitas knapsack = 139
Properti objek
Greedy by
i
w
p
p/w
Profit
Wieght
Density
Solusi
Optimal
1
4
5
1,25
0
1
1
0
2
7
10
1,43
0
1
1
1
3
6
8
1,34
1
1
1
1
4
21
19
0,90
0
1
0
1
5
17
20
1,18
1
1
1
1
6
35
40
1,14
1
1
1
1
7
42
41
0,98
1
0
0
1
8
11
13
1,18
0
1
1
1
9
39
40
1,02
1
0
1
0
10
28
25
0,89
0
1
0
0
Total bobot
139
129
119
139
Total keuntungan
149
140
136
151
Tabel 5.1 Hasil Pengujian Pertama
Dilihat dari table diatas, pada pengujian pertama dengan strategi by profit
total bobot yang dapat ditampung adalah 139 dengan keuntungan 149.
Dengan strategi by weight total bobot yang dapat ditampung adalah 129
dengan keuntungan 140 dan dengan strategi by density total bobot yang
dapat ditampung adalah 119 dengan keuntungan 136. Sedangkan solusi
optimal untuk pengujian pertama ini adalah X={0,1,1,1,1,1,1,1,0,0}
dengan total bobot 139 dan total keuntungan 151. Jadi ketiga strategi dari
algoritma Greedy ini tidak menghasilkan solusi optimal.
Pengujian kedua
Jumlah data = 5
Properti objek
Greedy by
i
w
p
p/w
Profit
Wieght
Density
Solusi
Optimal
1
7
21
3
1
1
1
1
2
13
20
1,54
1
0
1
1
3
11
15
1,36
1
1
1
1
4
9
5
0,56
0
1
0
0
5
5
5
1
1
1
1
1
Total bobot
36
32
36
36
Total keuntungan
61
46
61
61
Tabel 5.2 Hasil Percobaan Kedua
Dilihat dari table diatas, pada pengujian kedua dengan strategi by profit
total bobot yang dapat ditampung adalah 36 dengan keuntungan 61.
Dengan strategi by weight total bobot yang dapat ditampung adalah 32
dengan keuntungan 46 dan dengan strategi by density total bobot yang
dapat ditampung adalah 36 dengan keuntungan 61. Sedangkan solusi
optimal untuk percobaan kedua ini adalah X={1,1,1,0,1} dengan total
bobot 36 dan total keuntungan 61. Jadi strategi dari algoritma greedi yang
menghasilkan solusi optimal adalah Greedy by profit dan by density.
Sedangkan Greedy by weight tidak menghasilkan solusi optimal.
Pengujian ketiga
Jumlah data = 6
Properti objek
Greedy by
i
w
p
p/w
Profit
Wieght
Density
Solusi
Optimal
1
50
70
1,4
1
1
1
1
2
45
45
1
0
1
1
0
3
60
50
0,83
1
0
0
1
4
70
75
1,07
1
0
1
1
5
30
31
1,03
0
1
0
0
6
95
50
0,56
0
0
0
0
Total bobot
180
125
165
180
Total keuntungan
195
146
190
195
Tabel 5.3 Hasil Percobaan Ketiga
Dilihat dari table diatas, pada pengujian ketiga dengan strategi by profit
total bobot yang dapat ditampung adalah 180 dengan keuntungan 195.
Dengan strategi by weight total bobot yang dapat ditampung adalah 125
dengan keuntungan 146 dan dengan strategi by density total bobot yang
dapat ditampung adalah 165 dengan keuntungan 190. Sedangkan solusi
optimal untuk permasalahan diatas adalah X={1,0,1,1,0,0} dengan total
bobot 180 dan total keuntungan 195. Jadi strategi yang menghasilkan
solusi optimal adalah strategi by profit, sedangkan strategi by weight dan
by density tidak menghasilkan solusi optimal.
Pengujian keempat
Jumlah data = 7
Properti objek
Greedy by
i
w
p
p/w
Profit
Wieght
Density
Solusi
Optimal
1
9
10
1,11
0
1
1
0
2
15
14
0,93
1
0
0
1
3
5
10
2
1
1
1
1
4
20
12
0,6
0
0
0
0
5
12
30
2,5
1
1
1
1
6
13
13
1
1
1
1
1
7
10
15
1,5
1
1
1
1
Total bobot
55
49
49
55
Total keuntungan
82
78
78
82
Tabel 5.4 Hasil Percobaan Keempat
Dilihat dari table diatas, pada pengujian keempat dengan strategi by profit
total bobot yang dapat ditampung adalah 55 dengan keuntungan 82.
Dengan strategi by weight total bobot yang dapat ditampung adalah 49
dengan keuntungan 78 dan dengan strategi by density total bobot yang
dapat ditampung adalah 49 dengan keuntungan 78. Sedangkan solusi
optimal untuk permasalahan diatas adalah X={0,1,1,0,1,1,1} dengan total
bobot 55 dan total keuntungan 82. Jadi strategi yang menghasilkan solusi
optimal adalah strategi by profit, sedangkan strategi by weight dan by
density tidak menghasilkan solusi optimal
BAB VI
KESIMPULAN DAN SARAN
6.1 Kesimpulan
Berdasarkan dari hasil uji coba program yang telah dilakukan, dapat
disimpulkan bahwa :
1. Algoritma Greedy dapat diimplementasikan untuk menyelesaikan masalah
Integer Knapsack.
2. Algoritma Greedy tidak selalu menghasilkan solusi optimal karena pada
setiap langkahnya algoritma Greedy hanya memilih berdasarkan
keuntungan terbesar atau berat paling ringan atau density paling besar
terlebih dulu yang akan dimasukkan kedalam wadah.
6.2 Saran
Adapun saran yang penulis sampaikan setelah pembuatan aplikasi ini
adalah :
1. Menambahkan fasilitas ”s
ave
” sehingga pengguna dapat menyimpan data
masukan dan hasil proses optimalisasi yang telah dilakukan.
DAFTAR PUSTAKA
Kadir, Abdul., 2004,
Dasar Pemrograman JAVA 2 – Ed. II
, Yogyakarta, Andi
Offset.
Hartati, Sri, G., Suharto, Herry, B., Wijono, Soesilo, M., 2007,
Pemrograman
GUI Swing Java Dengan NetBeans 5
, Yogyakarta, Andi Offset.
Hartati, Sri, G., Suharto, Herry, B., Wijono, Soesilo, M., 2005,
Java 2 SE dengan
JBuilder
, Yogyakarta, Andi Offset.
Prodi Teknik Informatika, 2007,
Modul Praktikum Algoritma dan Struktur Data
1
, Yogyakarta.
Hermawan, Benny, 2004,
Menguasai Java 2 dan Object Oriented Programming
,
Yogyakarta, Andi Offset.
Paryati, 2009,
Optimasi Strategi Algoritma Greedy Untuk Menyelesaikan
Permasalahan Knapsack 0-1
.
Andy Wicaksono, Prasetyo, 2007,
Eksplorasi Algoritma Brute Force, Greedy dan
Pemrograman Dinamis pada Penyelesaian Masalah 0/1 Knapsack
.
Pramana Baharsyah, Muhamad., Unggul Wicaksono, Sulistyo., Pamuji, Teguh.,
Munir, Rinaldi.,
Eksplorasi Algoritma Brute Force, Greedy, dan
Dynamic Programming untuk Persoalan Integer Knapsack
, Bandung.
Munir, Rinaldi, 2004,
Diktat Kuliah IF2251 : Strategi Algoritmik
.
LAMPIRAN
LISTING PROGRAM
Menu Awal
/*
* MenuAwal.java *
* Created on March 11, 2013, 1:00 PM */
package design;
/** *
* @author Tommy */
public class MenuAwal extends javax.swing.JFrame {
/** Creates new form MenuAwal */ public MenuAwal() {
initComponents(); }
/** This method is called from within the constructor to * initialize the form.
* WARNING: Do NOT modify this code. The content of this method is * always regenerated by the Form Editor.
*/
// <editor-fold defaultstate="collapsed" desc=" Generated Code "> private void initComponents() {
jPanel1 = new javax.swing.JPanel(); jLabel1 = new javax.swing.JLabel(); jLabel2 = new javax.swing.JLabel(); InfoProgram = new javax.swing.JButton(); Masuk = new javax.swing.JButton(); Keluar = new javax.swing.JButton(); jLabel3 = new javax.swing.JLabel();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); setTitle("Menu Awal");
setResizable(false);
jPanel1.setBackground(new java.awt.Color(255, 85, 85)); jLabel1.setFont(new java.awt.Font("Tahoma", 1, 14)); jLabel1.setText("APLIKASI MASALAH KNAPSACK");
jLabel2.setFont(new java.awt.Font("Tahoma", 1, 14)); jLabel2.setText("MENGGUNAKAN ALGORITMA GREEDY");
InfoProgram.setText("Info Program");
InfoProgram.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { InfoProgramActionPerformed(evt);
} });
Masuk.setText("Masuk");
Masuk.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { MasukActionPerformed(evt);
} });
Keluar.setText("Keluar");
Keluar.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { KeluarActionPerformed(evt);
} });
jLabel3.setIcon(new javax.swing.ImageIcon("D:\\tom's dokumen\\Knapsack\\src\\untitled.JPG"));
javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1); jPanel1.setLayout(jPanel1Layout); jPanel1Layout.setHorizontalGroup( jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel1Layout.createSequentialGroup() .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEA DING) .addGroup(jPanel1Layout.createSequentialGroup() .addGap(70, 70, 70)
.addComponent(jLabel1))
.addGroup(jPanel1Layout.createSequentialGroup() .addGap(46, 46, 46)
.addComponent(jLabel2))
.addGroup(jPanel1Layout.createSequentialGroup() .addGap(85, 85, 85)
.addComponent(jLabel3))
.addGroup(jPanel1Layout.createSequentialGroup() .addGap(21, 21, 21)
.addComponent(InfoProgram) .addGap(41, 41, 41)
.addComponent(Masuk) .addGap(41, 41, 41) .addComponent(Keluar))) .addContainerGap(37, Short.MAX_VALUE)) ); jPanel1Layout.setVerticalGroup( jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel1Layout.createSequentialGroup() .addContainerGap() .addComponent(jLabel1) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jLabel2) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jLabel3)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BAS ELINE) .addComponent(InfoProgram) .addComponent(Masuk) .addComponent(Keluar)) .addContainerGap()) );
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); getContentPane().setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addContainerGap() .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addContainerGap() .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); pack();
java.awt.Dimension screenSize =
java.awt.Toolkit.getDefaultToolkit().getScreenSize(); java.awt.Dimension dialogSize = getSize();
setLocation((screenSize.width-dialogSize.width)/2,(screenSize.height-dialogSize.height)/2);
}// </editor-fold>
private void MasukActionPerformed(java.awt.event.ActionEvent evt) { // TODO add your handling code here:
MenuUtama mu = new MenuUtama(); mu.setVisible(true);
this.dispose(); }
private void KeluarActionPerformed(java.awt.event.ActionEvent evt) { // TODO add your handling code here:
System.exit(0); }
private void InfoProgramActionPerformed(java.awt.event.ActionEvent evt) { // TODO add your handling code here:
InfoProgram ip = new InfoProgram(); ip.setVisible(true);
/**
* @param args the command line arguments */
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() { public void run() {
new MenuAwal().setVisible(true); }
}); }
// Variables declaration - do not modify private javax.swing.JButton InfoProgram; private javax.swing.JButton Keluar; private javax.swing.JButton Masuk; private javax.swing.JLabel jLabel1; private javax.swing.JLabel jLabel2; private javax.swing.JLabel jLabel3; private javax.swing.JPanel jPanel1; // End of variables declaration
}
Info Program
/** InfoProgram.java *
* Created on April 23, 2013, 1:03 PM */
package design;
/** *
* @author Tommy */
public class InfoProgram extends javax.swing.JFrame {
/** Creates new form InfoProgram */ public InfoProgram() {
initComponents(); }
/** This method is called from within the constructor to * initialize the form.
* WARNING: Do NOT modify this code. The content of this method is * always regenerated by the Form Editor.
*/
// <editor-fold defaultstate="collapsed" desc=" Generated Code "> private void initComponents() {
jLabel1 = new javax.swing.JLabel();
jLabel3 = new javax.swing.JLabel(); jLabel4 = new javax.swing.JLabel(); jLabel5 = new javax.swing.JLabel(); jLabel6 = new javax.swing.JLabel(); Kembali = new javax.swing.JButton(); jButton1 = new javax.swing.JButton();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); setTitle("Informasi Program");
setResizable(false);
jLabel1.setFont(new java.awt.Font("Tahoma", 1, 14)); jLabel1.setText("INFORMASI PROGRAM");
jTextArea1.setBackground(new java.awt.Color(255, 85, 85)); jTextArea1.setColumns(20);
jTextArea1.setEditable(false); jTextArea1.setRows(5);
jTextArea1.setText("* Aplikasi ini digunakan untuk mencari solusi optimal
menggunakan algoritma\nGreedy.\n\n* User harus memasukkan data berupa berat dan keuntungan yang akan\ndicari solusi optimalnya.\n\n* Aplikasi pencarian solusi optimal ini mempunyai 3 keluaran berdasarkan\nstrategi dari algoritma Greedy yang masing-masing keluaran itu berisi :\n > Data Total Bobot\n > Data Total Keuntungan\n > Data Barang yang diambil (ditampilkan nomer data)");
jScrollPane1.setViewportView(jTextArea1);
jPanel1.setBackground(new java.awt.Color(255, 85, 85)); jLabel2.setText("Dibuat oleh :");
jLabel3.setText("Yohanes Tommy Gratsianto");
jLabel4.setText("065314035");
jLabel5.setText("TI - FST - USD");
jLabel6.setText("@2013");
javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1); jPanel1.setLayout(jPanel1Layout);
jPanel1Layout.setHorizontalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel1Layout.createSequentialGroup()
.addContainerGap()
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEA DING)
.addComponent(jLabel2) .addComponent(jLabel3) .addComponent(jLabel4) .addComponent(jLabel5) .addComponent(jLabel6))
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
jPanel1Layout.setVerticalGroup(
.addContainerGap() .addComponent(jLabel2) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jLabel3) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jLabel4) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jLabel5) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jLabel6) .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); Kembali.setText("Kembali");
Kembali.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { KembaliActionPerformed(evt);
} });
jButton1.setText("Keluar");
jButton1.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jButton1ActionPerformed(evt);
} });
.addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup()
.addGap(126, 126, 126) .addComponent(jLabel1))) .addContainerGap()) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addContainerGap() .addComponent(jLabel1) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 283, javax.swing.GroupLayout.PREFERRED_SIZE) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) .addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup() .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup()
.addGap(28, 28, 28) .addComponent(jButton1) .addGap(28, 28, 28) .addComponent(Kembali)))
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
); pack();
java.awt.Dimension screenSize =
java.awt.Toolkit.getDefaultToolkit().getScreenSize(); java.awt.Dimension dialogSize = getSize();
setLocation((screenSize.width-dialogSize.width)/2,(screenSize.height-dialogSize.height)/2);
}// </editor-fold>
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { // TODO add your handling code here:
System.exit(0); }
private void KembaliActionPerformed(java.awt.event.ActionEvent evt) { // TODO add your handling code here:
MenuAwal ma = new MenuAwal(); ma.setVisible(true);
this.dispose(); }
/**
* @param args the command line arguments */
public static void main(String args[]) {
new InfoProgram().setVisible(true); }
}); }
// Variables declaration - do not modify private javax.swing.JButton Kembali; private javax.swing.JButton jButton1; private javax.swing.JLabel jLabel1; private javax.swing.JLabel jLabel2; private javax.swing.JLabel jLabel3; private javax.swing.JLabel jLabel4; private javax.swing.JLabel jLabel5; private javax.swing.JLabel jLabel6; private javax.swing.JPanel jPanel1;
private javax.swing.JScrollPane jScrollPane1; private javax.swing.JTextArea jTextArea1; // End of variables declaration
}
Menu Utama
/** Test.java *
* Created on April 19, 2013, 10:25 PM */ package design; import design.*; import javax.swing.JOptionPane; /** *
* @author Tommy */
public class MenuUtama extends javax.swing.JFrame {
/** Creates new form Test */ public MenuUtama() { initComponents(); }
public static double d14 = 0; public static double d15 = 0;
/** This method is called from within the constructor to * initialize the form.
* WARNING: Do NOT modify this code. The content of this method is * always regenerated by the Form Editor.
*/
// <editor-fold defaultstate="collapsed" desc=" Generated Code "> private void initComponents() {
jPanel1 = new javax.swing.JPanel(); jLabel1 = new javax.swing.JLabel(); Data1 = new javax.swing.JCheckBox(); Data2 = new javax.swing.JCheckBox(); Data3 = new javax.swing.JCheckBox(); Data4 = new javax.swing.JCheckBox(); Data5 = new javax.swing.JCheckBox(); Data6 = new javax.swing.JCheckBox(); Data7 = new javax.swing.JCheckBox(); Data8 = new javax.swing.JCheckBox(); Data9 = new javax.swing.JCheckBox(); Data10 = new javax.swing.JCheckBox(); Data11 = new javax.swing.JCheckBox(); Data12 = new javax.swing.JCheckBox(); Data13 = new javax.swing.JCheckBox(); Data14 = new javax.swing.JCheckBox(); Data15 = new javax.swing.JCheckBox(); jLabel2 = new javax.swing.JLabel(); Berat1 = new javax.swing.JTextField(); Berat2 = new javax.swing.JTextField(); Berat3 = new javax.swing.JTextField(); Berat4 = new javax.swing.JTextField(); Berat5 = new javax.swing.JTextField(); Berat6 = new javax.swing.JTextField(); Berat7 = new javax.swing.JTextField(); Berat8 = new javax.swing.JTextField(); Berat9 = new javax.swing.JTextField(); Berat10 = new javax.swing.JTextField(); Berat11 = new javax.swing.JTextField(); Berat12 = new javax.swing.JTextField(); Berat13 = new javax.swing.JTextField(); Berat14 = new javax.swing.JTextField(); Berat15 = new javax.swing.JTextField(); jLabel3 = new javax.swing.JLabel();
Keuntungan15 = new javax.swing.JTextField(); jPanel2 = new javax.swing.JPanel();
jButton1 = new javax.swing.JButton(); Kapasitas = new javax.swing.JTextField(); jLabel4 = new javax.swing.JLabel();
jPanel3 = new javax.swing.JPanel(); TotBeratProfit = new javax.swing.JLabel(); TotKeuntunganProfit = new javax.swing.JLabel(); NoBarangProfit = new javax.swing.JLabel(); jLabel5 = new javax.swing.JLabel();
jLabel6 = new javax.swing.JLabel(); jLabel7 = new javax.swing.JLabel(); jPanel4 = new javax.swing.JPanel(); TotBeratWeight = new javax.swing.JLabel(); TotKeuntunganWeight = new javax.swing.JLabel(); NoBarangWeight = new javax.swing.JLabel(); jLabel8 = new javax.swing.JLabel();
jLabel9 = new javax.swing.JLabel(); jLabel10 = new javax.swing.JLabel(); jPanel5 = new javax.swing.JPanel();
TotBeratDensity = new javax.swing.JLabel(); TotKeuntunganDensity = new javax.swing.JLabel(); NoBarangDensity = new javax.swing.JLabel(); jLabel11 = new javax.swing.JLabel();
jLabel12 = new javax.swing.JLabel(); jLabel13 = new javax.swing.JLabel(); Keluar = new javax.swing.JButton(); jLabel18 = new javax.swing.JLabel(); jLabel19 = new javax.swing.JLabel(); Kembali = new javax.swing.JButton();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); setResizable(false);
jPanel1.setBackground(new java.awt.Color(255, 85, 85)); jLabel1.setText("Data");
Data1.setText("1");
Data1.setBorder(javax.swing.BorderFactory.createEmptyBorder(0, 0, 0, 0)); Data1.setMargin(new java.awt.Insets(0, 0, 0, 0));
Data1.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { Data1ActionPerformed(evt);
} });
Data2.setText("2");
Data2.setBorder(javax.swing.BorderFactory.createEmptyBorder(0, 0, 0, 0)); Data2.setMargin(new java.awt.Insets(0, 0, 0, 0));
Data2.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { Data2ActionPerformed(evt);
} });
Data3.setText("3");
Data3.setBorder(javax.swing.BorderFactory.createEmptyBorder(0, 0, 0, 0)); Data3.setMargin(new java.awt.Insets(0, 0, 0, 0));
public void actionPerformed(java.awt.event.ActionEvent evt) { Data3ActionPerformed(evt);
} });
Data4.setText("4");
Data4.setBorder(javax.swing.BorderFactory.createEmptyBorder(0, 0, 0, 0)); Data4.setMargin(new java.awt.Insets(0, 0, 0, 0));
Data4.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { Data4ActionPerformed(evt);
} });
Data5.setText("5");
Data5.setBorder(javax.swing.BorderFactory.createEmptyBorder(0, 0, 0, 0)); Data5.setMargin(new java.awt.Insets(0, 0, 0, 0));
Data5.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { Data5ActionPerformed(evt);
} });
Data6.setText("6");
Data6.setBorder(javax.swing.BorderFactory.createEmptyBorder(0, 0, 0, 0)); Data6.setMargin(new java.awt.Insets(0, 0, 0, 0));
Data6.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { Data6ActionPerformed(evt);
} });
Data7.setText("7");
Data7.setBorder(javax.swing.BorderFactory.createEmptyBorder(0, 0, 0, 0)); Data7.setMargin(new java.awt.Insets(0, 0, 0, 0));
Data7.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { Data7ActionPerformed(evt);
} });
Data8.setText("8");
Data8.setBorder(javax.swing.BorderFactory.createEmptyBorder(0, 0, 0, 0)); Data8.setMargin(new java.awt.Insets(0, 0, 0, 0));
Data8.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { Data8ActionPerformed(evt);
} });
Data9.setText("9");
Data9.setBorder(javax.swing.BorderFactory.createEmptyBorder(0, 0, 0, 0)); Data9.setMargin(new java.awt.Insets(0, 0, 0, 0));
Data9.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { Data9ActionPerformed(evt);
Data10.setText("10");
Data10.setBorder(javax.swing.BorderFactory.createEmptyBorder(0, 0, 0, 0)); Data10.setMargin(new java.awt.Insets(0, 0, 0, 0));
Data10.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { Data10ActionPerformed(evt);
} });
Data11.setText("11");
Data11.setBorder(javax.swing.BorderFactory.createEmptyBorder(0, 0, 0, 0)); Data11.setMargin(new java.awt.Insets(0, 0, 0, 0));
Data11.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { Data11ActionPerformed(evt);
} });
Data12.setText("12");
Data12.setBorder(javax.swing.BorderFactory.createEmptyBorder(0, 0, 0, 0)); Data12.setMargin(new java.awt.Insets(0, 0, 0, 0));
Data12.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { Data12ActionPerformed(evt);
} });
Data13.setText("13");
Data13.setBorder(javax.swing.BorderFactory.createEmptyBorder(0, 0, 0, 0)); Data13.setMargin(new java.awt.Insets(0, 0, 0, 0));
Data13.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { Data13ActionPerformed(evt);
} });
Data14.setText("14");
Data14.setBorder(javax.swing.BorderFactory.createEmptyBorder(0, 0, 0, 0)); Data14.setMargin(new java.awt.Insets(0, 0, 0, 0));
Data14.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { Data14ActionPerformed(evt);
} });
Data15.setText("15");
Data15.setBorder(javax.swing.BorderFactory.createEmptyBorder(0, 0, 0, 0)); Data15.setMargin(new java.awt.Insets(0, 0, 0, 0));
Data15.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { Data15ActionPerformed(evt);
} });
jLabel2.setText("Berat (Kg)");