Das Problem ist wie folgt:
Wir haben ein zweidimensionales Array / Gitter von Zahlen, die jeweils einen "Nutzen" oder "Gewinn" darstellen. Wir haben auch zwei feste ganze Zahlen und h (für "Breite" und "Höhe") und eine feste ganze Zahl .
Wir möchten nun Rechtecke mit den Dimensionen w × überlagern auf dem Gitterso dass die Gesamtsumme der Werte der Zellen in diesen Rechtecken maximiert wird.
Das folgende Bild ist ein Beispiel für ein zweidimensionales Gitter mit zwei überlagerten Rechtecken (das Bild zeigt nicht die optimale Lösung, sondern nur eine mögliche Überlagerung mit und n = 2 ).
Die Rechtecke können sich nicht schneiden (andernfalls müssten wir nur die optimale Position für ein Rechteck finden und dann alle Rechtecke an dieser Position platzieren.)
Im obigen Beispiel wäre die Gesamtsumme der Werte in Zellen
Ist dies einem bekannten Problem bei der kombinatorischen Optimierung ähnlich? damit ich anfangen kann zu lesen und versuchen kann, Wege zu finden, um es zu lösen.
Weitere Hintergrundinformationen für Interessierte:
Bisher waren die einzigen Ideen, die ich hatte, entweder ein gieriger Algorithmus (der den besten Ort für das erste Rechteck finden würde, dann die nicht überlappende Position für das zweite Rechteck usw.) oder eine Metaheuristik wie genetische Algorithmen.
In Wirklichkeit möchte ich dieses Problem mit einem Gitter lösen, das ungefähr eine Million Zellen und Zehntausende (oder sogar Hunderttausende) Rechtecke hat, obwohl es nicht notwendig ist, es in kurzer Zeit zu lösen (dh es wäre akzeptabel für Der Algorithmus soll Stunden oder sogar Tage dauern.) Ich erwarte keine genaue Lösung, aber ich möchte eine erhalten, die angesichts dieser Einschränkungen so gut wie möglich ist.
Prost!
quelle
Antworten:
Meine letzte Formulierung hatte einen schwerwiegenden Fehler, der eine exponentielle Menge von "Einschränkungs" -Knoten erfordern würde.
quelle
Sie können dies als eine gigantische ILP-Instanz (Integer Linear Programming) formulieren und dann einen Standard-ILP-Solver (lp_solve, CPLEX usw.) anwenden. Sie geben Ihnen die beste Lösung, die sie finden können. Angesichts der Größe Ihrer Probleminstanz weiß ich nicht, ob dies effizient genug ist, aber es wäre einfach, es zu versuchen.
quelle