Varian dari masalah ransel

11

Bagaimana Anda mendekati masalah ransel dalam situasi pemrograman dinamis jika sekarang Anda harus membatasi jumlah item dalam ransel dengan konstan ? Ini adalah masalah yang sama (berat maks W , setiap item memiliki nilai v dan bobot w ) tetapi Anda hanya dapat menambahkan item p ke ransel dan jelas perlu mengoptimalkan nilai ransel.pWvwp

Apakah kita memerlukan dimensi ke-3 atau kita dapat menemukan pendekatan lain tanpa itu. Saya mencoba untuk menambahkan jumlah item dalam ransel di dalam sel dan mengambil nilai maksimum di bagian akhir dengan jumlah item <= tetapi itu bukan solusi TERBAIK.p

pengguna11536
sumber
Ini adalah pekerjaan rumah yang bagus. Apa yang sudah kamu coba? Apakah Anda nyaman melakukan pemrograman dinamis? (Jika tidak, mungkin coba beberapa latihan untuk berlatih dengannya). Sudahkah Anda mempelajari algoritma pemrograman dinamis standar untuk masalah ransel? Cari cara untuk memodifikasi pendekatan standar itu. Tugas utama Anda adalah merancang apa set subproblem seharusnya. Dalam pendekatan standar, subproblem dicirikan oleh satu parameter (terikat pada berat item). Anda mungkin mempertimbangkan untuk menggunakan dua parameter (jadi satu set sub-masalah yang lebih besar). Coba berbagai kemungkinan - apa yang Anda dapatkan?
DW

Jawaban:

9

Pertanyaan yang sangat bagus!

Anda dua kali benar:

  1. Menyebarkan jumlah item dalam ransel tidak menghasilkan solusi optimal.
  2. Satu solusi terdiri dari menambahkan dimensi ketiga. Ini agak sederhana tetapi perlu mempertimbangkan beberapa fakta saat melakukannya. Namun perlu dicatat bahwa ini bukan satu-satunya alternatif

Berikut ini, saya berasumsi bahwa Anda terbiasa dengan solusi berbasis pemrograman dinamis. Secara khusus, saya tidak akan membahas cara melintasi tabel mundur untuk menentukan solusinya .

TTi,jij

Ti,j=max{Ti,j1,Tiwj,j1+vj}

wjvjjCNTC,N

p

  1. Ti,j1<(Tiwj,j1+vj)Ti,j=(Tiwj,j1+vj)jpp
  2. Ti,j1>(Tiwj,j1+vj)Ti,j=Ti,j1Ti,j1p(j1)j(p1)(j1)

Ti,j,kijk

  • Ti,j,kjkkTi,j,k=max{Ti,j1,k,Tiwj,j1,k+vj}
  • Ti,j,kj>kTi,j,k=max{Ti,j1,k,Tiwj,j1,k1+vj}

(k1)T(k1)(j1)

Ti,j,kkk(k1)k=4

(k1)(j1)Ti,j1,k1maxp=0,j1{Ti,p}k(j1)k

Semoga ini membantu,

Carlos Linares López
sumber
Respon yang sangat bagus, terima kasih. Saya sudah bisa melewatinya sebelum posting Anda dengan juga menerapkan dimensi ke-3.
user11536
Aduh, terima kasih banyak sudah menutup pertanyaan dan senang mendengar bahwa Anda menyukai jawabannya. Untuk memperjelas ide-ide saya, saya juga mencoba implementasi algoritma ini dengan Python. Jika Anda tertarik untuk melihatnya, beri tahu saya dan saya akan dengan senang hati mengirimkannya (atau mengirimkannya kepada Anda). Cheers,
Carlos Linares López
Penjelasan menakjubkan tentang masalah ransel multidimensi. Namun saya bertanya-tanya apakah kami memiliki kasus serupa tetapi dengan elemen k yang tepat, kami hanya akan melihat nilai yang dikembalikan oleh kolom k dari dimensi ke-3. Jika tidak ada nilai di sana, maka kembalikan 0.I Saya tidak yakin apakah saya benar karena saya masih baru dalam pemrograman dinamis.
SteveIrwin
@ CarlosLinaresLópez jawaban yang bagus. Bisakah Anda berbagi skrip python juga? Mungkin mempostingnya di gist.github.com?
Saad Malik
1
Hai @Carlos! Saya memposting pertanyaan tindak lanjut untuk menggunakan formula alternatif Anda di sini: Menemukan item terbaik di Knapsack 0/1 . Pokoknya saya harap Anda menikmati liburan Anda!
Saad Malik