Zeitfensterblöcke verkaufen

27

Angesichts von Zeitfenstern, die k Leute kaufen wollen. Person i hat für jedes Zeitfenster j einen Wert h ( i , j ) 0nkih(i,j)0j . Jede Person kann nur einen aufeinanderfolgenden Zeitfensterblock kaufen, der leer sein kann.

Gibt es einen Polynom-Zeit-Algorithmus , um den maximalen Wert zu berechnen, den der Verkäufer erreichen kann?

Ohne die Konsekutivitätsbeschränkung können wir jeden Zeitschlitz der Person zuweisen, die ihn am meisten schätzt. Wenn wir die Reihenfolge der Zeitschlitze der Personen festlegen, kann die dynamische Programmierung verwendet werden, um den Maximalwert der ersten 0 i k Personen zu ermitteln, die die ersten 0 j n Zeitschlitze kaufen .k0ik0jn

user11550
quelle

Antworten:

9

Gegeben ein 3CNF mit Klauseln für Variablen x 1 , , x n . Angenommen , sowohl x i und ¯ x i in der Formel erscheinen für höchstens k i mal jeweils.ϕ1,,ϕkx1,,xnxixi¯ki

Wir entwerfen einen farbigen DAG dessen Eckpunkte aus drei Teilen bestehen:G

  • "Zuordnung" Eckpunkten und ˉ v i ( j ) , 1 i n , 1 j k i . Farbe v i ( j ) mit der "Farbe" x i ( j ) und ˉ v i ( j ) mit ¯ x i ( j ) .vi(j)v¯i(j)1in1jkivi(j)xi(j)v¯i(j)xi¯(j)
  • "Klausel" -Scheitelpunkte , 1 i 'k , j ' = 1 , 2 , 3 . Farb w i ' ( j ' ) mit der Farbe x i ( j ) (oder ¯ x i ( j ) ) , wenn ¯ x i (oder x i , resp.) Ist die j 'wi(j)1ikj=1,2,3wi(j)xi(j)xi¯(j)xi¯xij-te Literal von Klausel , und es ist die j -te Klausel, die dieses Literal enthält.ϕij
  • "Schneide" Eckpunkte . Färben Sie sie mit anderen Farben als oben.s=s0,s1,,sn,sn+1,sn+k=t

Die Kanten umfassen:

  • , v i ( j ), v i ( j + 1 ) , v i ( k i ), s i ;si1vi(1)vi(j)vi(j+1)vi(ki)si
  • ,v i ( j ) v i ( j + 1 ) ,v i ( k i ) s i ;si1v¯i(1)v¯i(j)v¯i(j+1)v¯i(ki)si
  • und , w i ' ( j ' ) s n + i ' .sn+i1wi(j)wi(j)sn+i

Zum Beispiel aus dem 3CNF Das folgende Diagramm aufgebaut ist (die Kantenrichtung von links nach rechts) ist. (x1x2x3¯)(x1x2¯x3)Bildbeschreibung hier eingeben

Nun ist es nicht schwer zu erkennen, dass der ursprüngliche 3CNF genau dann zufriedenstellend ist, wenn es in G einen - t - Pfad mit verschiedenen Scheitelfarben gibt .stG

(Übrigens ist es ein Nebenprodukt, dass das Vorhandensein von - t path mit verschiedenen Scheitelfarben in farbiger DAG NP-schwer ist . Ich habe in rechnerischer Hinsicht nicht viele Literatur zu diesem Problem gefunden. Wenn Sie wissen, bitte Kommentar!)stNP-hard

Wie ist also die Beziehung zwischen dem Problem von und OP? Intuitiv werden wir eine Matrix h entwerfen , so dass jede Farbe einer Zeile (die eine Person ist) und die Kanten aufeinanderfolgenden Spalten (Zeitschlitzen) zugeordnet werden. Eine maximale Einteilung, die in der Matrix grundsätzlich von links nach rechts verläuft, entspricht daher einem s - t - Pfad.Ghst

Unsere Matrix hat 2 n + 1 + i 2 k i + k Spalten mit Indizes ab 0 . In der folgenden constrcution X ein Y sind zwei Werte erfüllen 1 « X « Y . Die Verhältnisse X / 1 , Y / X können große Potenzen von k und n sein . Sei K i = 2 i + 2 i jh2n+1+i2ki+k0XY1XYX/1,Y/Xkn.Ki=2i+2j=1iki

  • Für jeden , 0 i n , lassen h ( s i , K i ) = h ( s i , K i - k i - 1 ) = h ( s i , K i + k i + 1 + 1 ) = Y (falls die Koordinate existiert, siehe unten).si0inh(si,Ki)=h(si,Kiki1)=h(si,Ki+ki+1+1)=Y
  • Für jedes sei h ( x i ( j ) , K i - 1 + j ) = X ; Für jede ¯ x i ( j ) sei h ( ¯ x i ( j ) , K i - 1 + k i + 1 + j ) = X .xi(j)h(xi(j),Ki1+j)=Xxi¯(j)h(xi¯(j),Ki1+ki+1+j)=X
  • Für jedes , 1 i 'k und ein Literal x in der Klausel ϕ i ' sei h ( x , K n + i ' ) = 1 .ϕi1ikxϕih(x,Kn+i)=1
  • Alle anderen Einträge sind 0.

Für das obige Beispieldiagramm lautet die entsprechende Matrix beispielsweise Bildbeschreibung hier eingeben

Nun behaupten wir: Der ursprüngliche 3CNF ist genau dann erfüllbar, wenn der Maximalwert .(2n+1)Y+ikiX+k

Berücksichtigen Sie die Planung, die den Maximalwert erreicht. Da es in h genau Spalten gibt, die Y enthalten , sollten alle abgedeckt werden. Nehmen wir für die Spalte K i + k i + 1, die zwei Möglichkeiten von Y hat , an, dass die Planung sie s i zuweist . Da Spalte K i zu s i zugeordnet werden muss, müssen wir durch die Aufeinanderfolge die Spalten K i + 1 zu K i + k verlieren(2n+1)hYKi+ki+1YsiKisiKi+1 . Die gleichen Dinge passieren, wenn die Planung die Spalte K i + k i + 1 zu s i + 1 zuweist .Ki+kiKi+ki+1si+1

Um den Wert , müssen wir daher alle übrigen verfügbaren X in der Matrix auswählen , was einer Zuweisung für Variablen entspricht. Der Restwert von k ist also nur dann erreichbar, wenn die Zuweisung alle Klauseln erfüllt.ikiXXk

Zusammenfassend lässt sich sagen, dass die Entscheidung über den Maximalwert einer gesetzlichen Terminplanung in fällt . Vielleicht ist dies der Grund, warum alle unsere vorherigen Versuche, einen Algorithmus zu finden, fehlgeschlagen sind.NP-hard

Willard Zhan
quelle
Aber wenn ich in der Beispielmatrix ¯ x 2 und x 3 wähle, komme ich immer noch zum Ziel. Was mache ich falsch? Außerdem sollte das X in ¯ x 1 ( 1 ) eine Spalte rechts und das X in ¯ x 1 ( 2 ) eine Spalte links seinx1¯ x2¯x3Xx1¯(1)Xx1¯(2)
rotia
@rotia Ja, und das bedeutet, dass Sie auf der linken Seite auswählen müssen, um 4 X zu haben . Das entspricht also einer zufriedenstellenden Zuordnung x 1 = x 2 = 1 , x 3 = 0 . x1,x2,x3¯4Xx1=x2=1,x3=0
Willard Zhan
Können Sie erklären, was "Angenommen, größer als eins in den beiden Auftrittszahlen der Literale x i und ¯ x i ." meint? Wie oft erscheint ein Literal? Entspricht das der Position, an der es in den Klauseln / Formeln vorkommt, oder wie oft es in der Formel vorkommt? Ist k i ein Literal oder eine Zahl? kixixi¯ki
DW
@ DW ist eine Zahl. Mein Ausdruck war in der Tat nicht ganz klar; Ich habe es bearbeitet. ki
Willard Zhan
@ WillardZhan Ja. Aber wenn ich diese Variablen auswähle, kann ich zu einem Wert gelangen, der größer ist als der in der Formel. Zum Beispiel setze ich und X = 7 , gemäß der Formel sollte ich nur auf 450 Punkte kommen (vorausgesetzt k ist die Anzahl der Klauseln). Aber wenn ich x 1 , x 2 , ¯ x 3 wähle , erreiche ich 452 Punkte, indem ich die vier rechts Y=60X=7kx1,x2,x3¯
auswähle
3

Diese Lösung hat Probleme und wird in Kürze gelöscht. Siehe templatetypedefs Kommentar.

Sie können dies in polynomialer Zeit mit minimalem Kostenfluss lösen . Im Folgenden haben alle Kanten die Einheitenkapazität.

  • Erstellen Sie einen Quellscheitelpunkt und einen Zielscheitelpunkt t . Wir senden k Durchflusseinheiten von s nach t .stkst
  • Erstellen Sie Eckpunkte v 0 , , v n , um die Zeitpunkte zwischen Schlitzen und einer gerichteten Kante v j v j + 1 für jeweils 0 j < n mit den Kosten 0 darzustellen .n+1v0,,vnvjvj+10j<n
  • Erstellen Sie für jede Person Folgendes: i
    • Ein Unterquellenscheitelpunkt und ein Untersenkenscheitelpunkt t i .siti
    • Für jedes , eine Kante von s i bis v j mit Kosten Σ j k = 1 h ( i , k ) (die wir nehmen zu 0 , wenn j = 0 ).0j<nsivjΣk=1jh(i,k)j=0
    • Für jede ist eine Kante von v j zu t i mit Kosten - Σ j k = 1 h ( i , k ) .1jnvjtiΣk=1jh(i,k)
    • Eine Kante mit Kosten 0.ssi
    • Eine Kante mit Kosten 0.tit

Ein Mindestkostenfluss in diesem Netzwerk hat Gesamtkosten in Höhe des Negativs des bestmöglichen Gewinns. (Diese Kosten sind negativ, aber das ist kein Problem.) Es gibt eine optimale integrale Lösung, bei der jede Person, für die eine einzelne Kante habe, s i mit einem Fluss von 1 verlässt und eine einzelne Kante bei t i mit einem Fluss von 1 ankommt und alle anderen Kanten trifft auf entweder s i oder t i 0 Fluss haben. Lassen Sie diese Fluss-1-Kanten für Person i sein s i v j und v k t i : dann k jisitisitiisivjvktikj, da die einzigen Pfade unter Vertices diejenigen sind, die den Index erhöhen. Wenn k = j , dann wird der Person i kein Zeitschlitz zugewiesen; andernfalls wird der Person i der Block von Zeitschlitzen j + 1 , ... , k zugewiesen .vk=jiij+1,,k

Intuitiv "bekommt" jede Person 1 Durchflusseinheit von und wählt eine Startzeit (Flanke) und eine Endzeit (Flanke); Diese Start- und Endkanten sind die einzigen Kanten mit Kosten ungleich Null im Netzwerk, und wir können den Wert eines Blocks j + 1 , , k als Differenz zweier Präfixsummen darstellen. Die Einheitenkapazitäten an den Kanten zwischen den v- Vertices verhindern, dass 2 Personen den gleichen Zeitschlitz verwenden.sj+1,,kv

Interessanterweise funktioniert diese Formulierung auch dann, wenn die Werte negativ sein können.h(i,j)

j_random_hacker
quelle
3
Könnte dieses fehlschlagen , wenn irgendeine Person eine Route von der Quelle nimmt an einem anderen Person der Spüle und umgekehrt? i
Templatetypedef
@ templatetypedef: Ich glaube, du hast recht; Ich werde diese Antwort in Kürze löschen. Was ist stattdessen mit dieser Konstruktion: Wir haben die gleichen Eckpunkte und Kanten wie zuvor, aber jetzt versuchen wir, eine einzelne Flusseinheit durch eine "Pipeline" von Personen (geordnet nach Erhöhung des Werts) zu "fädeln", indem wir alle Kanten s s i löschen mit Ausnahme von s s 1 und allen Kanten t i t mit Ausnahme von t k t und Hinzufügen einer Kante t i s i + 1 mit großen negativen Kosten - M für jede 1 i < kississ1tittkttisi+1M1i<k. Die zwingen die einzelne Durchflusseinheit, alle k - 1 dieser "Pipeline" -Kanten in jeder optimalen Lösung zu besuchen . Mk1
j_random_hacker
@j_random_hacker dann erzwingen Sie eine Bestellung der Personen. k
Chao Xu
@ChaoXu: Ich glaube nicht: in jeder Zuordnung von Blöcken zu den Menschen, die Zuordnung kann aufgeführt werden , um von Person zu erhöhen. (Beachten Sie, dass nichts verbietet, dass einer Person ein Block zugewiesen wird, der mit j ' < j endet , wobei j der erste Block ist, der der Person i zugewiesen wird .) Ich habe jedoch das Gefühl, ein enger Verwandter des Problems zu sein, das meine erste betroffen hat Versuch betrifft auch dieses ...i>ij<jji
j_random_hacker
@j_random_hacker Die Kosten von würden erfordern, dass s i die i- te Person in der optimalen Lösung ist. sivjsii
Chao Xu