• Tidak ada hasil yang ditemukan

METODE GREEDY. Secara matematis, masalah knapsack tersebut dapat ditulis sebagai berikut :

N/A
N/A
Protected

Academic year: 2021

Membagikan "METODE GREEDY. Secara matematis, masalah knapsack tersebut dapat ditulis sebagai berikut :"

Copied!
11
0
0

Teks penuh

(1)

MASALAH KNAPSACK

Kita diberikan sebuah knapsack (ransel) yang dapat menampung berat maksimum M dan sehimpunan benda A = {a0,a1,...,an-1} yang berbobot W = {w0,w1,...,wn-1}. Setiap benda tersebut diberikan nilai profit yang dinotasikan dengan P = {p0,p1,...,pn-1}. Jika kita diperbolehkan memasukkan zi bagian dari benda ai yang ada ke dalam knapsack dimana 0 ≤zi 1 , maka kita dapatkan profit sebesar zi pi untuk benda ai tersebut.

Yang dimaksud dengan masalah knapsack adalah :

Bagaimana kita memilih atau menentukan zi untuk masing-masing benda ai dari keadaan di atas dengan tujuan mendapatkan total profit yang maksimal, dan dengan kendala bahwa total bobot dari benda-benda yang dimasukkan ke dalam knapsack tidak melebihi M.

Secara matematis, masalah knapsack tersebut dapat ditulis sebagai berikut : maksimumkan

Q

z

i

p

i i=0 n-1

=

dengan kendala

zi

i n i

w

W

= −

0 1 dan 0 ≤ zi 1 , pi 0 , wi 〉 0 , 0 ≤ i ≤ n-1

Sebuah solusi yang optimal adalah himpunan Z = {z0,z1,...,zn-1} yang memaksimalkan nilai Q dan memenuhi kendala-kendala yang ada.

Contoh :

Kita diberikan sebuah knapsack (ransel) yang dapat menampung berat maksimum 15 Kg dan sehimpunan benda A = {a0, a1, a2, a3} yang berbobot (dalam Kg) W = {5,9,2,4}. Setiap benda tersebut diberikan nilai profit P = {100, 135, 26, 20}. Jika kita diperbolehkan memasukkan zi

(2)

bagian dari benda ai yang ada ke dalam knapsack dimana 0 ≤ zi ≤ 1 , maka tentukanlah Z = {z0,z1,z2,z3} agar diperoleh total profit yang maksimal !

Algoritma Sekuensial Knapsack Metode Greedy

Salah satu cara untuk menyelesaikan masalah knapsack secara sekuensial adalah dengan pemakaian metode Greedy. Procedure tersebut disebut procedure GREEDY_KNAPSACK. Sebelum procedure tersebut digunakan, benda-benda harus diurutkan rasio pi/wi -nya tidak menaik. Dengan kata lain :

p0/ w0 ≥ p1 / w1 ≥ ... ≥ pn-1 / wn-1

Adapun procedure GREEDY_KNAPSACK adalah sebagai berikut : procedure GREEDY_KNAPSACK(P,W,M,Z,n)

real P(0:n-1),W(0:n-1),Z(0:n-1),cu; {n = banyak benda} integer i,n;

Z ← 0 { Z(0), Z(1), . . . , Z(n-1) = 0} cu ← M

for i ← 0 to n-1 do

if W(i) 〉 cu then exit endif Z(i) ← 1

cu ← cu - W(i) repeat

if i ≤ n-1 then Z(i) ← cu/W(i) endif end GREEDY_KNAPSACK

Jika algoritma ini digunakan untuk menyelesaikan masalah seperti pada contoh yang lalu, dimana n = 4; M = 15; W = { 5,9,2,4 }; P = { 100,135,26,20 }, maka akan terlihat hasil tracenya sebagai berikut :

Z ← 0 cu ← 15 i = 0

karena W(0) 〈 cu yaitu : 5 〈 15 berarti : Z(0) ← 1

(3)

cu ← 15 - 5 = 10 i = 1

karena W(1) 〈 cu yaitu : 9 〈 10 berarti : Z(1) ← 1 cu ← 10 - 9 = 1 i = 2

karena W(2) 〉 cu yaitu : 2 〉 1 berarti : keluar dari loop (exit) Karena 2 ≤ 3 maka Z(2) ← cu/W(2) = 1/2 = 0,5

Jadi optimisasi masalah knapsack diperoleh bila Z = { 1; 1; 0,5; 0 } Sehingga Q = 1 x 100 + 1 x 135 + 0,5 x 26 + 0 x 20

= 100 + 135 + 13 + 0

= 248

Analisis :

Kompleksitas waktu dari algoritma Greedy_Knapsack ini adalah O(n). Tetapi jika data yang digunakan belum terurut rasio pi/wi -nya tidak menaik, maka diperlukan kompleksitas waktu sebesar O(n log n) untuk mengurutkan sebelumnya. Sehingga untuk masalah optimisasi knapsack, kompleksitas waktu dari algoritma ini akan lebih besar pada waktu proses pengurutannya.

Latihan :

Diketahui 3 buah benda dan sebuah knapsack dengan kapasitas maksimum 20. Berat dan profit dari masing-masing benda tersebut adalah (18, 15, 10) dan (25, 24, 15). Tentukanlah Z agar diperoleh total profit yang maksimal !

Jawab :

Pertama, kita periksa apakah rasio pi/wi -nya tidak menaik. p0/w0 = 25/18

p1/w1 = 24/15 p2/w2 = 15/10

(4)

Terlihat bahwa syarat rasio pi/wi -nya tidak menaik belum terpenuhi. Jadi susunan (urutan) -nya untuk sementara kita ubah, agar syarat rasio pi/wi -nya tidak menaik terpenuhi dan kita dapat menyelesaikan masalah tersebut dengan procedure GREEDY_KNAPSACK. Untuk itu, kita ubah sementara urutan benda-bendanya (setelah diperoleh jawaban sementara, kita kembalikan urutan ke susunan semula). Perubahan yang kita lakukan adalah sebagai berikut : urutan ke- (yang lama) urutan ke- (yang baru) 0 2 1 0 2 1 sehingga syaratnya terpenuhi ;

24/15 〉 15/10 〉 25/18 →rasio pi/wi -nya tidak menaik

Sekarang kita sudah dapat menggunakan procedure GREEDY_KNAPSACK untuk menyelesaikan masalah tersebut. Adapun hasil trace-nya adalah sebagai berikut :

Z ← 0 cu ← 20 i = 0

karena W(0) 〈 cu yaitu : 15 〈 20 berarti : Z(0) ← 1

cu ← 20 - 15 = 5 i = 1

karena W(2) 〉 cu yaitu : 10 〉 5 berarti : keluar dari loop (exit) Karena 1 ≤ 2 maka Z(1) ← cu/W(1) = 5/10 = 0,5

Jadi diperoleh : Z(0) = 1 ; Z(1) = 0,5 ; Z(2) = 0

Sekarang urutannya kita kembalikan seperti semula, yakni :

(5)

urutan ke- (yang saat ini)

urutan ke- (yang semula) Z(i) 2 0 0 0 1 1 1 2 0,5 Jadi optimisasi masalah knapsack diperoleh bila Z = { 0; 1; 0,5 }

Sehingga Q = 0 x 25 + 1 x 24 + 0,5 x 15 = 0 + 24 + 7,5

= 31,5

MASALAH POHON RENTANGAN MINIMAL

Permasalahan umum dari pohon rentangan minimal adalah mencari minimum biaya (cost) pohon rentangan dari setiap ruas suatu graf yang membentuk pohon.

Setiap graf tidak dapat ditentukan pohon rentangan minimalnya. Adapun graf yang dapat kita tentukan pohon rentangan minimalnya adalah graf yang memenuhi ketiga syarat berikut : 1. graf tersebut harus terhubung

2. setiap ruas dari graf tersebut harus mempunyai nilai atau bobot (graf berlabel) 3. graf teresbut tidak berarah

Algoritma yang dapat digunakan untuk menyelesaikan masalah pohon rentangan minimal cukup banyak. Dalam pembahasan ini, algoritma yang akan dipakai adalah algoritma PRIM’S.

Berikut ini akan disajikan langkah-langkah penyelesaian masalah pohon rentangan minimal dengan menggunakan algoritma PRIM’S.

PROCEDURE PRIM(E,COST,n,T,mincost) REAL COST(n,n),mincost

INTEGER NEAR(n),n,i,j,k,l,T(1:n-1,2)

(k,l) ← ruas dengan biaya atau bobot yang minimum mincost ← COST(k,l)

(6)

(T(1,1),T(1,2)) ← (k,l) FOR i ← 1 TO n DO

IF COST (i,l) < COST(i,k) THEN NEAR (i) ←l

ELSE NEAR(i) ← k ENDIF REPEAT i

NEAR(k) ← NEAR(l) ← 0 FOR i ← 2 TO n-1 DO

Pilih j (sebuah index) sedemikian sehingga NEAR(j) ≠ 0 AND COST(j,NEAR(j)) adalah minimum

(T(i,1),T(i,2)) ← (j,NEAR(j))

mincost ← mincost + COST(j,NEAR(j)) NEAR(j) ← 0

FOR k ← 1 TO n DO

IF NEAR(k) ≠ 0 AND COST(k,NEAR(k)) > COST(k,j) THEN NEAR(k) ← j

ENDIF REPEAT k

REPEAT i

IF mincost ≥ ~ THEN PRINT ‘bukan pohon rentangan’ ENDIF END PRIM

Contoh :

Perhatikan graf berikut ini :

Tentukanlah nilai pohon rentangan minimalnya, serta pohon yang membentuk pohon rentangan minimal tersebut.

(7)

Penyelesaian :

Dengan menggunakan algoritma PRIM’S, prosesnya adalah sebagai berikut : (k,l) ← (1,2) mincost ← COST(1,2) = 10 (T(1,1),T(1,2)) ← (1,2) i=1 COST (1,2) < COST(1,1) … ? 10 < ~ … → TRUE : NEAR (1) ←2 i=2 COST (2,2) < COST(2,1) … ? ~ < 10 … → FALSE : NEAR (2) ←1 i=3 COST (3,2) < COST(3,1) … ? 50 < ~ … → TRUE : NEAR (3) ←2 i=4 COST (4,2) < COST(4,1) … ? ~ < 30 … → FALSE : NEAR (4) ←1 i=5 COST (5,2) < COST(5,1) … ? 40 < 45 … → TRUE : NEAR (5) ←2 i=6 COST (6,2) < COST(6,1) … ? 25 < ~ … → TRUE : NEAR (6) ←2 NEAR(1) ← NEAR(2) ← 0 i = 2

Pilih j = 6 karena NEAR(6) ≠ 0 dan COST(6,NEAR(6)) adalah minimum (T(2,1),T(2,2)) ← (6,2)

mincost ← 10 + COST(6,2) = 10 + 25 = 35 NEAR(6) ← 0

(8)

k = 1

NEAR(1) ≠ 0 dan COST(1,NEAR(1)) > COST(1,6) … ? 0 ≠ 0 dan ~ > ~ … → FALSE dan FALSE → FALSE k = 2

NEAR(2) ≠ 0 dan COST(2,NEAR(2)) > COST(2,6) … ? 0 ≠ 0 dan ~ > 25 … → FALSE dan TRUE → FALSE k = 3

NEAR(3) ≠ 0 dan COST(3,NEAR(3)) > COST(3,6) … ?

2 ≠ 0 dan 50 > 15 … → TRUE dan TRUE → TRUE : NEAR(3) = 6 k = 4

NEAR(4) ≠ 0 dan COST(4,NEAR(4)) > COST(4,6) … ?

1 ≠ 0 dan 30 > 20 … → TRUE dan TRUE → TRUE : NEAR(4) = 6 k = 5

NEAR(5) ≠ 0 dan COST(5,NEAR(5)) > COST(5,6) … ? 2 ≠ 0 dan 40 > 55 … → TRUE dan FALSE → FALSE k = 6

NEAR(6) ≠ 0 dan COST(6,NEAR(6)) > COST(6,6) … ? 0 ≠ 0 dan ~ > ~ … → FALSE dan FALSE → FALSE i = 3

Pilih j = 3 karena NEAR(3) ≠ 0 dan COST(3,NEAR(3)) adalah minimum (T(3,1),T(3,2)) ← (3,6)

mincost ← 35 + COST(3,6) = 35 + 15 = 50 NEAR(3) ← 0

k = 1

NEAR(1) ≠ 0 dan COST(1,NEAR(1)) > COST(1,3) … ? 0 ≠ 0 dan ~ > ~ … → FALSE dan FALSE → FALSE k = 2

NEAR(2) ≠ 0 dan COST(2,NEAR(2)) > COST(2,3) … ? 0 ≠ 0 dan ~ > 50 … → FALSE dan TRUE → FALSE k = 3

(9)

NEAR(3) ≠ 0 dan COST(3,NEAR(3)) > COST(3,3) … ? 0 ≠ 0 dan ~ > ~ … → FALSE dan FALSE → FALSE k = 4

NEAR(4) ≠ 0 dan COST(4,NEAR(4)) > COST(4,3) … ? 6 ≠ 0 dan 20 > ~ … → TRUE dan FALSE → FALSE k = 5

NEAR(5) ≠ 0 dan COST(5,NEAR(5)) > COST(5,3) … ?

2 ≠ 0 dan 40 > 35 … → TRUE dan TRUE → TRUE : NEAR(5) = 3 k = 6

NEAR(6) ≠ 0 dan COST(6,NEAR(6)) > COST(6,3) … ? 0 ≠ 0 dan ~ > 15 … → FALSE dan TRUE → FALSE i = 4

Pilih j = 4 karena NEAR(4) ≠ 0 dan COST(4,NEAR(4)) adalah minimum (T(4,1),T(4,2)) ← (4,6)

mincost ← 50 + COST(4,6) = 50 + 20 = 70 NEAR(4) ← 0

k = 1

NEAR(1) ≠ 0 dan COST(1,NEAR(1)) > COST(1,4) … ? 0 ≠ 0 dan ~ > 30 … → FALSE dan TRUE → FALSE k = 2

NEAR(2) ≠ 0 dan COST(2,NEAR(2)) > COST(2,4) … ? 0 ≠ 0 dan ~ > ~ … → FALSE dan FALSE → FALSE k = 3

NEAR(3) ≠ 0 dan COST(3,NEAR(3)) > COST(3,4) … ? 0 ≠ 0 dan ~ > ~ … → FALSE dan FALSE → FALSE k = 4

NEAR(4) ≠ 0 dan COST(4,NEAR(4)) > COST(4,4) … ? 0 ≠ 0 dan ~ > ~ … → FALSE dan FALSE → FALSE k = 5

NEAR(5) ≠ 0 dan COST(5,NEAR(5)) > COST(5,4) … ?

(10)

3 ≠ 0 dan 35 > ~ … → TRUE dan FALSE → FALSE k = 6

NEAR(6) ≠ 0 dan COST(6,NEAR(6)) > COST(6,4) … ? 0 ≠ 0 dan ~ > 20 … → FALSE dan TRUE → FALSE i = 5

Pilih j = 5 karena NEAR(5) ≠ 0 dan COST(5,NEAR(5)) adalah minimum (T(5,1),T(5,2)) ← (5,3)

mincost ← 70 + COST(5,3) = 70 + 35 = 105 NEAR(5) ← 0

k = 1

NEAR(1) ≠ 0 dan COST(1,NEAR(1)) > COST(1,5) … ? 0 ≠ 0 dan ~ > 45 … → FALSE dan TRUE → FALSE k = 2

NEAR(2) ≠ 0 dan COST(2,NEAR(2)) > COST(2,5) … ? 0 ≠ 0 dan ~ > 40 … → FALSE dan TRUE → FALSE k = 3

NEAR(3) ≠ 0 dan COST(3,NEAR(3)) > COST(3,5) … ? 0 ≠ 0 dan ~ > 35 … → FALSE dan TRUE → FALSE k = 4

NEAR(4) ≠ 0 dan COST(4,NEAR(4)) > COST(4,5) … ? 0 ≠ 0 dan ~ > ~ … → FALSE dan FALSE → FALSE k = 5

NEAR(5) ≠ 0 dan COST(5,NEAR(5)) > COST(5,5) … ? 0 ≠ 0 dan ~ > ~ … → FALSE dan FALSE → FALSE k = 6

NEAR(6) ≠ 0 dan COST(6,NEAR(6)) > COST(6,5) … ? 0 ≠ 0 dan ~ > 55 … → FALSE dan TRUE → FALSE mincost ≥ ~ … ?

105 ≥ ~ … → FALSE

(11)

∴ terdapat sebuah pohon rentangan, yang mempunyai nilai minimal = 105 Berikut adalah bentuk pohon rentangan minimalnya :

Referensi

Dokumen terkait

Kompleksnya permasalahan yang dimiliki oleh anak tunaganda dalam menjalani kehidupan sehari-harinya dan harapan orang tua akan masa depan yang lebih baik pada anaknya

23 Tahun 2002 Tentang Perlindungan Anak (Studi Kasus Di Desa Urek-urek Kecamatan Gondanglegi Kabupaten Malang), Skripsi, Jurusan: Al-Ahwal al – Syakhsyiah,

Gerçek şu ki, Kadim Sümer ve Mısır’da boynuzlar sadece kötü tan- rıları değil, Hıristiyan Kilisesi tarafından Pagan inançlarının kökünü kurutmak için kullanılan pek

Abstrak—Tujuan penelitian ini adalah (1) Untuk mengimplementasikan Pengembangan E-modul Pada Mata Pelajaran Administrasi Jaringan Kelas XII Teknik Jaringan dan

Hasil penelitian ini menunjukkan bahwa: Korporasi dapat dikenakan sebagai pelaku turut serta atau penyertaan terhadap perbuatan organ-organ yang ada didalamnya,

Melakukan pre test untuk menentukan subjek penelitian dan diperoleh 13 siswa dari 31 siswa kelas VIII A SMP N 3 Muntilan yang tingkat perilaku konsumtifnya berada dalam

Menyetujui skripsi / karya ilmiah saya dengan judul “ ANALISIS PENYEBAB DEFECT PADA DIVISI PRINTING DENGAN METODE FAILURE MODE AND EFFECT ANALYSIS DAN FAULT TREE

Jotta liiketoimintasiirto olisi veroneutraali, se tulee tehdä kansallisissa tilanteissa EVL 52 d §:n ja kansainvälisissä tilanteissa EVL 52 e §:n sääntelyn mukaisesti. EVL