Fransa'nın Archive Nationale'deki bir düzenleme problemini grafik teorisi kullanarak nasıl çözebilirim?


9

İyi akşamlar! Aslında, Archives Nationales of France'da staj yapıyorum ve grafikleri kullanarak çözmek istediğim bir durumla karşılaştım ...

I. Tozlu durum

Arşiv maliyetlerini en aza indirmek için kütüphanemin kitaplarının yüksekliğine göre düzenlenmesini optimize etmek istiyoruz. Kitapların yüksekliği ve kalınlığı bilinmektedir. Kitapları zaten yüksekliklerine göre (en iyi şey olup olmadığını bilmiyorum ama ... bu şekilde yaptık). Her bir kitabın kalınlığı bilerek, her biri için belirleyebilir , kendi düzenleme için sınıf gerekli kalınlığa çağrı (örneğin, olan kitaplar toplam kalınlığa sahip olabilir uzun ).H1,H2,,HnHiLiHi=23cmLi=300cm

Kütüphane, istenilen uzunluğu ve yüksekliği belirten raflar üretebilir (derinlikle ilgili sorun yoktur). yüksekliği ve uzunluğundaki bir rafın maliyeti ; burada sabit bir maliyettir ve uzunluk birimi başına rafın maliyetidir.HixiFi+CixiFiCi

yüksekliğinde bir rafın, yüksekliğindeki kitapları ile depolamak için kullanılabileceğini . Maliyeti en aza indirmek istiyoruz.HiHjji

Öğretmenim bu sorunu bir yol bulma problemi olarak modellememi önerdi. Model içerebilir formu endeksli köşe ile . Akıl hocam ben değerleme çalışmak mevcut koşullar, her kenar anlamlara ve nasıl işe önerdi kenarına bağlantılı . Ayrıca diğer çözümlerin yanı sıra içgörülerle de iyi olurum.n+10nv(i,j)(i,j)

Örneğin, Sözleşme için (Fransız Tarihinin karanlık bir dönemi) böyle bir dizi var:

i1234Hi12cm15cm18cm23cmLi100cm300cm200cm300cmFi1000120011001600Ci5/cm6/cm7/cm9/cm

II. Stajyer kitap kurdu varsayımları

Sanırım Djikstra, Bellman veya Bellman-Kalaba arasında bir algoritma hesaplamalıyım ... Aşağıdaki alt bölümlerden hangisini bulmaya çalışıyorum.

1.Conditions

Biz Vertice arasında pathfinding bir problem ile burada ve Vertice , giden olmalıdır zorunluluk arasında var) demek, bir yol (ya da yürüyüş olduğunu ( ve0nn00n

2.Nasıl hesaplanmalı (güncellendi (25/10/2015))

// Hangi köşeleri ve hangi kenarları modelleyeceğimizi bilmediğim sürece hala işlem görüyor ...

En iyi tahminim

Sanırım diziden en kısa yolu her bulduğumuzda en az bir tür raftan kurtuluyoruz, ama bu sadece benim varsayımım;;).

Rafları nasıl satın alacağımızı ve kitaplarımızı nasıl depolayacağımızı modellemenin en iyi yolunun aşağıdaki grafik gibi görünmesi gerektiğini düşünüyorum (ancak, lütfen yöntemimi eleştirmekten çekinmeyin!;))

0 grafikten

köşe:

  • i[1,4] kitaplarımızı saklamak için kullanabileceğimiz raflardır.
  • 0 hiçbir kitabın saklanmadığı durumdur. Bu köşeyi kullanmak, her bir maliyet formülünü (kenarları) kullanmama izin veriyor.

kenarlar: bir tür kullanan maliyetlerdir. örneğin: fom 0, parşömenlerimizi, el yazmalarımızı saklamak için sadece tip 1 rafları kullanan maliyettir ...Fi+Cixi,i[1,4]F1+C1x1

Ancak buradan en kısa yol problemimi nasıl oluşturacağımı bilmiyorum.

Gerçekten de, tüm kitaplarımı nereye koyacağımı bilemezdim.

Bu beni başka bir fikre götürüyor ...

diğer bir fikir...

0 grafiğe

Burada, belirli bir tepe noktasından 0 durumuna en kısa yolu arıyorum, yani en yüksek belgenin boyunda olduğunu bilerek, belgelerimi düzenlemek için en ucuz yolu arıyorum.type i

köşe:

  • i[1,4] kitaplarımızı saklamak için kullanabileceğimiz raflardır.
  • 0 , tüm kitapların saklandığı durumdur. Bu köşeyi kullanmak, her bir maliyet formülünü (kenarları) kullanmama izin veriyor.

kenarlar: bir tür kullanan maliyetlerdir. örneğin: , parşömenlerimizi, el yazmalarımızı saklamak için rafları kullandıktan sonra rafları kullanan maliyettir ...Fi+Cixi,i[1,4]F1+C1x1type 1type 3

Yine de, nereye koyacağımı bilmiyorum .F4+C4x4

3. nasıl hesaplanır

Sanırım daha küçük rafları saklayabildiğimiz kadar yüksek raflarla başlamamız gerekiyor ...

Yapmak

Biz almak ile bir cm kendi yüksekliği + bir rafa yükseklik bir cm'lik o alarak daha pahalı hale gelinceye kadar yükseklik rafa. o zamanLnHi=nzHi=n1Hi=n1i=i1

Ben> <0

Sonunda, x'i nasıl değiştireceğim bilmiyorum ...

Yani belgelerini örneğin ya da nasıl yerleştireceğinizi söyleyebiliriz .xi43


Orada kaç tane kitap var? yaniO(n),O(nlogn) algoritmalar kabul edilebilir olanlar?
jjohn

5
Bunun grafiklerle ne ilgisi olduğunu görmüyorum: eldeki sorun bin paketleme gibi bir şey olduğunda neden grafik tabanlı bir şey yapmaya zorlanıyorsunuz? Modeliniz rafların pratikliğini hesaba katmıyor. Örneğin, bir raf biriminin belirli bir uzunlukta rafları vardır: beş metre uzunluğunda rafları üst üste istifleyebilirsiniz, ancak 99cm raf, 172cm raf, 128cm raf, 83cm raf ve 18cm raf (toplam uzunluk 5m) tamamen işe yaramaz. Ve neden bir metre 23 cm yüksekliğindeki raf inşa etmek 2500 € 'ya mal oluyor? Bu uzaktan gerçekçi görünmüyor. Bu kütüphane gerçek mi?
David Richerby

3
1. Kendinizi buna neden yol bulma sorunu olarak yaklaşmaya zorladığınızı anlamıyorum. Pratikte bu durumla karşı karşıyaysanız, bu kadar gereksiz bir sınırlama getirmek mantıklı değildir - neden farklı bir yaklaşım kullanarak sorununuzu çözen diğer çözümleri reddedersiniz? Bu gereksinimi kaldırmak için soruyu düzenlemenizi öneririz. 2. Hala bize kaç kitap olduğunu söylemediniz. Bize bir numara verebilir misiniz? Sadece bir büyüklük sırası tahmini olsa bile, "bir loooot" tan daha spesifik bir şey mi?
DW

1
Görünüşe göre probleminiz hakkında oldukça fazla düşünce harcadınız. Bu iyi! Bununla birlikte, düşüncelerinizin tam bir geçmişini bir soruda saklamak, onu oldukça kullanışsız hale getirir. Tek, odaklanmış bir soru ve soruyu cevaplanabilir hale getirmek için yeterli arka plan yayınlarsanız SE çok daha iyi çalışır.
Raphael

1
"Bunu bir grafik problemi olarak ifade etmeliyim" - bu ... aptalca bir gereklilik. Sorun P'de ise, LP olarak yazın ve eşdeğer bir maksimum akış örneği hesaplayın. Voila. NP'de ise ancak P'de olduğunu bilmiyorsanız, IP olarak yazın ve herhangi bir NP-tam grafik problemine dönüştürün. Voila.
Raphael

Yanıtlar:


5

"Bunu Dijkstra'nın algoritmasıyla çözmek istiyorum, ama üzerinde çalışmak için iyi bir grafik ayarlayamıyorum" diye sorduğunuzu görüyorum, bu yüzden size böyle bir grafik sunacağım.

Köşelerin raflanmış kitap setleri olduğu bir digrafidir.

Tamam, yükseklikleri olan kitaplarımız var Hn, 1nN ve genişlikleri Wn, her kitap için artan düzende ve onları raflarda gruplandırmak istiyoruz.

Çözüm düğümleri için bu sayıları yeniden kullanın n, bu düğüm bir çözüm durumunu temsil eder "tüm kitaplar in "Bu yüzden düğümde başlayacağız 0 ve düğüme gitmeye çalışmak NDijkstra'nın algoritmasıyla en kısa yoldan. Bu düğümler grafiğimizin köşe noktalarıdır.

Daha sonra düğümden çiziyoruz i herhangi bir düğüme j>i bu ara kitapların hepsinin bir rafla rafa kaldırılacağını varsayan bir yön, yani bu kenarın uzunluğu

Lij=Fj+Cj n=i+1jWn,
Burada, toplamın maliyetinin Fi+Cixi alt simge i üzerinde xi tamamen anlamsızdı.

Dijkstra'nın algoritması bize düğüme en kısa yolu verecektir N.


@Christ Drost, thaaaaaaaaanks, çok! Herhangi bir grafik olmadan ne yaratmaya çalıştığınızı anlamanız zaman aldı ama tam da aradığım şey buydu! İnanılmaz profilinizi okudum, cevabınıza uyuyor haha;)!
Monica için Revolucion

Bellman-Kalaba'nın Djikstra'dan daha uygun olup olmadığını merak ediyordum, tek ihtiyaç herhangi bir cicruit'e sahip olmamak (ve istemiyoruz)
Monica için Revolucion

Ve kenarların uzunluklarını da kesin olarak belirleyen bir algorthm. "n düğümü, tüm kitapların rafa kaldırıldığını" belirten bir çözümü temsil eder. "" Verdiğiniz bilgilerle geriye gidemeyiz.
Monica için Revolucion

"Geri gitmenin" ne anlama geldiğinden emin değilim, ancak "geri gitmek" istiyorsanız, muhtemelen bir düğümün "bu raf tarafından rafa alınan kitap sayısı" nın bir listesi olduğu daha karmaşık bir grafiği göz önünde bulundurmanız gerekir. Intdaha büyük 1. Bu bir n^2köşe grafiğine yol açar . A ve B arasında bir yol ararken ve tüm kenar ağırlıkları pozitif olduğunda Dijkstra ve Bellman-Kalaba arasında hiçbir fark yoktur, ancak Bellman-Kalaba her zaman güncellenmesi gerekmeyen kenarları güncellemeye çalışır; Dijkstra sadece işaretçileri önem verdiği köşelere kaydeder.
CR Drost

7

Sanırım senin sorununun bir çözümü var. Umarım probleminizin tanımında yanlış bir şey anlamadım. İşte gidiyor:

Dinamik Programlama yaklaşımını anlatacağım. Bu birO(n2) algoritması, yani kitap sayısı çok büyük olduğu için size çok yardımcı olmayacak. (biraz değiştirmelisiniz!). Bazı çalışmalarda, söz konusu Dinamik Programlama yaklaşımını Yönlendirilmiş Bir Döngüsel Olmayan Grafik üzerindeki en kısa yolu bulma örneğine dönüştürebilirsiniz. (Hangi kendisi dinamik bir programlama algoritmasıdır: P)

Varsayalım n farklı yükseklikteki kitaplar.

Ayrıca, kitapların i yükseklik rafları h1,h2,...,hi nerede h1<h2<...<hi.

Aşağıdaki iki şeyi kanıtlayalım:

A. Ca>Ca1

Aksine düşünün. İzin VermekBa1 rafa atanmış kitap seti olmak a1 Sonra cost=other,stuff+Ca1thickness(Ba1)

O zamandan beri, Ca<Ca1, tüm raf kitaplarını aktaralım a1 için a (o zamandan beri mümkün ha1<ha.

Peki şimdi, cost=other,stuff+Cathickness(Ba)öncekinden daha düşük. Dolayısıyla, varsaydığımız Optimality nedeniyle bir çelişki var.

Yani Ca>Ca1 oluşturulan tüm raflar için

B. Bırakın j rafa atanmış bir kitap ol a. Kanıtlayalımheight(j)>ha1

Bu oldukça kolaydır. Eğerheight(j) daha küçüktü ha1 kitabı rafa koyabilirdik a1 daha iyi bir maliyet için (A nedeniyle).

Kanıtladığımız iki şeyden B, önemli olanı.

İzin Vermek dp[a]= kitap rafları için en uygun maliyet 1...a böylece bir raf var height(a). Tanımlamak için bir yol bulmalısındp[a] değerlere göre dp[1],dp[2],....dp[a1]

Burada duracağım. Dinamik Programlama hakkında bilginiz varsa, B olgusunu kullanarak, kolayca nüks elde edersiniz. Aksi takdirde sorun :). Dediğim gibi, bu bir DAG problemine dönüştürülebilir. Yukarıdaki ilişkiyi bilerek, kenarın ne olduğunu anlamak kolaydır(a,b) maliyetini ifade eder ve tanımlar.

Son olarak, yukarıda da belirttiğim gibi, kitaplar büyük olduğundan algoritmayı her kitap için kullanamazsınız. Yüksekliğini kalınlığının toplamı ile temsil etmenin hile yapması gerektiğini düşünüyorum. (Sanırım ifadenizden zaten böyle)

(Farklı yüksekliklerin kitap sayısından çok daha az olduğunu tahmin ediyorum)



bu sağlam yardım için teşekkürler! İlk önce A kısmı için bir sorum vardı: Optimallik sorunu nedeniyle neden bir çelişki var? Daha yüksek raflarda daha düşük yükseklikteki kitapları saklarken maliyetin daha düşük olduğunu mantıklı olarak anlıyorum, ancak hangi iyiliği varsayıyoruz? (Bunun nedeni belki de sadece gelecek dönem dinamik programlama yaptığım için ...?)
Monica için Revolucion

İkincisi, sanırım A. Part sonucu için bir yazım hatası var Ca<Ca1, tam tersi, değil mi?
Monica için Revolucion

@ Marine1 Evet. Haklısın. Bu bir yazım hatası! Yakında düzeltir. Şimdi diğer soru için. En iyi algoritmaya (yani en iyi maliyeti veren algoritmaya) sahip olduğunuzu varsayalım. Bir raf varsaa içinde öyle ki Ca>Ca+1 sonra tüm kitapları raftan aktarabiliriz a rafa a+1 ve raf oluşturmayın a. Sonra daha küçük bir maliyet elde edersiniz (çünkü a. Kalınlık maliyeti daha az olur ve b. İhtiyacınız olmazFa). Ama varsayımımızda zaten optimal algoritmaya sahibiz, bu yüzden bu tutamaz. Umarım bu sizin için biraz daha açıktır!
jjohn

0

Bazen literatürdeki "en yakın problem" üzerine "yakınlaştırma" yapmak, problemin arkasındaki teori ve arka planı anlamaya, bir soyutlama oluşturmaya ve sahte ayrıntıları ortadan kaldırmaya yardımcı olabilir. Literatürde size en yakın sorun "değişken boyutlu çöp paketleme problemi" olarak bilinir. Örnek belgeler aşağıda verilmiştir. Bu problem teorik olarak çok çalışılmıştır ve bazı hazır yazılımlar mevcuttur, örneğin kamyon nakliye konteynırlarındaki ambalaj kutularını optimize etmede ortaya çıkar. Ayrıca konteyner boyutunu ayarlayabileceğiniz versiyonlar da vardır. Birçok algoritmik yaklaşım vardır. örneğin 1 den st kağıdı:

Bu makalede ele alınan sorun, belirli bir dikdörtgen şekilli ürün setini minimum sayıda üç boyutlu dikdörtgen kutuya dik olarak paketlemektir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.