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 = 23L i = 300
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 i
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 ≤ i
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 )
Zum Beispiel haben wir für den Konvent (eine dunkle Periode der französischen Geschichte) ein solches Array:
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 n
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 !;))
Eckpunkte:
- befinden sich Regale, in denen wir unsere Bücher aufbewahren können.
- 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 ...
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...
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.
Eckpunkte:
- befinden sich Regale, in denen wir unsere Bücher aufbewahren können.
- 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 ...
Ich weiß jedoch nicht, wo ich .
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 - 1
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 3
quelle
Antworten:
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, 1≤n≤N Wn,
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, i≤n 0 N
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.i j>i
Der Dijkstra-Algorithmus gibt uns dann einen Pfad mit der kürzesten Länge zum KnotenN.
quelle
Int
größer als1
. Dies führt zu einem Diagramm dern^2
Eckpunkte. 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.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 .i h1,h2,...,hi h1<h2<...<hi
Lassen Sie uns die folgenden zwei Dinge beweisen:
A.Ca>Ca−1
Nehmen wir das Gegenteil an. Sei die Menge der Bücher, die dem Regal zugewiesen sind. DannBa−1 a−1 cost=other,stuff+Ca−1∗thickness(Ba−1)
Da wir angenommen haben, , übertragen wir alle Bücher des Regals auf (was möglich ist, da .Ca<Ca−1 a−1 a ha−1<ha
Also, jetzt die niedriger als zuvor ist. Daher haben wir einen Widerspruch aufgrund der von uns angenommenen Optimalität.cost=other,stuff+Ca∗thickness(Ba)
Also für alle erstellten RegaleCa>Ca−1
B. Sei ein Buch, das Regal . Beweisen wir, dassj a height(j)>ha−1
Das ist ziemlich einfach. Wenn die kleiner als , könnten wir das Buch zu besseren Kosten (aufgrund von A) in das Regal .height(j) ha−1 a−1
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...a height(a) dp[a] dp[1],dp[2],....dp[a−1]
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.)
quelle
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:
OPTIMIERUNG DER DREIDIMENSIONALEN BIN-VERPACKUNG DURCH SIMULATION / Dube, Kanavathy
Behälterverpackungsproblem mit unsicheren Mengen und Kapazitäten / Peng, Zhang
3D-Bin-Packing-Algorithmen , Stackoverflow
quelle