Lompat ke isi

Pemrograman dinamis: Perbedaan antara revisi

Dari Wikipedia bahasa Indonesia, ensiklopedia bebas
Konten dihapus Konten ditambahkan
Still need veritification and progress
Tag: Dikembalikan VisualEditor
Baris 3: Baris 3:
'''Pemrograman dinamis''' ({{lang-en|dynamic programming}}) adalah metode [[pengoptimalan matematika]] dan metode pemrograman komputer. Metode ini dikembangkan oleh [[Richard Bellman]] pada 1950-an dan telah digunakan di berbagai bidang, mulai dari [[teknik kedirgantaraan]] hingga [[ekonomi]].
'''Pemrograman dinamis''' ({{lang-en|dynamic programming}}) adalah metode [[pengoptimalan matematika]] dan metode pemrograman komputer. Metode ini dikembangkan oleh [[Richard Bellman]] pada 1950-an dan telah digunakan di berbagai bidang, mulai dari [[teknik kedirgantaraan]] hingga [[ekonomi]].


Dalam kedua konteks ini mengacu pada penyederhanaan masalah yang rumit dengan memecahnya menjadi sub-masalah yang lebih sederhana secara [[Pengulangan|rekursif]]. Meskipun beberapa masalah keputusan tidak dapat dipisahkan dengan cara ini, keputusan yang mencakup beberapa titik waktu sering kali pecah secara rekursif. Begitu pula dalam ilmu komputer, jika suatu masalah dapat diselesaikan secara optimal dengan memecahnya menjadi sub-sub masalah dan kemudian secara rekursif mencari solusi optimal untuk sub masalah tersebut, maka dikatakan memiliki [[Substruktur optimal|substruktur yang optimal]].
Dalam kedua konteks ini mengacu pada penyederhanaan masalah yang rumit dengan memecahnya menjadi sub-masalah yang lebih sederhana secara [[Rekursi|rekursif]]. Meskipun beberapa masalah keputusan tidak dapat dipisahkan dengan cara ini, keputusan yang mencakup beberapa titik waktu sering kali pecah secara rekursif. Begitu pula dalam ilmu komputer, jika suatu masalah dapat diselesaikan secara optimal dengan memecahnya menjadi sub-sub masalah dan kemudian secara rekursif mencari solusi optimal untuk sub masalah tersebut, maka dikatakan memiliki [[Substruktur optimal|substruktur yang optimal]].


Jika sub-masalah dapat disarangkan secara rekursif di dalam masalah yang lebih besar, sehingga metode pemrograman dinamis dapat diterapkan, maka ada hubungan antara nilai masalah yang lebih besar dengan nilai-nilai sub-masalah tersebut.<ref name=":0">Cormen, T. H.; Leiserson, C. E.; Rivest, R. L.; Stein, C. (2001), Introduction to Algorithms (2nd ed.), MIT Press & McGraw–Hill, {{ISBN|0-262-03293-7}} . pp. 344.</ref> Dalam literatur optimasi, hubungan ini disebut [[persamaan Bellman]].
Jika sub-masalah dapat disarangkan secara rekursif di dalam masalah yang lebih besar, sehingga metode pemrograman dinamis dapat diterapkan, maka ada hubungan antara nilai masalah yang lebih besar dengan nilai-nilai sub-masalah tersebut.<ref name=":0">Cormen, T. H.; Leiserson, C. E.; Rivest, R. L.; Stein, C. (2001), Introduction to Algorithms (2nd ed.), MIT Press & McGraw–Hill, {{ISBN|0-262-03293-7}} . pp. 344.</ref> Dalam literatur optimasi, hubungan ini disebut [[persamaan Bellman]].
Baris 9: Baris 9:
== Gambaran ==
== Gambaran ==
=== Pengoptimalan matematika ===
=== Pengoptimalan matematika ===
Dalam hal optimasi matematis, pemrograman dinamis biasanya mengacu pada penyederhanaan keputusan dengan memecahnya menjadi urutan langkah-langkah keputusan dari waktu ke waktu. Ini dilakukan dengan mendefinisikan urutan '''fungsi nilai''' ''V''<sub>1</sub>, ''V''<sub>2</sub>, ..., ''V<sub>n</sub>'' mengambil ''y'' sebagai argumen yang mewakili [[Keadaan variabel|'''keadaan''']] sistem pada waktu ''i'' dari 1 sampai ''n''. Definisi ''V<sub>n</sub>''(''y'') adalah nilai yang diperoleh di keadaan ''y'' terakhir kali ''n''. Nilai ''V<sub>i</sub>'' di waktu sebelumnya ''i''&nbsp;=&nbsp;''n''&nbsp;&#x2212;1,&nbsp;''n''&nbsp;&#x2212;&nbsp;2,&nbsp;...,&nbsp;2,&nbsp;1 dapat ditemukan dengan bekerja mundur, menggunakan hubungan [[rekursif]] yang disebut [[persamaan Bellman]]. untuk ''i''&nbsp;=&nbsp;2,&nbsp;...,&nbsp;''n'', ''V<sub>i</sub>''<sub>&#x2212;1</sub> di setiap keadaan ''y'' dihitung dari ''V<sub>i</sub>'' dengan memaksimalkan fungsi sederhana (biasanya jumlah) keuntungan dari keputusan pada saat itu ''i''&nbsp;&#x2212;&nbsp;1 dan fungsi ''V<sub>i</sub>'' di keadaan baru sistem jika keputusan ini dibuat. Sejak ''V<sub>i</sub>'' telah dihitung untuk keadaan yang diperlukan, hasil operasi di atas ''V<sub>i</sub>''<sub>&#x2212;1</sub> untuk keadaan tersebut. Akhirnya, ''V''<sub>1</sub> pada keadaan awal sistem adalah nilai solusi optimal. Nilai optimal dari variabel keputusan dapat dipulihkan, satu per satu, dengan melacak kembali perhitungan yang telah dilakukan.
Dalam hal optimasi matematis, pemrograman dinamis biasanya mengacu pada penyederhanaan keputusan dengan memecahnya menjadi urutan langkah-langkah keputusan dari waktu ke waktu. Ini dilakukan dengan mendefinisikan urutan '''fungsi nilai''' ''V''<sub>1</sub>, ''V''<sub>2</sub>, ..., ''V<sub>n</sub>'' mengambil ''y'' sebagai argumen yang mewakili [[Keadaan variabel|'''keadaan''']] sistem pada waktu ''i'' dari 1 sampai ''n''. Definisi ''V<sub>n</sub>''(''y'') adalah nilai yang diperoleh di keadaan ''y'' terakhir kali ''n''. Nilai ''V<sub>i</sub>'' di waktu sebelumnya ''i''&nbsp;=&nbsp;''n''&nbsp;&#x2212;1,&nbsp;''n''&nbsp;&#x2212;&nbsp;2,&nbsp;...,&nbsp;2,&nbsp;1 dapat ditemukan dengan bekerja mundur, menggunakan hubungan [[Rekursi|rekursif]] yang disebut [[persamaan Bellman]]. untuk ''i''&nbsp;=&nbsp;2,&nbsp;...,&nbsp;''n'', ''V<sub>i</sub>''<sub>&#x2212;1</sub> di setiap keadaan ''y'' dihitung dari ''V<sub>i</sub>'' dengan memaksimalkan fungsi sederhana (biasanya jumlah) keuntungan dari keputusan pada saat itu ''i''&nbsp;&#x2212;&nbsp;1 dan fungsi ''V<sub>i</sub>'' di keadaan baru sistem jika keputusan ini dibuat. Sejak ''V<sub>i</sub>'' telah dihitung untuk keadaan yang diperlukan, hasil operasi di atas ''V<sub>i</sub>''<sub>&#x2212;1</sub> untuk keadaan tersebut. Akhirnya, ''V''<sub>1</sub> pada keadaan awal sistem adalah nilai solusi optimal. Nilai optimal dari variabel keputusan dapat dipulihkan, satu per satu, dengan melacak kembali perhitungan yang telah dilakukan.


=== Teori kontrol ===
=== Teori kontrol ===
Baris 27: Baris 27:


Pada tahap <math>k</math> dari <math>n</math> interval waktu diskrit dengan jarak yang sama, dan dimana <math>\hat{f}</math> dan <math>\hat{g}</math> menunjukkan pendekatan diskrit untuk <math>f</math> dan <math>\mathbf{g}</math>. Persamaan fungsional ini dikenal sebagai [[persamaan Bellman]], yang dapat diselesaikan untuk solusi tepat dari pendekatan diskrit persamaan optimasi.<ref>{{cite book|last=Kirk|first=Donald E.|year=1970|url=https://books.google.com/books?id=fCh2SAtWIdwC&pg=PA94|title=Optimal Control Theory: An Introduction|location=Englewood Cliffs, NJ|publisher=Prentice-Hall|isbn=978-0-13-638098-6|pages=94–95}}</ref>
Pada tahap <math>k</math> dari <math>n</math> interval waktu diskrit dengan jarak yang sama, dan dimana <math>\hat{f}</math> dan <math>\hat{g}</math> menunjukkan pendekatan diskrit untuk <math>f</math> dan <math>\mathbf{g}</math>. Persamaan fungsional ini dikenal sebagai [[persamaan Bellman]], yang dapat diselesaikan untuk solusi tepat dari pendekatan diskrit persamaan optimasi.<ref>{{cite book|last=Kirk|first=Donald E.|year=1970|url=https://books.google.com/books?id=fCh2SAtWIdwC&pg=PA94|title=Optimal Control Theory: An Introduction|location=Englewood Cliffs, NJ|publisher=Prentice-Hall|isbn=978-0-13-638098-6|pages=94–95}}</ref>

=== Pemrograman komputer ===
Ada dua atribut utama yang harus dimiliki masalah agar pemrograman dinamis dapat diterapkan: [[Substruktur optimal|substruktur yang optimal]] dan [[Sub-masalah tumpang tindih|sub-masalah yang tumpang tindih]]. Jika suatu masalah dapat diselesaikan dengan menggabungkan solusi optimal untuk sub-masalah ''tidak tumpang tindih'', strateginya disebut "[[Algoritma Divide-and-conquer|divide and conquer]]".<ref name=":0" /> Inilah sebabnya mengapa [[merge sort]] dan [[Quicksort|quick sort]] tidak diklasifikasikan sebagai masalah pemrograman dinamis.

''Substruktur optimal'' berarti bahwa solusi untuk masalah pengoptimalan yang diberikan dapat diperoleh dengan kombinasi solusi optimal untuk sub-masalahnya. Substruktur optimal seperti itu biasanya dijelaskan melalui [[rekursi]]. Misalnya diberi grafik ''G=(V,E)'', jalur terpendek ''p'' dari sebuah vertex ''u'' ke sebuah vertrex ''v'' menunjukkan substruktur yang optimal: ambil perantara vertex ''w'' di jalur terpendek ini ''p''. Jika ''p'' benar-benar merupakan jalur terpendek, kemudian dapat dipecah menjadi sub-jalur ''p<sub>1</sub>'' dari ''u'' ke ''w'' dan ''p<sub>2</sub>'' dari ''w'' ke ''v'' sedemikian rupa sehingga ini, pada gilirannya, memang merupakan jalur terpendek antara simpul yang sesuai (dengan argumen potong-dan-tempel sederhana yang dijelaskan dalam ''[[Introduction to Algorithms]]''). Oleh karena itu, salah satu dapat dengan mudah merumuskan solusi untuk menemukan jalur terpendek secara rekursif, yang dilakukan oleh [[Algoritme Bellman-Ford|algoritma Bellman–Ford]] atau [[Algoritme Floyd-Warshall|algoritma Floyd–Warshall]].


== Referensi ==
== Referensi ==

Revisi per 16 Oktober 2020 03.47

Gambar 1. Menemukan jalur terpendek dalam grafik menggunakan substruktur optimal; garis lurus menunjukkan satu sisi; garis bergelombang menunjukkan jalur terpendek antara dua sudut yang terhubung (di antara jalur lain, tidak ditampilkan, berbagi dua sudut yang sama); garis tebal adalah jalur terpendek keseluruhan dari awal sampai tujuan.

Pemrograman dinamis (bahasa Inggris: dynamic programming) adalah metode pengoptimalan matematika dan metode pemrograman komputer. Metode ini dikembangkan oleh Richard Bellman pada 1950-an dan telah digunakan di berbagai bidang, mulai dari teknik kedirgantaraan hingga ekonomi.

Dalam kedua konteks ini mengacu pada penyederhanaan masalah yang rumit dengan memecahnya menjadi sub-masalah yang lebih sederhana secara rekursif. Meskipun beberapa masalah keputusan tidak dapat dipisahkan dengan cara ini, keputusan yang mencakup beberapa titik waktu sering kali pecah secara rekursif. Begitu pula dalam ilmu komputer, jika suatu masalah dapat diselesaikan secara optimal dengan memecahnya menjadi sub-sub masalah dan kemudian secara rekursif mencari solusi optimal untuk sub masalah tersebut, maka dikatakan memiliki substruktur yang optimal.

Jika sub-masalah dapat disarangkan secara rekursif di dalam masalah yang lebih besar, sehingga metode pemrograman dinamis dapat diterapkan, maka ada hubungan antara nilai masalah yang lebih besar dengan nilai-nilai sub-masalah tersebut.[1] Dalam literatur optimasi, hubungan ini disebut persamaan Bellman.

Gambaran

Pengoptimalan matematika

Dalam hal optimasi matematis, pemrograman dinamis biasanya mengacu pada penyederhanaan keputusan dengan memecahnya menjadi urutan langkah-langkah keputusan dari waktu ke waktu. Ini dilakukan dengan mendefinisikan urutan fungsi nilai V1, V2, ..., Vn mengambil y sebagai argumen yang mewakili keadaan sistem pada waktu i dari 1 sampai n. Definisi Vn(y) adalah nilai yang diperoleh di keadaan y terakhir kali n. Nilai Vi di waktu sebelumnya i = n −1, n − 2, ..., 2, 1 dapat ditemukan dengan bekerja mundur, menggunakan hubungan rekursif yang disebut persamaan Bellman. untuk i = 2, ..., n, Vi−1 di setiap keadaan y dihitung dari Vi dengan memaksimalkan fungsi sederhana (biasanya jumlah) keuntungan dari keputusan pada saat itu i − 1 dan fungsi Vi di keadaan baru sistem jika keputusan ini dibuat. Sejak Vi telah dihitung untuk keadaan yang diperlukan, hasil operasi di atas Vi−1 untuk keadaan tersebut. Akhirnya, V1 pada keadaan awal sistem adalah nilai solusi optimal. Nilai optimal dari variabel keputusan dapat dipulihkan, satu per satu, dengan melacak kembali perhitungan yang telah dilakukan.

Teori kontrol

Dalam teori kontrol, masalah tipikal adalah menemukan kontrol yang dapat diterima yang menyebabkan sistem untuk mengikuti lintasan yang bisa diterima pada interval waktu yang terus menerus yang meminimalkan biaya fungsi.

Solusi untuk masalah ini adalah pengendalian hukum atau kebijakan yang optimal , yang menghasilkan lintasan yang optimal dan sebuah fungsi fungsi cost-to-go . Yang terakhir mematuhi persamaan fundamental dari pemrograman dinamis:

persamaan diferensial parsial yang dikenal sebagai persamaan Hamilton-Jacobi-Bellman, di mana dan . Salah satu menemukan meminimalkan istilah dari , , dan fungsi yang tidak diketahui dan kemudian mensubstitusikan hasilnya ke dalam persamaan Hamilton – Jacobi – Bellman untuk mendapatkan persamaan diferensial parsial yang akan diselesaikan dengan kondisi batas .[2] Dalam praktiknya, ini umumnya memerlukan teknik numerik untuk beberapa pendekatan diskrit ke hubungan pengoptimalan yang tepat.

Atau, proses kontinu dapat didekati dengan sistem diskrit, yang mengarah ke analog relasi rekurensi berikut dengan persamaan Hamilton – Jacobi – Bellman:

Pada tahap dari interval waktu diskrit dengan jarak yang sama, dan dimana dan menunjukkan pendekatan diskrit untuk dan . Persamaan fungsional ini dikenal sebagai persamaan Bellman, yang dapat diselesaikan untuk solusi tepat dari pendekatan diskrit persamaan optimasi.[3]

Pemrograman komputer

Ada dua atribut utama yang harus dimiliki masalah agar pemrograman dinamis dapat diterapkan: substruktur yang optimal dan sub-masalah yang tumpang tindih. Jika suatu masalah dapat diselesaikan dengan menggabungkan solusi optimal untuk sub-masalah tidak tumpang tindih, strateginya disebut "divide and conquer".[1] Inilah sebabnya mengapa merge sort dan quick sort tidak diklasifikasikan sebagai masalah pemrograman dinamis.

Substruktur optimal berarti bahwa solusi untuk masalah pengoptimalan yang diberikan dapat diperoleh dengan kombinasi solusi optimal untuk sub-masalahnya. Substruktur optimal seperti itu biasanya dijelaskan melalui rekursi. Misalnya diberi grafik G=(V,E), jalur terpendek p dari sebuah vertex u ke sebuah vertrex v menunjukkan substruktur yang optimal: ambil perantara vertex w di jalur terpendek ini p. Jika p benar-benar merupakan jalur terpendek, kemudian dapat dipecah menjadi sub-jalur p1 dari u ke w dan p2 dari w ke v sedemikian rupa sehingga ini, pada gilirannya, memang merupakan jalur terpendek antara simpul yang sesuai (dengan argumen potong-dan-tempel sederhana yang dijelaskan dalam Introduction to Algorithms). Oleh karena itu, salah satu dapat dengan mudah merumuskan solusi untuk menemukan jalur terpendek secara rekursif, yang dilakukan oleh algoritma Bellman–Ford atau algoritma Floyd–Warshall.

Referensi

  1. ^ a b Cormen, T. H.; Leiserson, C. E.; Rivest, R. L.; Stein, C. (2001), Introduction to Algorithms (2nd ed.), MIT Press & McGraw–Hill, ISBN 0-262-03293-7 . pp. 344.
  2. ^ Kamien, M. I.; Schwartz, N. L. (1991). Dynamic Optimization: The Calculus of Variations and Optimal Control in Economics and Management (edisi ke-Second). New York: Elsevier. hlm. 261. ISBN 978-0-444-01609-6. 
  3. ^ Kirk, Donald E. (1970). Optimal Control Theory: An Introduction. Englewood Cliffs, NJ: Prentice-Hall. hlm. 94–95. ISBN 978-0-13-638098-6. 

Bacaan lanjutan

Pranala luar