Ist dieses kombinatorische Optimierungsproblem einem bekannten Problem ähnlich?

10

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 Zahlwh .n

Wir möchten nun Rechtecke mit den Dimensionen w × überlagernn auf dem Gitterso dass die Gesamtsumme der Werte der Zellen in diesen Rechtecken maximiert wird.w×h

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 ).w=h=2n=2

Gitterbeispiel

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 2+4.2+2.4+3.14+2.31.4+13.1

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!

achtundfünfzig
quelle
(am Telefon) Dies scheint mit maximaler Übereinstimmung unter einer Transformation und einigen zusätzlichen Einschränkungen gelöst zu werden. Ich werde versuchen, später zu schreiben.
Nicholas Mancuso
nn1
sLsLs

Antworten:

2

Meine letzte Formulierung hatte einen schwerwiegenden Fehler, der eine exponentielle Menge von "Einschränkungs" -Knoten erfordern würde.

rwrr,rk=n

Nicholas Mancuso
quelle
Dies ist die Richtung, in die ich mich derzeit neige. Ich werde damit experimentieren und die Lösung akzeptieren, wenn es die ist, die ich am Ende benutze, Prost.
fiftyeight
2

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.

xrrxr=1rxr=0rcrxrcrrrxr=nxr+xs1r,s

DW
quelle
Denken Sie, dass dieses Problem NP-schwer ist? Ich bin nicht davon überzeugt, dass es keine Poly-Time-Lösung gibt, und es ist unwahrscheinlich, dass die ILP-Löser selbst Instanzen mittlerer Größe fertigstellen.
RB
1
@RB, ich habe keine Ahnung, ob es NP-schwer ist. Siehe meinen Kommentar unter der Frage zur dynamischen Programmierung für meinen ersten Gedanken darüber, wie man versucht, einen Polynom-Zeit-Algorithmus zu finden (aber ich weiß nicht, ob der resultierende Algorithmus in P sein wird oder nicht). Was ILP-Löser tun können, ist der einzige Weg, dies herauszufinden, es zu versuchen - manchmal kann ihre Leistung überraschend sein.
DW