• Tidak ada hasil yang ditemukan

Aplikasi masalah 0/1 Knapsack menggunakan algoritma Greedy.

N/A
N/A
Protected

Academic year: 2017

Membagikan "Aplikasi masalah 0/1 Knapsack menggunakan algoritma Greedy."

Copied!
86
0
0

Teks penuh

(1)

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

(2)

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

(3)

iii

SKRIPSI

APLIKASI MASALAH 0/1 KNAPSACK

MENGGUNAKAN ALGORITMA GREEDY

Oleh :

Yohanes Tommy Gratsianto

NIM : 065314035

Telah disetujui oleh :

Dosen pembimbing

(4)

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

(5)

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

(6)

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

(7)

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

(8)

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.

(9)

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.

(10)

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.

(11)

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

(12)

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

(13)

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

(14)

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

(15)

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

(16)

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.

(17)

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.

(18)

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

(19)

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.

(20)

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.

(21)

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

n

i i i

x

p

F

1

Dengan kendala

n

i 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.

(22)

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 = 30

w

2 = 2;

p

2 = 25

w

3 = 5;

p

3 = 20

Kapasitas knapsack

W

= 8

(23)

Properti Objek

Greedy by

i

w

i

p

i

p

i/

w

i

Weight

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

(24)

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;

}

(25)

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

(26)

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

(27)

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

(28)

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 :

(29)

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

(30)

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.

(31)

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

(32)

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

(33)

Gambar 3.6 Flowchart Algoritma Greedy By Density

3.5 Perancangan Interface Program

(34)

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

(35)

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 :

(36)

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

Tampilan

IDE NetBeans 5.5.

4.1.1 Tampilan Menu Awal

(37)

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.

(38)

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.

(39)

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.

(40)

Gambar 4.5 Menu Peringatan

(41)

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

(42)

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

(43)

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

(44)

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

(45)

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

(46)

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.

(47)

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

.

(48)

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);

} });

(49)

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)

(50)

.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);

(51)

/**

* @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();

(52)

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(

(53)

.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);

} });

(54)

.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[]) {

(55)

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(); }

(56)

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();

(57)

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));

(58)

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);

(59)

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)");

(60)

Referensi

Dokumen terkait

1) Memiliki ijazah S2 atau setara sesuai dengan kompetensi bidang ilmunya. Ijazah S2 diutamakan yang linear dengan program studi yang dituju, kecuali untuk program

Saya mengesahkan bahawa satu Jawatankuasa Pemeriksa telah berjumpa pada 24 September 2010 untuk menjalankan peperiksaan akhir bagi Norliza binti Ibrahim untuk menilai

Dengan membaca, memahami dan mengikuti petunjuk-petunjuk yang dicantumkan dalam buku Petunjuk Pelaksanaan Penyelenggaraan Pelatihan Jarak Jauh (DL) dan User Manual

Usaha penanggulangan suatu kejahatan tidaklah mudah seperti yang dibayangkan karena hampir tidak mungkin menghilangkannya, tetapi kita bisa meminimalisirnya. Tindak

Berdasarkan grafik hasil perhitungan tegangan dapat disimpulkan bahwa ketebalan mempengaruhi penurunan dari nilai tegangan yaitu sebesar 40% - 68% untuk pembebanan penuh pada

Study Ethnomathematics Mengungkap Aspek-Aspek Matematika Pada Penentuan Hari Baik Aktivitas Sehari-Hari Masyarakat Adat Kampung Kuta Di Ciamis Jawa Barat.. Universitas

Sebagai Contoh Program, disini saya membuat Program Penjualan barang untuk Toko Riyanti.. Di mana toko ini menjual berbagai jenis

Standar yang akan dipakai disesuaikan dengan faktor-faktor desain fisik yang mempengaruhi kinerja bangunan tertentu (dalam hal ini, standar untuk mengevaluasi sekolah