Wie löse ich ein Anordnungsproblem im Archive Nationale of France mithilfe der Graphentheorie?

9

Guten Abend! Ich mache gerade ein Praktikum bei den Archives Nationales of France und bin auf eine Situation gestoßen, die ich mithilfe von Grafiken lösen wollte ...

I. Die staubige Situation

Wir möchten die Anordnung der Bücher meiner Bibliothek entsprechend ihrer Höhe optimieren, um ihre Archivkosten zu minimieren. Die Höhe und Dicke der Bücher sind bekannt. Wir haben die Bücher bereits in aufsteigender Reihenfolge der Höhe (ich weiß nicht, ob es das Beste war, aber ... so haben wir es gemacht). Wenn wir die Dicke jedes Buches kennen, können wir für jede Klasse die notwendige Dicke für ihre Anordnung bestimmen, nennen wir es (zum Beispiel können die Bücher, die groß sind, die Gesamtdicke ).H i L i H i = 23H1,H2,,HnHiLiL i = 300Hi=23cmLi=300cm

Die Bibliothek kann Regale nach Maß herstellen und dabei die gewünschte Länge und Höhe angeben (kein Problem mit der Tiefe). Ein Regal mit der Höhe und der Länge kostet , wobei feste Kosten und die Kosten des Regals pro Längeneinheit sind.x i F i + C i x i F i C iHixiFi+CixiFiCi

Beachten Sie, dass ein Regal der Höhe verwendet werden kann, um Bücher der Höhe mit zu speichern . Wir wollen die Kosten minimieren.H j j iHiHjji

Mein Tutor schlug vor, dieses Problem als Pfadfindungsproblem zu modellieren. Das Modell kann Eckpunkte umfassen, die von bis indiziert sind . Mein Mentor schlug vor, die vorhandenen Bedingungen, jede Kantenbedeutung und die mit der Kante verbundene Bewertung zu erarbeiten . Ich wäre auch mit anderen Lösungen und Einsichten einverstanden.0 n v ( i , j ) ( i , j )n+10nv(i,j)(i,j)

Zum Beispiel haben wir für den Konvent (eine dunkle Periode der französischen Geschichte) ein solches Array:

i1234Hi12cm15cm18cm23cmLi100cm300cm200cm300cmFi1000120011001600Ci5/cm6/cm7/cm9/cm

II. Die Annahmen eines angehenden Bücherwurms

Ich denke, ich muss einen Algorithmus zwischen Djikstra, Bellman oder Bellman-Kalaba berechnen ... Ich versuche herauszufinden, welcher in den folgenden Unterabschnitten.

1.Bedingungen

Wir haben hier das Problem der Pfadfindung zwischen einem Scheitelpunkt und einem Scheitelpunkt , muss von ausgehen (dh ein Pfad (oder ein Spaziergang) muss zwischen undn n 0 0 n0nn00n

2.Was zu berechnen ist (aktualisiert (25.10.2015))

// Arbeite noch in Bearbeitung, soweit ich nicht weiß, welche Eckpunkte und welche Kanten modelliert werden sollen ...

Meine beste Vermutung

Ich denke, wir werden jedes Mal, wenn wir einen kürzesten Weg vom Array finden, mindestens eine Art von Regalen los, aber das ist nur meine Annahme ...;).

Ich denke, der beste Weg, um zu modellieren, wie man Regale kauft und unsere Bücher aufbewahrt, muss wie in der folgenden Grafik aussehen (aber bitte kritisieren Sie meine Methode !;))

von 0 graph

Eckpunkte:

  • i[1,4] befinden sich Regale, in denen wir unsere Bücher aufbewahren können.
  • 0 ist der Zustand, in dem kein Buch gespeichert ist. Durch die Verwendung dieses Scheitelpunkts kann ich alle Kostenformeln (Kanten) verwenden.

Kanten: sind die Kosten bei Verwendung einer Art Regal. Zum Beispiel: von 0 sind die Kosten für die Aufbewahrung unserer Pergamente, Manuskripte ...Fi+Cixi,i[1,4]F1+C1x1

Von hier aus weiß ich jedoch nicht, wie ich mein Problem mit dem kürzesten Weg lösen soll.

In der Tat würde ich nicht wissen, wo ich alle meine Bücher verstaut hätte.

Dies führt mich zu einer anderen Idee ...

eine andere Idee...

bis 0 graph

Hier suche ich nach dem kürzesten Weg von einem bestimmten Scheitelpunkt zum Zustand 0, dh ich weiß, dass das höchste Dokument vom groß ist, und suche nach dem billigsten Weg, um meine Dokumente anzuordnen.type i

Eckpunkte:

  • i[1,4] befinden sich Regale, in denen wir unsere Bücher aufbewahren können.
  • 0 ist der Zustand, in dem alle Bücher gespeichert sind. Durch die Verwendung dieses Scheitelpunkts kann ich alle Kostenformeln (Kanten) verwenden.

Kanten: sind die Kosten bei Verwendung einer Art Regal. Zum Beispiel: von 3 sind die Kosten für vom nach Verwendung von Regalen vom zur Aufbewahrung unserer Pergamente, Manuskripte ...Fi+Cixi,i[1,4]F1+C1x1type 1type 3

Ich weiß jedoch nicht, wo ich .F4+C4x4

3.Wie zu berechnen

Ich denke, wir müssen mit den höheren Regalen beginnen, soweit wir dann die kleineren Bücher aufbewahren können ...

Machen

Wir nehmen cm mit der Höhe in einem Regal ihrer Höhe + cm einer Höhe, bis es teurer wird als die Regal. dann istH i = n z H i = n - 1 H i = n - 1 i = i - 1LnHi=nzHi=n1Hi=n1i=i1

Während i> <0

Schließlich weiß ich nicht, wie ich x variieren lassen soll ...

Das heißt, wie man beispielsweise Dokumente in oder einfügt. 4 3xi43

Revolution für Monica
quelle
Wieviele Bücher sind dort? dh sind Algorithmen die einzigen, die akzeptabel sind? O(n),O(nlogn)
John
5
Ich verstehe nicht, was dies mit Grafiken zu tun hat: Warum sollten Sie sich zwingen, etwas auf Grafiken basierendes zu tun, wenn das Problem so etwas wie das Verpacken von Behältern ist? Ihr Modell berücksichtigt nicht die praktischen Aspekte von Regalen. Zum Beispiel hat ein Regal Regale einer bestimmten Länge: Sie können fünf Meter lange Regale übereinander stapeln, aber ein 99-cm-Regal, ein 172-cm-Regal, ein 128-cm-Regal, ein 83-cm-Regal und ein 18-cm-Regal (Gesamtlänge) 5m) sind völlig nutzlos. Und warum um alles in der Welt kostet der Bau eines 23 cm hohen Regals einen Meter? Das scheint nicht im entferntesten realistisch zu sein. Ist diese Bibliothek echt?
David Richerby
3
1. Ich verstehe nicht, warum Sie sich zwingen, dies als Wegfindungsproblem zu betrachten. Wenn Sie in der Praxis mit dieser Situation konfrontiert sind, ist es nicht sinnvoll, eine solche unnötige Einschränkung aufzuerlegen. Warum sollten Sie andere Lösungen ablehnen, die Ihr Problem mit einem anderen Ansatz lösen? Ich empfehle Ihnen, die Frage zu bearbeiten, um diese Anforderung zu entfernen. 2. Sie haben uns immer noch nicht gesagt, wie viele Bücher es gibt. Können Sie uns eine Nummer geben? Etwas Spezifischeres als "ein Klooot", auch wenn es sich nur um eine Größenordnungsschätzung handelt?
DW
1
Anscheinend haben Sie sich einige Gedanken über Ihr Problem gemacht. Das ist gut! Das Speichern einer vollständigen Geschichte Ihrer Gedanken in einer Frage macht es jedoch ziemlich unhandlich. SE funktioniert viel besser, wenn Sie eine einzelne, fokussierte Frage und gerade genug Hintergrundinformationen veröffentlichen, um die Frage beantwortbar zu machen.
Raphael
1
In Bezug auf "Ich muss es als Grafikproblem ausdrücken" - das ist eine ... dumme Anforderung. Wenn das Problem in P liegt, schreiben Sie es als LP auf und berechnen Sie eine äquivalente Max-Flow-Instanz. Voila. Wenn es in NP ist, Sie aber nicht wissen, dass es in P ist, schreiben Sie es als IP und konvertieren Sie es in ein NP-vollständiges Diagrammproblem. Voila.
Raphael

Antworten:

5

Ich sehe Sie als Frage: "Ich möchte dies mit dem Dijkstra-Algorithmus lösen, aber ich kann kein gutes Diagramm zum Ausführen einrichten." Deshalb werde ich Ihnen ein solches Diagramm präsentieren.

Ein Digraph, bei dem Eckpunkte Sätze von Regalen sind.

Okay, wir haben Bücher mit den Höhen und den Breiten mit Höhen in aufsteigender Reihenfolge für jedes Buch, und wir möchten sie in Regale gruppieren.Hn, 1nNWn,

Wiederverwendung dieser Zahlen für die Lösung Knoten wobei dieser Knoten einen Lösungszustand repräsentiert „alle Bücher werden auf Eis gelegt worden ist .“ Wir werden daher am Knoten und versuchen, mit dem Dijkstra-Algorithmus auf dem kürzesten Weg zum Knoten zu gelangen . Diese Knoten sind die Eckpunkte unseres Graphen.n,in0N

Wir zeichnen dann vom Knoten zu jedem Knoten eine gerichtete Kante, die davon ausgeht, dass alle diese Zwischenbücher mit einem Regal , dh die Länge dieser Kante ist wobei ich angenommen habe, dass, als Sie sagten, dass die Kosten der Summe der Index auf dem völlig bedeutungslos war.ij>i

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

Der Dijkstra-Algorithmus gibt uns dann einen Pfad mit der kürzesten Länge zum KnotenN.

CR Drost
quelle
@Christ Drost, thaaaaaaaaanks, viel! Es hat einige Zeit gedauert, um zu verstehen, was Sie ohne Grafik erstellen wollten, aber genau das habe ich gesucht! Ich habe dein tolles Profil gelesen, es passt zu deiner Antwort haha;)!
Revolucion für Monica
Ich habe mich gefragt, ob Bellman-Kalaba nicht angemessener ist als Djikstra. Die einzige Notwendigkeit besteht darin, keine Zikrone zu haben (und wir nicht)
Revolucion für Monica
Und es ist ein Algorithmus, der auch die Länge der Kanten definitiv festlegt. „node n für eine Lösung unter Angabe‚alle Bücher i≤n auf Eis gelegt wurde.‘“ Wir können nicht rückwärts gehen auch mit dem, was Sie zur Verfügung gestellt.
Revolucion für Monica
Ich bin mir nicht sicher, was "rückwärts gehen" bedeutet, aber wenn Sie "rückwärts gehen" möchten, müssen Sie wahrscheinlich ein komplexeres Diagramm in Betracht ziehen, in dem ein Knoten eine Liste der "Anzahl der Bücher, die in diesem Regal aufbewahrt werden" ist Intgrößer als 1. Dies führt zu einem Diagramm der n^2Eckpunkte. Wenn Sie nach einem Pfad zwischen A und B suchen und alle Kantengewichte positiv sind, gibt es keinen Unterschied zwischen Dijkstra und Bellman-Kalaba, außer dass Bellman-Kalaba immer versucht, Kanten zu aktualisieren, die nicht aktualisiert werden müssen. Dijkstra speichert lediglich Zeiger auf die Eckpunkte, die es interessiert.
CR Drost
7

Ich glaube, ich habe eine Lösung für Ihr Problem. Hoffentlich habe ich bei der Definition Ihres Problems nichts falsch verstanden. Hier kommt's:

Ich werde einen dynamischen Programmieransatz beschreiben. Es ist ein -Algorithmus, was bedeutet, dass es Ihnen nicht viel helfen wird, da die Anzahl der Bücher sehr groß ist. (Sie müssen es ein wenig ändern!). Mit etwas Arbeit können Sie diesen Ansatz der dynamischen Programmierung in eine Instanz verwandeln, bei der der kürzeste Pfad in einem gerichteten azyklischen Diagramm gefunden wird. (Was selbst ein dynamischer Programmieralgorithmus ist: P)O(n2)

Angenommen, es gibt Bücher unterschiedlicher Höhe.n

Angenommen, die optimalen Kosten werden erreicht, indem die Bücher Regalen mit der Höhe wobei .ih1,h2,...,hih1<h2<...<hi

Lassen Sie uns die folgenden zwei Dinge beweisen:

A.Ca>Ca1

Nehmen wir das Gegenteil an. Sei die Menge der Bücher, die dem Regal zugewiesen sind. DannBa1a1cost=other,stuff+Ca1thickness(Ba1)

Da wir angenommen haben, , übertragen wir alle Bücher des Regals auf (was möglich ist, da .Ca<Ca1a1aha1<ha

Also, jetzt die niedriger als zuvor ist. Daher haben wir einen Widerspruch aufgrund der von uns angenommenen Optimalität.cost=other,stuff+Cathickness(Ba)

Also für alle erstellten RegaleCa>Ca1

B. Sei ein Buch, das Regal . Beweisen wir, dassjaheight(j)>ha1

Das ist ziemlich einfach. Wenn die kleiner als , könnten wir das Buch zu besseren Kosten (aufgrund von A) in das Regal .height(j)ha1a1

Von den beiden Dingen, die wir bewiesen haben, ist B das wichtigste.

Sei = die optimalen Kosten für das Regal von Büchern so dass es ein Regal mit der . Sie müssen einen Weg finden, durch die Wertedp[a]1...aheight(a)dp[a]dp[1],dp[2],....dp[a1]

Ich werde hier aufhören. Wenn Sie mit der dynamischen Programmierung vertraut sind und Fakt B verwenden, werden Sie leicht auf die Wiederholung kommen. Ansonsten frag :). Wie gesagt, dies kann zu einem DAG-Problem werden. Wenn man die obige Beziehung kennt, ist es leicht zu erkennen, wofür die Kante steht, und ihre Kosten zu definieren.(a,b)

Last but not least können Sie, wie oben erwähnt, den Algorithmus nicht für jedes Buch verwenden, da die Bücher groß sind. Ich denke, dass die Darstellung seiner Höhe durch die Summe seiner Dicke den Trick tun sollte. (Ich denke, das ist schon so aus deiner Aussage)

(Ich vermute, dass die Anzahl der verschiedenen Höhen viel geringer ist als die Anzahl der Bücher.)


jjohn
quelle
Vielen Dank für diese solide Hilfe! Zuerst hatte ich eine Frage für den A-Teil: Warum haben wir einen Widerspruch aufgrund des Optimalitätsproblems? Ich verstehe es logischerweise, dass niedrigere Kosten bei der Lagerung von Büchern mit geringerer Höhe in höheren Regalen widersprüchlich sind, aber ich, welche Optimalität nehmen wir an? (Das liegt vielleicht daran, dass ich erst nächstes Semester dynamisch programmiere ...?)
Revolucion für Monica
Zweitens denke ich, dass es einen Tippfehler gibt, als Sie für das A sagten. Teil Schlussfolgerung , es ist das Gegenteil, nicht ? Ca<Ca1
Revolucion für Monica
@ Marine1 Ja. Du hast recht. Es ist ein Tippfehler! Wird es bald beheben. Nun zur anderen Frage. Angenommen, Sie haben den optimalen Algorithmus (dh den, der die besten Kosten ausgibt). Wenn darin ein Regal , so dass wir alle Bücher von Regal in Regal und kein Regal erstellen . Dann würden Sie geringere Kosten haben (weil a. Die Kosten für die Dicke geringer wären und b. Sie kein benötigen würden ). Aber in unserer Annahme haben wir bereits den optimalen Algorithmus, so dass dies nicht gelten kann. Ich hoffe das macht es dir etwas klarer! C a > C a + 1 a a + 1 a F aaCa>Ca+1aa+1aFa
John
0

Manchmal kann das "Vergrößern" des "nächsten Problems" in der Literatur helfen, die Theorie und den Hintergrund des Problems zu verstehen, eine Abstraktion zu erstellen und falsche Details zu beseitigen. Das nächstgelegene Problem in Ihrer Literatur scheint das zu sein, was als "Problem beim Verpacken von Behältern mit variabler Größe" bekannt ist. Beispielpapiere sind unten enthalten. Dieses Problem ist sehr theoretisch untersucht und es gibt einige Standard-Software, die sich in der Optimierung von Verpackungsboxen in beispielsweise LKW-Versandbehältern zeigt. Es gibt auch Versionen, bei denen die Behältergröße angepasst werden kann. Es gibt viele algorithmische Ansätze. beispielsweise von 1 st Papier:

Das in diesem Artikel angesprochene Problem besteht darin, einen gegebenen Satz rechteckiger Gegenstände orthogonal in eine minimale Anzahl dreidimensionaler rechteckiger Behälter zu packen.

vzn
quelle