BinPacking - TU Ilmenau

Werbung
Zu Abschnitt 2.8:
BinPacking (Suchvariante) als stark NP-vollständiges Problem
(Such-)Problem BinPacking
Input: x = (a1 , . . . , an , b, `), alles natürliche Zahlen.
Gesucht: Aufteilung der n Objekte mit Volumina a1 , . . . , an auf ` Behälter
mit Größe b.
Technisch: Eine Lösung für x ist eine Funktion % : {1, . . . , n} → {1, . . . , `}
mit der Eigenschaft, dass für jedes j ∈ {1, . . . , `} gilt:
X
ai ≤ b.
1≤i≤n
%(i)=j
Wir wissen schon, dass BinPacking NP-vollständig ist, wobei das Problem
Partition auf BinPacking reduziert wurde. Bei beiden Problemen handelt
es sich um Zahlprobleme; man kann zeigen, ähnlich wie bei Rucksack∗ , dass
Partition einen pseudopolynomiellen Algorithmus hat. Wiederum ähnlich
hierzu kann man sich überlegen, dass BinPacking mit 2 Behältern (k = 2
fixiert) einen pseudopolynomiellen Algorithmus hat. Interessanterweise ist
BinPacking selbst aber stark NP-vollständig. Hierfür wird eine ganz
andere Reduktion benötigt.
(Such-)Problem 3-PartiteMatching (3PM)
Input: Mengen A, B, C mit |A| = |B| = |C| = n, Menge E ⊆ A × B × C.
Gesucht: Ein 3-partites perfektes Matching“, das ist eine Menge M ⊆ E
”
mit |M | = n derart, dass die ersten Komponenten der Elemente von M ganz
A ergeben, die zweiten ganz B, die dritten ganz C.
Technisch:
(1)
∀a ∈ A ∃b ∈ B, c ∈ C :
∀b ∈ B ∃a ∈ A, c ∈ C :
∀c ∈ C ∃a ∈ A, b ∈ B :
(a, b, c) ∈ M ;
(a, b, c) ∈ M ;
(a, b, c) ∈ M.
Das Problem 3-PartiteMatching ist ein strukturelles Problem, kein Zahlproblem. Wir haben durch direkte Reduktion von 3-SAT bewiesen, dass es
NP-vollständig ist (Satz 2.7.1).
1
Wir wollen nun zeigen:
Satz 2.8.5 (Teil)
3PM ≤p BinPacking via (f, h), wobei die Reduktionsfunktion f die Eigenschaft hat, dass die größte Zahl, die in f (x) vorkommt, nicht größer als
O(|f (x)|4 ) ist.
(Mit Satz 2.8.4 folgt dann, dass BinPacking stark NP-vollständig ist.)
Beweis: Gegeben sei eine Eingabe x für 3PM, mit folgenden Komponenten:
A
B
C
E
=
=
=
⊆
{a1 , . . . , an }
{b1 , . . . , bn }
{c1 , . . . , cn }
A×B×C
(Männer)
(Frauen)
(Häuser)
(Menge der kompatiblen Tripel)
Wir konstruieren einen Input f (x) für BinPacking, der nicht allzu große
Zahlen enhält, und für den gilt:
(2)
x ∈ 3PM ⇒ f (x) ∈ BinPacking.
(Später geben wir eine polynomialzeitberechenbare Abbildung h an, die zu
x und einer Lösung für f (x) eine Lösung für x liefert.)
Für die Konstruktion von f (x) gehen wir so vor: Wir bringen die Kanten in
eine beliebige, aber feste Anordnung E = (t1 , . . . , tm ) und bilden für jeden
Eintrag ts = (ai , bj , ck ) in dieser Liste vier Tripel:
B
C
ts = (ai , bj , ck ), tA
s = (ai , bj , ck ), ts = (ai , bj , ck ), ts = (ai , bj , ck ).
Die unterstrichenen Komponenten werden eventuell noch modifiziert, wie
folgt: Wenn der Eintrag ai in t1 , . . . , ts−1 nicht vorkommt ( erstes Vorkom”
1
men“), schreiben wir tA
s = (ai , bj , ck ). Analog gehen wir für bj und ck vor:
erste Vorkommen von unterstrichenen Varianten werden mit einer hochgestellten 1 markiert.
Diesen 4m Tripeln werden nun Volumina, also Zahlen, zugeordnet. In den
Input f (x) für BinPacking gelangen natürlich nur diese 4m Zahlen sowie
die Kapazität bx und die Binanzahl `x .
Wir wählen eine Zahl K, die um einen genügend großen Faktor größer als n
ist, zum Beispiel K = 100n.
2
Es sei ts = (ai , bj , ck ) ein Eintrag in E.
Tripel ts = (ai , bj , ck ) erhält Volumen
(3)
ws = 8 + 10K 4 − iK − jK 2 − kK 3 .
Das Tripel tA
s erhält Volumen
1 + 10K 4 + iK,
A
(4)
ws =
1 + 11K 4 + iK,
1
falls tA
s = (ai , bj , ck ),
falls tA
s = (ai , bj , ck ).
Man durchläuft also E = (t1 , . . . , tm ) von links nach rechts und schaut für
jedes ai ∈ A nach, an welcher Stelle es zum ersten Mal in der Version ai
erscheint. Dieses Tripel erhält dann den besonderen Wert (Summand 10K 4 ),
die weiteren Vorkommen von ai führen zu dem anderen Wert (Summand
11K 4 ).
Das Tripel tB
s erhält Volumen
2 + 10K 4 + jK 2 ,
B
(5)
ws =
2 + 11K 4 + jK 2 ,
1
falls tB
s = (ai , bj , ck ),
falls tB
s = (ai , bj , ck ).
Das Tripel tC
s erhält Volumen
4 + 10K 4 + kK 3 ,
C
(6)
ws =
4 + 8K 4 + kK 3 ,
1
falls tC
s = (ai , bj , ck ),
C
falls ts = (ai , bj , ck ).
Dies ergibt 4m Volumina. Nun setzen wir noch die Behältergröße auf bx =
15 + 40K 4 fest und die Behälter-Anzahl auf `x = m. Zusammen ergibt sich:
A
B
C
f (x) = (w1 , w1A , w1B , w1C , . . . , wm , wm
, wm
, wm
, 40K 4 + 15, m).
Wir müssen nun (2) beweisen. Um zu verstehen, wie mögliche Bepackungen
aussehen, muss man sich zuerst klarmachen, dass der K 4 -Summand in den
Volumina dominierend ist. (Weil K eine so große Zahl ist, ist jedes iK 3 um
mehr als den Faktor 100 kleiner als K 4 .) Um einen Behälter mit Kapazität
etwa 40K 4 zu füllen, könnten wir vier Tripel mit Volumen je etwa 10K 4
nehmen oder eines mit 10K 4 , zwei mit 11K 4 und eines mit 8K 4 .
Lemma 1.
Die Summe aller Volumina in f (x) ist m(15 + 40K 4 ).
3
Das bedeutet: wenn man die Tripel in f (x) in die m Behälter der Größe
15 + 40K 4 verpacken kann, dann geht das nur so, dass jeder Behälter bis
zum Rand gefüllt ist.
B C
Beweis des Lemmas: Wir summieren die Beiträge für ts = (ai , bj , ck ), tA
s ,ts ,ts .
Das Resultat ist
15 + 40K 4 + xs · K 4 ,
wobei xs ∈ {−2, −1, 0, 1, 2} und der Wert von xs dadurch bestimmt wird,
wieviele und welche der Komponenten ai , bj , ck in ts zum ersten Mal auftauchen (in E von links nach rechts gesehen). Nun passiert es genau n-mal, dass
ein ai zum ersten Mal auftaucht (+1), ebenso für die bj (+1), ebenso für die
ck (−2); daher ist die Summe aller xs gleich 0 und die Summe aller Volumina
gleich m(15 + 40K 4 ).
Nun kommen wir zum Beweis von (2).
Sei x = (A, B, C, E) ein Input für 3PM und sei M ⊆ E ein perfektes 3partites Matching (mit den in (1) genannten Eigenschaften). Wir können
sagen: M = {ts | s ∈ I} für eine Menge I ⊆ {1, . . . , m} mit n Elementen.
Nun packen wir n Behälter mit Tripeln voll, die zu den ts , s ∈ I, gehören,
und m − n mit den restlichen, wie folgt.
In Behälter Nummer s kommt ts = (ai , bj , ck ), weiterhin das Tripel tA
s0 =
1
(ai , bj 0 , ck0 ), in dem (in E von links gesehen) ai zum ersten Mal auftaucht,
1
das Tripel tB
s00 = (ai00 , bj , ck00 ), in dem bj zum ersten Mal auftaucht, und das
1
Tripel tC
s000 = (ai000 , bj 000 , ck ), in dem ck zum ersten Mal auftaucht. Wenn man
die Volumina dieser vier Tripel addiert, erhält man nach der Definition ((3),
(4), (5), (6)):
ws + wsA0 + wsB00 + wsC000
= (8 + 10K 4 − iK − jK 2 − kK 3 ) + (1 + 10K 4 + iK)
+ (2 + 10K 4 + jK 2 ) + (4 + 10K 4 + kK 3 )
= 15 + 40K 4 = bx .
In die restlichen m−n Behälter packen wir die verbleibenden 4(m−n) Tripel,
und zwar folgendermaßen: Ein Tripel ts = (ai , bj , ck ), mit s ∈
/ I, weiterhin
A
0
0
irgendein Tripel ts0 = (ai , bj , ck ), in dem (in E von links gesehen) ai zum wiederholten Mal auftaucht, und irgendein Tripel tB
`00 = (ai00 , bj , ck00 ), in dem bj
zum wiederholten Mal auftaucht, und irgendein Tripel tC
`000 = (ai000 , bj 000 , ck ), in
4
dem ck zum wiederholten Mal auftaucht. (Man macht sich klar, dass das genau aufgeht“, weil z. B. die Anzahl der Vorkommen von ai in einem puren“
”
”
Tripel (ai , bj , ck ) ebenso groß ist wie die Anzahl der Vorkommen von a1i und
ai zusammen.) Wenn man die Volumina dieser vier Tripel zusammenzählt,
bekommt man nach der Definition ((3), (4), (5), (6)):
ws + wsA0 + wsB00 + wsC000
= (8 + 10K 4 − iK − jK 2 − kK 3 )
+ (1 + 11K 4 + iK) + (2 + 11K 4 + jK 2 ) + (4 + 8K 4 + kK 3 )
= 15 + 40K 4 = bx .
Damit sind die Volumina aus f (x) in m Behälter verpackt – jeder der Behälter
ist exakt voll.
(Siehe das Ende dieses Abschnittes für ein Beispiel.)
Nun müssen wir zu gegebenem 3PM-Input x = (A, B, C, E) und einer Aufteilung % der Objekte in f (x) auf `x = m Behälter ein perfektes 3-partites
Matching M = h(x, %) konstruieren.
Weil K so groß ist, ist das Volumen jedes Objekts größer als 8K 4 + 3 = bx /5.
Daher liegen in jedem Behälter höchstens 4 Objekte. Weil es aber genau 4m
Objekte gibt, die auf m Behälter aufgeteilt sind, müssen in jedem Behälter
genau 4 Objekte liegen. Nach Lemma 1 wissen wir, dass die Summe der
Volumina der Objekte in jedem Behälter genau 15 + 40K 4 ist.
Unser Ziel ist es zu zeigen, dass n von diesen Behältern Tripel (ai , bj , ck )
enthalten, die zusammen ein Matching bilden.
Y
Betrachten wir zunächst einen ganz beliebigen Behälter mit Tripeln tX
s1 , ts2 ,
tZs3 , tUs4 , wobei X, Y, Z, U entweder A, B, C oder nichts“ sind. Wenn wir die
”
Volumina modulo K nehmen, sehen wir, dass die 4 einzelnen Zahlen aus
{1, 2, 4, 8}, die in wsX1 , wsY2 , wsZ3 , wsU4 vorkommen, sich zu 15 addieren müssen.
Nun gibt es nur eine einzige Möglichkeit, 4 Summanden (auch mit Wiederholungen) aus {1, 2, 4, 8} auszuwählen, so dass die Summe 15 ist, nämlich jede
der Zahlen 1, 2, 4, 8 einmal. Das heißt, dass in unserem Behälter 4 Objekte
liegen müssen, die zu den 4 verschiedenen Arten gehören:
e(A)
ts = (ai , bj , ck ), tA
s0 = (ai0
e(B)
e(C)
C
, bj 0 , ck0 ), tB
s00 = (ai00 , bj 00 , ck00 ), ts000 = (ai000 , bj 000 , ck000 ).
Dabei sind die Markierungen e(A), e(B), e(C) jeweils 1 oder nichts“. Da die
”
Terme in den Volumina, die Vielfache von K 3 , K 2 und K sind, die Anteile,
5
die von den K 4 -Termen her kommen, nicht ausgleichen können, gibt es nur
zwei Fälle:
B
C
4
Typ 1: Der Beitrag von tA
s0 , ts00 und ws000 ist jeweils 10K . Dann gehören alle
diese Tripel zu ersten Vorkommen“, also ist e(A) = e(B) = e(C) = 1.
”
B
4
C
4
Typ 2: Der Beitrag von tA
s0 und ts00 ist jeweils 11K , der von ws000 ist 8K .
Dann gehören alle drei Tripel zu wiederholten Vorkommen“, also sind e(A),
”
e(B), e(C) alle nichts“.
”
Offensichtlich gibt es n Behälter vom Typ 1 (weil es n verschiedene AObjekte, B-Objekte und C-Objekte gibt), und dann noch m − n Behälter
vom Typ 2.
Wir betrachten nun einen festen Behälter vom Typ 1, mit Objekten
1
1
B
1
C
ts = (ai , bj , ck ), tA
s0 = (ai0 , bj 0 , ck0 ), ts00 = (ai00 , bj 00 , ck00 ), ts000 = (ai000 , bj 000 , ck000 ).
Wir haben die Gleichung
ws + wsA0 + wsB00 + wsC000 = 15 + 40K 4 .
Wenn wir auf beiden Seiten 15 + 40K 4 subtrahieren, ergibt sich
(−iK − jK 2 − kK 3 ) + i0 K + j 00 K 2 + k 000 K 3 = 0,
oder
(i0 − i)K + (j 00 − j)K 2 + (k 000 − k)K 3 = 0.
Weil K viel größer als jede der Differenzen (i0 − i) und (j 00 − j) ist, folgt
daraus, dass k = k 000 , j = j 00 und i = i0 sein muss. In diesem Behälter vom
Typ 1 sehen also das A-Tripel, das B-Tripel und das C-Tripel so aus:
1
1
B
C
1
tA
s0 = (ai , . . .), ts00 = (. . . , bj , . . .), ts000 = (. . . , ck ).
Weil nun jedes der Objekte ai ∈ A, bj ∈ B, ck ∈ C in der Folge E genau
einmal zum ersten Mal vorkommen kann, und in den n Behältern vom Typ
1 genau 3n solche erste Vorkommen“ vorliegen, kommt jedes Objekt aus
”
A, B und C genau einmal im gewöhnlichen Tripel (ai , bj , ck ) in einem der n
Behälter vom Typ 1 vor. Wenn wir also definieren:
M := {(ai , bj , ck ) | (ai , bj , ck ) steht in einem Typ-1-Behälter},
dann bildet M ein perfektes 3-partites Matching zu E.
6
Beispiel für die Reduktion 3-PM ≤p BINPACKING (Suchvariante)
A = {Axel, Alf, Arne}, B = {Bine, Babs, Bea}, C = {Haus, Villa, Zelt}.
E = {(Axel, Bine, Haus), (Arne, Bea, Haus), (Axel, Babs, Villa),
(Alf, Babs, Zelt), (Alf, Bine, Zelt)}.
Die zu verpackenden Objekte, mit Indizes und Volumina:
10 Axel
11 Axel1
12 Axel
13 Axel
Bine
Bine
Bine1
Bine
Haus
Haus
Haus
Haus1
1 1 1
1 1 1
1 1 1
1 1 1
8 + 10 · 3004 − 300 − 3002 − 3003
1 + 10 · 3004 + 300
2 + 10 · 3004 + 3002
4 + 10 · 3004 + 3003
20 Arne
21 Arne1
22 Arne
23 Arne
Bea
Bea
Bea1
Bea
Haus
Haus
Haus
Haus
3 3 1
3 3 1
3 3 1
3 3 1
8 + 10 · 3004 − 3 · 300 − 3 · 3002 − 3003
1 + 10 · 3004 + 3 · 300
2 + 10 · 3004 + 3 · 3002
4 + 8 · 3004 + 3003
30 Axel
31 Axel
32 Axel
33 Axel
Babs
Babs
Babs1
Babs
Villa
Villa
Villa
Villa1
1 2 2
1 2 2
1 2 2
1 2 2
8 + 10 · 3004 − 300 − 2 · 3002 − 2 · 3003
1 + 11 · 3004 + 300
2 + 10 · 3004 + 2 · 3002
4 + 10 · 3004 + 2 · 3003
40 Alf
41 Alf1
42 Alf
43 Alf
Babs
Babs
Babs
Babs
Zelt
Zelt
Zelt
Zelt1
2 2 3
2 2 3
2 2 3
2 2 3
8 + 10 · 3004 − 2 · 300 − 2 · 3002 − 3 · 3003
1 + 10 · 3004 + 2 · 300
2 + 11 · 3004 + 2 · 3002
4 + 10 · 3004 + 3 · 3003
50 Alf
51 Alf
52 Alf
53 Alf
Bine
Bine
Bine
Bine
Zelt
Zelt
Zelt
Zelt
2 1 3
2 1 3
2 1 3
2 1 3
8 + 10 · 3004 − 2 · 300 − 3002 − 3 · 3003
1 + 11 · 3004 + 2 · 300
2 + 11 · 3004 + 3002
4 + 8 · 3004 + 3 · 3003
Ein perfektes Matching in E ist M = {(Arne, Bea, Haus), (Axel, Babs, Villa), (Alf, Bine, Zelt)}.
Die entsprechenden Behälter mit Typ-I-Füllung enthalten folgende Objekte:
(20, 21, 22, 13), (30, 11, 32, 33), (50, 41, 12, 43).
Die verbleibenden Behälter mit Typ-II-Füllung enthalten folgende Objekte:
(10, 31, 52, 23), (40, 51, 42, 53).
7
Herunterladen