10
2.4 Pemrograman Dinamis
Pemrograman Dinamis adalah metode pemecahan masalah dengan cara menguraikan masalah menjadi sekumpulan langkah atau tahapan sedemikian
sehingga solusi dari persoalan dapat dipandang dari serangkaian keputusan yang saling berkaitan [7]. Pada pemrograman dinamis, rangkaian keputusan yang
optimal dibuat dengan menggunakan prinsip optimalitas. Prinsip optimalitas yaitu, suatu kebijakan optimal mempunyai sifat bahwa apapun keadaan dan keputusan
awal, keputusan selanjutnya harus membentuk suatu kebijakan optimal yang berkaitan dengan keadaan yang dihasilkan dari keputusan awal
[1]. Dengan prinsip optimalitas ini dijamin bahwa pengambilan keputusan pada suatu tahap
adalah keputusan yang benar untuk tahap-tahap selanjutnya [7]. Ada dua pendekatan dalam penyelesaian masalah dengan pemrograman
dinamis yaitu maju dan mundur. Misalkan x
1
, x
2
, …, x
n
menyatakan peubah keputusan yang harus dibuat masing-
masing untuk tahap 1, 2, …, n. Maka [7], 1. Pendekatan Maju
Pemrograman dinamis maju bekerja mulai dari tahap 1, terus maju ke tahap 2, 3, dan seterusnya sampai tahap n. Runtunan peubah keputusan adalah x
1
, x
2
, …,x
n
. 2. Pendekatan Mundur
Pemrograman dinamis mundur bekerja mulai dari tahap n, terus mundur ke tahap n
– 1, n – 2, dan seterusnya sampai tahap 1. Runtunan peubah keputusan adalah x
n
, x
n -1
, …, x
1
.
11 Contoh penerapan pemrograman dinamis pada permasalahan lintasan
terpendek, tentukan lintasan terpendek dari Jakarta ke Tasikmalaya dari Gambar 2.6.
Jakarta Bekasi
Depok
Bogor Sukabumi
Karawang
Cianjur Purwakarta
Tasikmalaya Bandung
Sumedang
Garut
49 32
61 68
50 86
41 24
54 65
80 24
60 41
1 2
3 4
5 6
95
Gambar 2.6 Contoh Permasalahan Lintasan Terpendek
Misalkan x
1
, x
2
, .., x
6
= x
k
adalah simpul-simpul yang dikunjungi pada tahap k k = 1, 2, 3, 4, 5, 6 dengan k adalah banyaknya tahap. Berikut adalah rumusan
pemrograman dinamis pada permasalahan lintasan terpendek ini [7]: 1. Pendekatan Maju
f
k
s = f
k
s = {f
k
x
k
,s }, dengan f
k
x
k
, s =
+ f
k-1
x
k
2. Pendekatan Mundur f
k
s = f
k
s = {f
k
s, x
k
} , dengan f
k
s, x
k
= + f
k+1
x
k
Keterangan: s
: simpul-simpul pada setiap tahap disebut status. : label sisi dari s ke x
k .
f
k
s, x
k
: total label lintasan dari s ke x
k.
f
k
s : nilai minimum dari f
k
s, x
k
.
12 Maka penyelesaian masalah pada contoh diatas adalah sebagai berikut:
1. Penyelesaian Dengan Pendekatan Maju a. Tahap 1 : f
1
s =
Tabel 2.1
Tahap 1
s Solusi Optimum
f
1
s x
1
Bekasi 41
Jakarta Depok
24 Jakarta
Bogor 54
Jakarta b. Tahap 2 : f
2
s = {
+ f
1
x
2
}
Tabel 2.2
Tahap 2
x
2
s f
2
x
2
, s = +
f
1
x
2
Solusi Optimum Bekasi Depok Bogor
f
2
s x
2
Karawang 65
104 149
65 Bekasi
Sukabumi -
- 119
119 Bogor
c. Tahap 3 : f
3
s = {
+ f
2
x
3
}
Tabel 2.3 Tahap 3
x
3
s f
3
x
3
, s = +
f
2
x
3
Solusi Optimum Karawang Sukabumi
f
3
s x
3
Purwakarta 106
- 106 Karawang
Cianjur -
151 151 Sukabumi
d. Tahap 4 : f
4
s = {
+ f
3
x
4
}
Tabel 2.4
Tahap 4
x
4
s f
4
x
4
, s = + f
3
x
4
Solusi Optimum Purwakarta Cianjur
f
4
s x
4
Bandung 166
212 166 Purwakarta
e. Tahap 5 : f
5
s = {
+ f
4
x
5
}
Tabel 2.5 Tahap 5
x
5
s f
5
x
5
, s = + f
4
x
5
Solusi Optimum Bandung
f
5
s x
5
Sumedang 216
216 Bandung
Garut 234
234 Bandung
13 f. Tahap 6 : f
6
s = {
+ f
5
x