Contoh Laporan Dynamic Programming
Contoh Laporan Dynamic Programming
ANALISIS ALGORITMA
“DYNAMIC PROGRAMMING”
Disusun Oleh :
Agung Eka Lukmantara
(10113319)
Analgo - 4
Dosen :
Angga Setiyadi, S.Kom
Puji syukur kami panjatkan kepada Allah SWT. Yang telah melimpahkan
rahmat dan hidayah-Nya, serta dengan do’a restu kedua orang tua, sehingga
Laporan ini merupakan salah satu tugas pada mata kuliah “Analisis
Penulis sadar bahwa laporan ini masih sangar kurang dari apa yang
dimanfaatkan bagi semua pihak, dan untuk kesempurnaan laporan ini bersedia
Penulis
DAFTAR ISI
KATA PENGANTAR.....................................................................................................2
DAFTAR ISI ..................................................................................................................3
BAB I .............................................................................................................................4
1.1. Latar Belakang Masalah.......................................................................................4
1.2. Maksud dan Tujuan .............................................................................................4
1.3. Batasan Masalah ..................................................................................................5
BAB II ............................................................................................................................6
2.1. Definisi Strategi Dynamic Programming .............................................................6
2.2. Kekurangan dan Kelebihan Strategi Dynamic Programming .............................. 10
2.2.1. Kelebihan Dynamic Programming ................................................................ 10
2.2.2. Kekurangan Dynamic Programming ............................................................. 10
2.3. Multistage Graph Problem (Permasalah Mencari Lintasan Terpendek) ............. 11
2.4. Study Kasus Dynamic Programming ................................................................. 13
2.4.1. Knapsack Problem (Pendekatan Dynamic Programming).............................. 13
2.4.2. Coin Cange Problem ..................................................................................... 16
2.4.3. Traveling Salesman Problem ......................................................................... 16
BAB III ......................................................................................................................... 19
3.1. Algoritma .......................................................................................................... 19
3.1.1. Algoritma Knapsack Problem ........................................................................ 19
3.1.2. Algoritma Coin Change Problem .................................................................. 21
3.1.3. Algoritma Traveling Salesman Problem ......................................................... 22
3.2. Program............................................................................................................. 24
1.1.1. Program Knapsack Problem ........................................................................... 24
1.1.2. Program coin Change Problem ...................................................................... 26
1.1.3. Program Traveling Salesman Problem ........................................................... 27
BAB IV ........................................................................................................................ 29
4.1. Kesimpulan ....................................................................................................... 29
4.2. Saran ................................................................................................................. 29
DAFTAR PUSTAKA ................................................................................................... 31
BAB I
PENDAHULUAN
solusi agar masalah tersebut terselesaikan dengan baik. Setiap masalah apapun
Programming”.
yang saling berkaitan. Dalam hal ini program dinamis menyediakan prosedur
3. Bekerja mundur dari tahap terakhir, dan memecahkan tiap tahap. Hal ini
terpecahkan.
BAB II
DYNAMIC PROGRAMMING
diuraikan menjadi sub-sub masalah yang lebih kecil yang terkait satu sama lain
dan lebih spesifik, umumnya dideskripsikan dengan suatu sistem notasi. Struktur
dan simbol yan digunakan dalam model dynamic programming adalah beragam,
i = Tahap keputusan ke - i.
untuk memecahkan masalah dimana solusi optimal dari masalah tersebut dapat
memiliki nilai masing-masing. Dan ingin ditemukan solusi dengan nilai yang
sebagai berikut :
menemukan solusi untuk suatu problem, langkah ke-4 dapat dilakukan jika nilai
beberapa prinsip dasar yang terkait erat satu sama lain. Prinsip-prinsip dasar
tersebut, yaitu :
masalah dapat dibagi menjadi bagian-bagian masalah yang lebih kecil. Masalah
yang lebih kecil atau sub masalah ini tersebut sebagai tahap keputusan (stage).
mendapatkan keputusan optimal dari tiap-tiap tahap yang pada akhirnya akan
menghasilkan satu keputusan yang optimal. Oleh karena itu model Dynamic
programming disebut juga model multi stage programming (model multi tahap).
informasi dari suatu tahap ke tahap berikutnya. Arus informasi yang masuk ke
suatu tahap disebut status input, sedangkan arus informasi yang keluar dari suatu
tahap diseebut stats output. Status input penting, karena keputusan pada tahap
berikutnya tergantung dari status input sebelumnya. Jadi, status input untuk tahap
keputusan n-1 merupakan status output dari tahap keputusan sebelumnya, yaitu
tahap keputusan n. Sedangkan status output dari tahao keputusan n akan menjadi
status input untuk tahap kepututsan berikutnya, yaitu tahap keputusan n-1.
dainyatakan dalam berbagai bentuk keputusan alternatif yang dapat dipilih pada
yang dapat diambil dalam setiap tahap keputusan dapat dibatasi dengan sejumlah
bagaimana hubungan antara tahap keputusan yang satu dengan tahap keputusan
dengan thap keputusan n-1 maka perhitungan untuk nilai status n-1 menggunakan
dan seni untuk merumuskan suatu masalah yang kompleks, terutama yang
berkaitan dengan penetapan fungsi transformasi dari permasalahan
tersebut.
tertentu.
Penentuan rute terpendek dari satu titik ke titik yang lain adalah masalah yang
berbeda, contohnya seorang pengemudi yang mencari jalur terpendek dari tempat
asal ke tempat tujuan, pengantar pesanan makanan cepat saji yang juga mencari
jalur terpendek dari tempat asal ke tempat tujuan, dan juga seorang desainer
jaringan komputer yang harus mendesain skema perutean pada jaringan yang dia
tangani agar memaksimalkan performa jaringan dan meminimalkan beban yang
(multistage graph) dan algoritma efisien yang tersedia untuk menghitung rute
lintasan jarak dan waktu. Perumusan persoalan ini akan menjadi salah satu
kegunaan dari rute jarak terpendek. Algoritma yang digunakan untuk menentukan
Programming. Seiring dengan waktu yang berjalan dan juga perkembangan ilmu
Programming.
optimalitas. Prinsip optimalitas yaitu jika solusi total optimal, maka bagian solusi
sampai tahap ke-k juga optimal. Prinsip optimalitas berarti bahwa jika kita bekerja
dari tahap k ke tahap k + 1, kita dapat menggunakan hasil optimal dari tahap k
sesuatu. Dan tentunya tidak semua objek dapat ditampung di dalam karung
tersebut, hanya menampung barang yang pentingnya saja. Karung tersebut hanya
dapat menyimpan beberapa objek dengan total ukurannya (weight) lebih kecil atau
sama dengan ukuran kapasitas karung. Setiap objek itupun tidak harus kita
semua atau tidak sama sekali atau setiap barang hanya tersedia satu unit.
Setiap barang tersedia lebih dari satu unit dan juga jumlahnya tak terbatas.
Brute Force. Tapi strategi ini tidak efisien, jadi knapsack problem pada laporan ini
akan diselesaikan dengan Greedy Algorithm yaitu solusi yang mencari nilai
setiap langkah:
Mengambil pilihan terbaik yang bisa diperoleh saat itu juga tanpa
memperatikan konsekuensi kedepan (prinsip “take what you can get now!”).
Berharap bahwa dengan memilih optimum lokal pada setiap langkah akan
Contoh Permasalah :
Solusi Optimum
0 0 - 0 (0, 0, 0)
1 0 - 0 (0, 0, 0)
2 0 65 65 (1, 0, 0)
3 0 65 65 (1, 0, 0)
4 0 65 65 (1, 0, 0)
5 0 65 65 (1, 0, 0)
f2(y) = max{f1(y), p2 + f1(y – w2)}
Solusi Optimum
0 0 80 + (-) = - 0 (0, 0, 0)
1 0 80 + (-) = - 0 (0, 0, 0)
2 65 80 + (-) = - 65 (1, 0, 0)
3 65 80 + 0 = 80 80 (0, 1, 0)
4 65 80 + 0 = 80 80 (0, 1, 0)
Solusi Optimum
0 0 30 + (-) = - 0 (0, 0, 0)
1 0 30 + (-) = - 0 (0, 0, 0)
2 65 30 + 0 = 30 65 (1, 0, 0)
3 80 30 + 65 = 95 95 (1, 0, 1)
Coin change problem adalah proses di mana menukarkan kepala coin yang
muncul dengan tailnya, atau kasus yang lebih mudahnya adalah kasus
penukaran mata uang rupiah ke dollar , dimana jumlah nominal dalam rupiah
akan di kalikan dengan angka(dollar) yang user ingin kan. Dengan adanya
TSP atau Traveling Salesman Problem adalah salah satu masalah distribusi
yang cukup lama dibahas dalam kajian optimasi. Masalahnya adalah bagaimana
seorang salesman mengunjungi seluruh kota di suatu daerah dan kembali ke kota
awal keberangkatan dengan aturan bahwa tidak boleh ada kota yang dikunjungi
1. Perjalanan dimulai dan diakhiri di kota yang sama sebagai kota asal sales.
terkunjungi.
kota.
Perhatikan contoh berikut:
untuk mengunjungi seluruh kota yaitu kota A sampai kota F. Perhatikan gambar
berikut.
Dari study kasus tersebut didapatkan salah satu kemungkinan jalur yang
paling optimum dengan jalur urutan kota di mulai dari kota A, di lanjutkan
Algoritma :
Output<<" Knapsack dengan Dynamic programming";
Output<<" Berapabanyak item yang andaperlukan : ";
Input>>n;
Output<<"masukkan kapasitas ";
Input>>c;
Output<<"masukkan "<<n<<" items:";
For(i=1;i<=n;i++)
Output<<"\nitemke-"<<i<<" Berat:";
Input>>w[i];
Output<<"\nmasukkan profit/value"<<i<<" :";
Input>>v[i];
endfor
endprocedure
Algoritma :
For i:= 0 to n do
d[i][0]=0;
For j:= 1 to c do
d[0][j]=0;
For(i=1;i<=n;i++)
{
For(j=1;j<=c;j++)
{
if((j-w[i])<0)
then
d[i][j]=d[i-1][j];
else
d[i][j]=max(d[i-1][j],v[i]+(d[i-1][j-w[i]]));
endif
endfor
endfor
endprocedure
Procedure knapsack::output(Input n,i,j,d,c:integer)
Deklarasi :
Algoritma :
Output<<"Nilaiperhitungantertinggiuntuk "<< n <<" items:"<<endl;
For(i=0;i<=n;i++)
For(j=0;j<=c;j++)
Output<<d[i][j];
endfor
endfor
endprocedure
Algortima :
knapsack k;
k.input(Output n,c:integer; Input i:integer );
k.knap(Input i,n,c,j,d,w:integer);
k.output(Input n,i,j,d,c:integer);
3.1.2. Algoritma Coin Change Problem
{Algoritma Utama}
Deklarasi :
jumlah ,d,size,ans,k :integer;
s,C:^integer
Function CoinChangeDynamic(input jumlah, d[], size, C[], s[] : Integer) →integer
Algoritma :
d[] = 1, 5, 10, 25, 50, 100,500,1000;
Output<<"Masukan Jumlah Nilai Koin = ";cin>>jumlah;
size = sizeof(d)/sizeof(d[0]);
C^ = new int[jumlah+1];
s^ = new int[jumlah+1];
ans = CoinChangeDynamic(jumlah, d, size, C, s);
Ouput<< "Minimal Koin = " << ans << endl;
Algoritma :
Output("Enter No. of Cities: ");
Input(n);
Output("Enter Cost Matrix : ");
For i:= i to n do
Output(" Enter Elements of Row # : ",i+1);
For j:= j to n do
Input(a[i][j]);
visited[i]=0;
endfor
endfor
Output("The cost list is: ");
For( i=0;i<n;i++)
For( j=0;j<n;j++)
Output(a[i][j]);
Endfor
endfor
endprocedure
Output(city+1,"%–>");
ncity= least(city);
if(ncity==999)
then
ncity=0;
Output("%d",ncity+1);
cost+=a[city][ncity];
return;
endif
mincost(ncity);
endprocedure
Algoritma :
Output("nMinimum cost: ");
Output(cost);
endprocedure
{Algortima utama}
Deklarasi :
a[10][10],visited[10],n,cost=0:integer;
i,j:integer;
Procedure get(output n,a:integer )
Function least(input c:integer)→integer
Procedure mincost(input visited:integer;)
Procedure put(input cost:integer)
Algoritma :
Procedure get(output n,a:integer )
Output("\n\nThe Path is:\n\n");
mincost(0);
put();
3.2. Program
3.2.1. Program Knapsack Problem
#include <iostream>
#include <conio.h>
#include <stdlib.h>
void knapsack::input()
{
cout<<"Knapsack dengan Dynamic programming"<< endl;
cout << endl;
cout<<"Berapa banyak item yang anda perlukan : ";
cin>>n;
cout<<"Masukkan kapasitas : ";
cin>>c;
cout<<"Masukkan "<<n<<" items:";
for(i=1;i<=n;i++)
{
cout<<"\nitem ke-"<<i<<" Berat:";
cin>>w[i];
cout<<"\nmasukkan Profit/Value "<<i<<" :";
cin>>v[i];
}
}
void knapsack::knap()
{
for(i=0;i<=n;i++)
d[i][0]=0;
for(j=1;j<=c;j++)
d[0][j]=0;
for(i=1;i<=n;i++)
{
for(j=1;j<=c;j++)
{
if((j-w[i])<0)
d[i][j]=d[i-1][j];
else
{
d[i][j]=max(d[i-1][j],v[i]+(d[i-1][j-w[i]]));
}
}
}
}
void knapsack::output()
{
cout << endl;
cout<<"Nilai perhitungan tertinggi untuk "<< n <<" items:"<<endl;
for(i=0;i<=n;i++)
{
for(j=0;j<=c;j++)
{
cout<<"\t"<<d[i][j];
}
cout<<endl;
}
}
int knapsack::max(int a,int b)
{
if(a>b)
return a;
else
return b;
}
int main()
{
//system("cls");
knapsack k;
k.input();
k.knap();
k.output();
getch();
}
3.2.2. Program coin Change Problem
#include <iostream>
#include <limits.h>
int CoinChangeDynamic(int jumlah, int d[], int size, int C[], int s[])
{
C[0] = 0;
for(int j = 1; j <= jumlah; j++) {
C[j] = INT_MAX;
for(int i = 0; i < size; i++) {
if(j >= d[i] && 1 + C[j-d[i]] < C[j] ) {
C[j] = 1 + C[j-d[i]];
int main()
{
int d[] = {1, 5, 10, 25, 50, 100,500,1000};
int jumlah ;//= 67;
cout <<"Masukan Jumlah Nilai Koin = ";cin >>jumlah;
int size = sizeof(d)/sizeof(d[0]);
int *C = new int[jumlah+1];
int *s = new int[jumlah+1];
int ans = CoinChangeDynamic(jumlah, d, size, C, s);
cout << "Minimal Koin = " << ans << endl;
delete[] C;
delete[] s;
return 0;
}
3.2.3. Program Traveling Salesman Problem
#include<stdio.h>
#include <stdlib.h>
#include<conio.h>
using namespace std;
int a[10][10],visited[10],n,cost=0;
void get()
{
int i,j;
printf("Enter No. of Cities: ");
scanf("%d",&n);
printf("\nEnter Cost Matrix: \n");
for( i=0;i<n;i++)
{
printf("\n Enter Elements of Row # : %d\n",i+1);
for( j=0;j<n;j++)
scanf("%d",&a[i][j]);
visited[i]=0;
}
printf("\n\nThe cost list is:\n\n");
for( i=0;i<n;i++)
{
printf("\n\n");
for( j=0;j<n;j++)
printf("\t%d",a[i][j]);
}
}
int least(int c)
{
int i,nc=999;
int min=999,kmin;
for(i=0;i<n;i++)
{
if((a[c][i]!=0)&&(visited[i]==0))
if(a[c][i]<min)
{
min=a[i][0]+a[c][i];
kmin=a[c][i];
nc=i;
}
}
if(min!=999)
cost+=kmin;
return nc;
}
4.1. Kesimpulan
Pemrograman dinamis merupakan suatu teknik analisa kuantitatif untuk
optimal.
keputusan, dimana hasil keputusan dari satu tahap akan mempengaruhi keputusan
diuraikan menjadi sub-sub masalah yang lebih kecil yang terkait satu sama lain
4.2. Saran
Menurut penulis, dengan menggunakan metode dynamic programming
menggunakan metode ini permasalah yang dianggap rumit pun dapat terselesaikan
dengan banyak solusi. Misalkan, solusi knapsack problem, solusi coin change
problem, dan traveling salesman problem. Solusi tersebut sudah sangat membantu
menjadi sub-sub masalah yang lebih kecil dan membuat sumber permasalahan
dalam rangkaian proses masalah tersebut menjadi lebih jelas untuk diketahui.
Programming cenderung lebih fleksibel dari pada teknik optimasi lain. Prosedur
sensitivitas terdapat pada setiap variabel status maupun pada variabel yang ada
http://mohamadrisalrozakamakali.blogspot.com/2013/05/program-dinamis-dynamic-
programming.html
http://web.unair.ac.id/admin/file/f_12649_paper_dynamic_programming.pdf
http://fileex.blogspot.com/2013/10/skripsi-perancangan-simulasi-dynamic.html
http://repo.eepis-its.edu/718/1/1026.pdf
https://icomit.wordpress.com/2012/06/02/traveling-salesman-problem-tsp-dalam-
definisi/
Dian Perdhana Putra – 13507096, Teknik Informatika ITB. Jl. Ganesha 10 Bandung.
e-mail: if17096@students.if.itb.ac.id