Bagaimana mengatasi masalah pengaturan di Archive Nationale of France menggunakan teori grafik?

9

Selamat malam! Saya sebenarnya sedang magang di Archives Nationales of France dan saya menghadapi situasi yang ingin saya selesaikan menggunakan grafik ...

I. Situasi berdebu

Kami ingin mengoptimalkan pengaturan buku perpustakaan saya sesuai dengan ketinggiannya untuk meminimalkan biaya arsip mereka. Ketinggian dan ketebalan buku diketahui. Kami telah mengatur buku-buku dengan urutan ketinggian (Saya tidak tahu apakah itu yang terbaik tapi ... itulah cara kami melakukannya). Mengetahui ketebalan setiap buku, kita dapat menentukan untuk setiap kelas ketebalan yang diperlukan untuk pengaturannya, sebut saja L_i (misalnya, buku-buku yang H_i = 23 \, \ mathrm {cm} tinggi mungkin memiliki ketebalan total L_i = 300 \, \ mathrm {cm} ).H1,H2,,HnHiLiHi=23cmLi=300cm

Perpustakaan dapat membuat rak kustom, yang menunjukkan panjang dan tinggi yang diinginkan (tidak ada masalah dengan kedalaman). Satu rak tinggi Hi dan panjang xi berharga Fi+Cixi , di mana Fi adalah biaya tetap dan dan Ci adalah biaya rak per satuan panjang.

Perhatikan bahwa rak dengan ketinggian Hi dapat digunakan untuk menyimpan buku-buku dengan ketinggian Hj dengan ji . Kami ingin meminimalkan biaya.

Tutor saya menyarankan agar saya memodelkan masalah ini sebagai masalah pencarian jalur. Model ini mungkin melibatkan simpul yang diindeks dari hingga . Mentor saya menyarankan agar saya menentukan kondisi yang ada, masing-masing penandaan sisi dan cara menghitung valuasi terkait dengan edge . Saya juga akan OK dengan solusi lain serta wawasan.0 n v ( i , j ) ( i , j )n+10nv(i,j)(i,j)

Misalnya kita miliki untuk Konvensi (periode gelap dari Sejarah Prancis) seperti array:

i1234Hi12cm15cm18cm23cmLi100cm300cm200cm300cmFi1000120011001600Ci5/cm6/cm7/cm9/cm

II Asumsi kutu buku peserta pelatihan

Saya pikir saya harus menghitung algoritma antara Djikstra, Bellman atau Bellman-Kalaba ... Saya mencoba mencari tahu yang mana di subbagian berikut.

1.Kondisi

Kami di sini dengan masalah pathfinding antara simpul dan simpul , harus keluar dari (artinya, jalan (atau jalan) harus ada antara dann n 0 0 n0nn00n

2. Apa yang dihitung (diperbarui (25/10/2015))

// Bekerja masih dalam proses sejauh yang saya tidak tahu simpul mana dan ujung mana yang harus dimodelkan ...

Tebakan terbaik saya

Saya pikir kita menyingkirkan setidaknya satu jenis rak setiap kali kita menemukan jalur terpendek dari array, tetapi itu hanya asumsi saya ...;).

Saya pikir cara terbaik untuk memodelkan cara membeli rak dan menyimpan buku-buku kita harus terlihat seperti grafik berikut, (tapi, tolong, jangan ragu untuk mengkritik metode saya!;))

dari 0 grafik

sudut:

  • i[1,4] adalah rak yang bisa kita gunakan untuk menyimpan buku kita.
  • 0 adalah keadaan di mana tidak ada buku yang disimpan. Menggunakan vertice ini memungkinkan saya untuk menggunakan setiap formula biaya (tepi).

edge: adalah biaya menggunakan jenis rak. misalnya: 0 adalah biaya hanya menggunakan rak tipe 1 untuk menyimpan perkamen, naskah ...F 1 + C 1 x 1Fi+Cixi,i[1,4]F1+C1x1

Namun, dari sini saya tidak tahu cara membuat masalah jalur terpendek.

Memang, saya tidak akan tahu di mana saya menyimpan semua buku saya.

Ini menuntun saya ke ide lain ...

ide lain ...

ke 0 grafik

Di sini, saya sedang mencari jalur terpendek dari titik tertentu ke status 0, artinya, mengetahui bahwa dokumen tertinggi tinggi, saya sedang mencari cara termurah untuk mengatur dokumen saya.type i

sudut:

  • i[1,4] adalah rak yang bisa kita gunakan untuk menyimpan buku kita.
  • 0 adalah keadaan di mana semua buku disimpan. Menggunakan vertice ini memungkinkan saya untuk menggunakan setiap formula biaya (tepi).

edge: adalah biaya menggunakan jenis rak. misalnya: dari 3 adalah biaya menggunakan rak setelah menggunakan rak untuk menyimpan perkamen, manuskrip ...F 1 + C 1 x 1 t y p e 1 t y p e 3Fi+Cixi,i[1,4]F1+C1x1type 1type 3

Namun, saya tidak tahu di mana harus meletakkan .F4+C4x4

3.Cara menghitung

Saya pikir kita harus mulai dengan rak yang lebih tinggi sejauh kita dapat menyimpan buku-buku yang lebih kecil ...

Melakukan

Kami mengambil cm dengan tinggi di rak tinggi mereka + cm dari tinggi hingga menjadi lebih mahal daripada mengambil mengesampingkan. makaLnHi=nzHi=n1Hi=n1i=i1

Sementara saya> <0

Akhirnya, saya tidak tahu bagaimana membuat x ...

Artinya mengatakan bagaimana memilih untuk meletakkan dokumen dalam atau misalnya. 4 3xi43

Revolusi untuk Monica
sumber
Ada berapa buku? yaitu apakah hanya algoritma yang dapat diterima? O(n),O(nlogn)
jjohn
5
Saya tidak melihat apa hubungannya dengan grafik: mengapa memaksa diri Anda untuk melakukan sesuatu berbasis grafik ketika masalah yang dihadapi adalah sesuatu seperti bin-packing? Model Anda gagal memperhitungkan praktik rak. Misalnya, unit rak memiliki rak dengan panjang tertentu: Anda dapat menumpuk rak sepanjang lima meter, tetapi rak 99cm, rak 172cm, rak 128cm, rak 83cm, dan rak 18cm (panjang total) 5m) sama sekali tidak berguna. Dan, mengapa ada biaya € 2.500 untuk membangun rak setinggi 23cm? Tampaknya tidak realistis. Apakah perpustakaan ini asli?
David Richerby
3
1. Saya tidak mengerti mengapa Anda memaksakan diri Anda untuk mendekati ini sebagai masalah pencarian jalan. Jika Anda menghadapi situasi ini dalam praktiknya, tidak masuk akal untuk memaksakan batasan yang tidak perlu - mengapa Anda menolak solusi lain yang memecahkan masalah Anda menggunakan pendekatan yang berbeda? Saya sarankan Anda mengedit pertanyaan untuk menghapus persyaratan itu. 2. Anda masih belum memberi tahu kami berapa banyak buku yang ada. Bisakah Anda memberi kami nomor? Sesuatu yang lebih spesifik daripada "loooot", bahkan jika itu hanya perkiraan urutan-besarnya?
DW
1
Tampaknya Anda telah menghabiskan beberapa pemikiran tentang masalah Anda. Itu bagus! Namun, menyimpan sejarah lengkap pemikiran Anda dalam satu pertanyaan membuatnya agak sulit. SE bekerja jauh lebih baik jika Anda memposting satu pertanyaan terfokus dan hanya cukup latar belakang untuk membuat pertanyaan itu terjawab.
Raphael
1
Mengenai "Saya perlu mengungkapkannya sebagai masalah grafik" - itu ... persyaratan bodoh. Jika masalahnya ada di P, tulis itu sebagai LP dan hitung instance max-flow yang setara. Voila. Jika dalam NP tetapi Anda tidak tahu itu dalam P, tulis sebagai IP dan konversikan ke masalah grafik NP-complete. Voila.
Raphael

Jawaban:

5

Saya melihat Anda bertanya, "Saya ingin menyelesaikan ini dengan algoritma Dijkstra tetapi saya tidak dapat mengatur grafik yang baik untuk dijalankan," karena itu saya akan menyajikan grafik tersebut kepada Anda.

Sebuah digraf di mana simpul adalah set buku rak.

Oke, kami memiliki buku-buku dengan ketinggian dan lebar dengan ketinggian dalam urutan naik untuk setiap buku, dan kami ingin mengelompokkannya ke dalam rak.Hn, 1nNWn,

Reuse angka-angka ini untuk node solusi di mana simpul yang mewakili negara solusi "semua buku telah disimpan." Karena itu kita akan mulai dari node dan berusaha untuk mendapatkan ke simpul dengan jalur terpendek dengan algoritma Dijkstra. Node-node ini adalah simpul dari grafik kita.n,in0N

Kami kemudian menggambar dari simpul ke simpul mana pun tepi yang diarahkan yang mengasumsikan bahwa semua buku perantara tersebut akan disimpan dengan satu rak, yaitu panjang tepi ini adalah mana saya berasumsi bahwa ketika Anda mengatakan biaya penjumlahan adalah , subskrip pada sama sekali tidak berarti.ij>i

Lij=Fj+Cj n=i+1jWn,
Fi+Cixiixi

Algoritma Dijkstra kemudian akan memberi kita jalan terpendek ke simpulN.

CR Drost
sumber
@Christ Drost, thaaaaaaaaanks, banyak! Butuh waktu untuk memahami apa yang Anda coba buat tanpa grafik tetapi itulah yang saya cari! Saya membaca profil Anda yang luar biasa, cocok dengan jawaban Anda haha;)!
Revolusi untuk Monica
Saya bertanya-tanya apakah Bellman-Kalaba tidak lebih tepat daripada Djikstra, satu-satunya kebutuhan adalah tidak memiliki cicruit (dan kami tidak)
Revolusi untuk Monica
Dan ini juga merupakan algorthm yang mengatur panjang tepi secara pasti. "simpul n mewakili solusi yang menyatakan" semua buku yang telah disimpan. "" Kami juga tidak bisa mundur dengan apa yang Anda berikan.
Revolusi untuk Monica
Saya tidak yakin apa artinya "mundur", tetapi jika Anda ingin "mundur" Anda mungkin harus mempertimbangkan grafik yang lebih canggih di mana simpul adalah daftar "jumlah buku yang disimpan di rak ini," sebuah Intlebih besar dari 1. Ini mengarah ke grafik n^2simpul. Saat Anda mencari jalur antara A dan B dan semua bobot tepi positif, maka tidak ada perbedaan antara Dijkstra dan Bellman-Kalaba, kecuali Bellman-Kalaba selalu berusaha memperbarui tepi yang tidak perlu diperbarui; Dijkstra hanya menyimpan pointer ke simpul yang ia pedulikan.
CR Drost
7

Saya pikir saya punya solusi untuk masalah Anda. Mudah-mudahan saya tidak salah memahami sesuatu dalam definisi masalah Anda. Ini dia:

Saya akan menjelaskan pendekatan Pemrograman Dinamis. Ini adalah algoritma , yang berarti bahwa karena jumlah buku sangat besar, itu tidak akan banyak membantu Anda. (Anda perlu memodifikasinya sedikit!). Dengan beberapa pekerjaan, Anda dapat mengubah pendekatan Pemrograman Dinamis tersebut menjadi instance untuk menemukan jalur terpendek pada Grafik Acyclic yang Diarahkan. (Yang itu sendiri adalah algoritma pemrograman dinamis: P)O(n2)

Misalkan ada buku semua ketinggian berbeda.n

Misalkan juga bahwa biaya optimal dicapai dengan menempatkan buku-buku untuk shelfs tinggi mana .ih1,h2,...,hih1<h2<...<hi

Mari kita buktikan dua hal berikut:

A.Ca>Ca1

Misalkan sebaliknya. Biarkan menjadi set buku yang ditugaskan ke rak LaluBa1a1cost=other,stuff+Ca1thickness(Ba1)

Karena, kita mengasumsikan, , mari kita transfer semua buku rak ke (yang dimungkinkan karena .Ca<Ca1a1aha1<ha

Jadi, sekarang, yang lebih rendah dari sebelumnya. Oleh karena itu, kami memiliki kontradiksi karena Optimalitas yang kami asumsikan.cost=other,stuff+Cathickness(Ba)

Jadi untuk semua rak yang dibuatCa>Ca1

B. Biarkan menjadi buku yang ditugaskan untuk rak . Mari kita buktikanjaheight(j)>ha1

Ini cukup mudah. Jika lebih kecil dari kita bisa meletakkan buku ke rak dengan biaya yang lebih baik (karena A).height(j)ha1a1

Dari dua hal yang telah kami buktikan, B adalah yang signifikan.

Misalkan = biaya optimal untuk rak buku sehingga ada rak . Anda harus menemukan cara untuk mendefinisikan dengan nilai-nilaidp[a]1...aheight(a)dp[a]dp[1],dp[2],....dp[a1]

Saya akan berhenti di sini. Jika Anda terbiasa dengan Pemrograman Dinamis, menggunakan fakta B, Anda akan dengan mudah menemukan pengulangan. Kalau tidak, tanyakan :). Seperti yang saya katakan, ini bisa berubah menjadi masalah DAG. Mengetahui hubungan di atas, mudah untuk menyadari apa tepi berdiri dan menentukan biayanya.(a,b)

Terakhir tetapi tidak kalah pentingnya, seperti yang saya katakan di atas, karena buku-bukunya besar, Anda tidak dapat menggunakan algoritme untuk setiap buku. Saya pikir bahwa mewakili tingginya dengan jumlah ketebalannya harusnya cukup. (Saya pikir sudah seperti itu dari pernyataan Anda)

(Saya menduga jumlah ketinggian yang berbeda jauh lebih sedikit daripada jumlah buku)


John
sumber
terima kasih atas bantuan yang solid ini! Pertama saya punya pertanyaan untuk bagian A: mengapa kita memiliki kontradiksi karena masalah optimalitas? Saya memahaminya secara logis bahwa biaya yang lebih rendah ketika menyimpan buku dengan ketinggian lebih rendah di rak-rak yang lebih tinggi bertentangan tetapi saya optimalitas apa yang kita asumsikan? (Itu mungkin karena saya hanya melakukan pemrograman dinamis semester depan ...?)
Revolusi untuk Monica
Kedua, saya pikir ada kesalahan ketik ketika Anda mengatakan untuk kesimpulan A. Bagian , itu sebaliknya, bukan? Ca<Ca1
Revolusi untuk Monica
@ Marine1 Ya. Kamu benar. Ini salah ketik! Akan segera memperbaikinya. Sekarang untuk pertanyaan lainnya. Misalkan Anda memiliki algoritma optimal (yaitu yang menghasilkan biaya terbaik). Jika ada rak di dalamnya sehingga maka kita bisa mentransfer semua buku dari rak ke rak dan tidak membuat rak . Maka Anda akan berakhir dengan biaya yang lebih kecil (karena a. Biaya untuk ketebalan akan lebih sedikit dan b. Anda tidak perlu ). Tetapi dalam asumsi kami, kami sudah memiliki algoritma yang optimal sehingga ini tidak dapat menampung. Saya harap ini membuatnya lebih jelas bagi Anda! C a > C a + 1 a a + 1 a F aaCa>Ca+1aa+1aFa
jjohn
0

Kadang-kadang hanya "memperbesar" pada "masalah terdekat" dalam literatur dapat membantu memahami teori dan latar belakang masalah, membangun abstraksi, dan menghilangkan detail palsu. Masalah terdekat dalam literatur dengan milik Anda tampaknya adalah apa yang dikenal sebagai "masalah ukuran kemasan bin variabel". Makalah contoh disertakan di bawah ini. Masalah ini sangat dipelajari secara teoritis dan ada beberapa perangkat lunak yang ada, itu muncul dalam mengoptimalkan kotak kemasan di misalnya truk pengiriman kontainer. Ada juga versi di mana seseorang dapat menyesuaikan ukuran wadah. Ada banyak pendekatan algoritmik. misalnya, dari 1 st kertas:

Masalah yang dibahas dalam makalah ini adalah bahwa pengemasan ortogonal satu set item berbentuk persegi panjang yang diberikan ke dalam jumlah minimum dari kotak persegi panjang tiga dimensi.

vzn
sumber