• No results found

Polynomiale approximaties

2.3 Het 0-1 knapzakprobleem

2.3.5 Polynomiale approximaties

Behalve het gretige algoritme kunnen ook andere polynomiale approximaties worden opgesteld. We zullen eerst een approximatieschema bespreken dat in 1975 door Sahni is voorgesteld.7 We gaan weer uit van objecten die naar afnemende pj

aj gesorteerd zijn. Voor een gegeven vaste k nemen we alle deelverz. M ⊆ N = {1, 2, . . . , n} met |M | ≤ k en zdd. Pj∈M aj ≤ b, dus de elementen van M passen in de knapzak. Vervolgens gaan we voor de rest van het volume van de knapzak, d.w.z. b = b −Pj∈M aj, deze vullen volgens het gretige algoritme. Voor k = 0 is deze methode dus het gretige algoritme zelf. Het aantal deelverz. met hoogstens k elementen is Pk

i=0

¡n

i

¢

= O(nk) en het testen of Pj∈M aj ≤ b is van O(k) = O(1), want k is een constante: de methode als geheel is dus polynomiaal.

Voorbeeld 2.1 (vervolg)

Voor k = 0 hebben we reeds gezien dat het gretige algoritme x1:= x2 := 1, x3:= 0, x4 := 1 met waarde 25 oplevert.

Voor k = 1 krijgen we, naast k = 0, vier mogelijke keuzes van M :

M = {1}: b := 9 en naast x1 := 1 : x2 := 1, x3 := 0, x4:= 1 met waarde 25. M = {2}: b = 10 en naast x2:= 1 : x1:= 1, x3:= 0, x4 := 1 met waarde 25. M = {3}: b := 8 en naast x3 := 1 : x1 := 1, x2 := 0, x4:= 1 met waarde 28. M = {4}: b := 11 en naast x4 := 1 : x1 := 1, x2 := 1, x3:= 0 met waarde 25.

Hieronder geven we eerste het gretige algoritme nadat een bepaalde M is gekozen. In de verz. X staan de componenten van x die de waarde 1 hebben. De uitvoer van het algoritme bevat verder p, de waarde van de doelfunctie bij X.

Algoritme 2.3 Het gretige algoritme voor een M ⊆ {1, 2, . . . , n} met Pj∈M aj ≤ b.

Invoer: Een 0-1 knapzakprobleem in de vorm (2.3) en een M ⊆ {1, 2, . . . , n} metPj∈M aj ≤ b. Uitvoer: Een X ⊇ M zdd. xj = 1 d.e.s.d. als j ∈ X een benaderende oplossing van (2.3) is, verkregen met het gretige algoritme nadat eerst aan xj de waarde 1 is toegekend voor alle j ∈ M .

1. b :=Pj∈M aj; X := M .

2. for j = 1 step 1 until n do if j /∈ M en b+ aj ≤ b then

begin X := X ∪ {j}; b:= b+ aj end

Vervolgens geven we het algoritme van Sahni voor een bepaalde k. In dit algoritme wordt gebruik gemaakt van bovenstaand algoritme. In de verz. X staat de tot nu toe beste X.

Algoritme 2.4 Het algoritme van Sahni voor een bepaalde k

Invoer: Een 0-1 knapzakprobleem in de vorm (2.3) en een 0 ≤ k ≤ n.

Uitvoer: Een X zdd. xj = 1 d.e.s.d. als j ∈ X een benaderende oplossing van (2.3) is, verkregen als beste oplossing van de oplossingen van Algoritme 2.3 als alle keuzes M met |M | ≤ k worden bekeken.

1. waarde := 0.

2. for all M ⊆ {1, 2, . . . , n} met |M | ≤ k en Pj∈M aj ≤ b do begin voer Algoritme 2.3 uit en dit geeft X; p:=Pj∈X pj;

if p> waarde then begin waarde := p; X:= X end end

De complexiteit van Algoritme 2.3 is O(n). In Algoritme 2.4 wordt Pki=0¡ni¢ keer Algoritme 2.3 uitgevoerd. Omdat ¡ni¢ ≤ ni ≤ nk en k een constante is, wordt Algoritme 2.3 O(nk) keer uitgevoerd: Algoritme 2.4 heeft de polynomiale complexiteit O(nk+1).

Stelling 2.4

Algoritme 2.4 heeft kwaliteit k+1k .

Bewijs

Neem een vaste k. We moeten bewijzen dat voor iedere instantie de approximatie minstens k+1k maal de waarde van het optimum is en dat er een instantie is die deze fractie willekeurig dicht benadert. Neem een instantie en laat X de verz. items zijn die in het optimum worden gekozen met optimale waarde z.

Als |X| ≤ k: Algoritme 2.4 geeft een optimale oplossing, dus het klopt. Als |X| ≥ k + 1:

Laat M de verz. van k items uit X zijn met de grootste p-waarden en laten j1, j2, . . . , jr de andere items uit X zijn, waarbij de nummering zo is dat pj1

aj1 pj2

aj2 ≥ · · · ≥ pjr

ajr. Dan geldt: z =Pj∈X pj =Pj∈M pj+Pri=1 pji met pji ≤ pj, j ∈ M, zodat

z ≥ k · pji+

r

X

l=1

pjl ≥ (k + 1) · pji voor i = 1, 2, . . . , r (2.11)

Beschouw de iteratie van Algoritme 2.4 waarin M = M en laat jm het eerste item uit j1, j2, . . . , jr zijn dat door het gretige Algoritme 2.3 niet in de knapzak wordt opgenomen. Als jm niet bestaat, dan worden alle optimale items in de knapzak gekozen; dus de verkregen benadering is de optimale oplossing. Veronderstel dus verder dat jm wel bestaat.

Omdat de items van X = M∪ {j1, j2, . . . , jr} in de knapzak kunnen, kunnen we schrijven: Pr

i=m pji =Pri=m pji

aji · aji pjm

ajm ·Pri=m ·aji ≤ b·pjm

Hieruit volgt: z ≤ X j∈M∗ pj+ m−1X i=1 pji+ b· pjm ajm (2.12)

In de approximatie zitten in ieder geval de elementen van M∪ {j1, j2, . . . , jm−1}. Zij Y de indices i van de overige items die in de approximatie in de knapzak komen en waarvoor geldt dat i ≤ jm, d.w.z. pi

ai pjm

ajm voor i ∈ Y , en laat z de waarde van de approximatie zijn. Dan is z X j∈M∗ pj+ m−1X i=1 pji+X i∈Y pi (2.13)

Omdat item jm in de approximatie niet in de knapzak komt, maar wel wordt bekeken op het moment dat j1, j2, . . . , jm−1∪ Y (en verder niets) in de knapzak zijn gekozen, geldt: ajm > bPi∈Y ai, zodat b·pjm

ajm < pjm+pjm

ajm·Pi∈Y ai ≤ pjm+Pi∈Y pi

ai·ai= pjm+Pi∈Y pi. Met (2.12) en (2.13) geeft dit z <Pj∈M pj+Pm−1i=1 pji+ pjm+Pi∈Y pi ≤ z+ pjm, waaruit m.b.v. (2.11) volgt dat z < z+ 1

k+1z, d.w.z. kz < (k + 1)z, ofwel z∗

z > k k+1. Tenslotte geven we een instantie is die de fractie k

k+1 willekeurig dicht benadert.

Neem n = k + 2, p1 = 2, a1 = 1, pj = aj = L en b = (k + 1)L. De optimale oplossing is

x1 = 0, xj = 1, j = 2, 3, . . . , n met optimum z = (k + 1)L. De approximatie geeft z = 2 + kL. Voor L voldoende groot benadert zz = (k+1)L2+kL willekeurig dicht het getal k+1k .

Een heuristiek heet een ε-approximatieschema voor een maximaliseringsprobleem als voor iedere instantie I van het probleem H(I) ≥ (1 − ε)O(I). Een approximatieschema heet een polynomiaal approximatieschema als de complexiteit van de heuristiek begrensd wordt door een polynoom in de inputgrootte van de instantie. Het mag in dit geval wel exponentieel in 1

ε zijn, maar dan duurt het voor kleine waarden van ε erg lang om dicht bij het optimum te komen. Een volledig polynomiaal approximatieschema is een polynomiaal approximatieschema dat ook polynomiaal is in 1

ε en dat voor iedere ε een ε-approximatieschema is.

Voor de methode van Sahni geldt voor iedere instantie I dat H(I) ≥ k+1k O(I) = (1 − ε)O(I) met ε = k+11 . De complexiteit van de methode is O(nk+1) = O(n1ε). Deze methode is dus wel een polynomiaal approximatieschema, maar geen volledig polynomiaal approximatieschema.

Een heuristiek heet een absoluut approximatieschema voor een optimaliseringsprobleem als het algoritme polynomiaal is en er een natuurlijke getal K bestaat zdd. |H(I) − O(I)| ≤ K voor iedere instantie I van het probleem.

Stelling 2.5

Bewijs

Veronderstel dat er wel een polynomiaal algoritme en een k zijn zdd. |H(I) − O(I)| ≤ K voor iedere instantie I. We zullen nu bewijzen dat een polynomiaal algoritme is dat het knapzak-probleem exact oplost, wat inhoudt dat P = N P.

Neem een instantie I van het knapzakprobleem. Als H(I) 6= O(I), dan is |H(I) − O(I)| ≥ 1. Construeer een nieuwe instantie I van het knapzakprobleem door iedere pj te vermenigvuldigen met K +1. De oplossingen van Izijn dan dezelfde als van I, maar de waarde van iedere oplossing is K + 1 keer zo groot. Pas nu de heuristiek toe op I. We weten dan dat |H(I) − O(I)| ≤ K en anderzijds dat |H(I) − O(I)| = (K + 1) · |H(I) − O(I)| ≥ K + 1, wat een tegenspraak oplevert. Voor alle instanties moet dus H(I) = O(I) zijn, d.w.z. wordt het knapzakprobleem door de heuristie exact opgelost. Tevens is de heuristiek polynomiaal.

We zullen tot slot van deze paragraaf een volledig polynomiaal approximatieschema geven voor het 0-1 knapzakprobleem.8 Voor iedere gegeven ε > 0 geeft het algoritme een S ⊆ {1, 2, . . . , n} zdd. Pj∈S aj ≤ b en Pj∈S pj 1+ε1 Pj∈S pj voor iedere S ⊆ {1, 2, . . . , n} met Pj∈S aj ≤ b. Hieruit volgt voor iedere instantie I: H(I) ≥ 1

1+εO(I), d.w.z. dat het optimum willekeurig dicht te benaderen is.

We gebruiken tijdens het algoritme de notatie p(S) =Pj∈S pj voor een S ⊆ {1, 2, . . . , n}. Het idee is gebaseerd op een implementatie van de exacte dynamisch programmeringsmethode, die complexiteit O(n·C) heeft met C =Pnj=1 pj.9 Door nu in plaats van de pj’s getallen p

j = bpj

tc te nemen wordt de looptijd van het algoritme met een factor t (ruwweg) gereduceerd. Wel verliezen we nauwkeurigheid omdat we een wat ander probleem oplossen.

Algoritme 2.5 Een volledig polynomiaal approximatieschema voor het 0-1 knapzakprobleem Invoer: Een 0-1 knapzakprobleem in de vorm (2.3) en een ε > 0.

Uitvoer: Een S zdd. xj = 1 d.e.s.d. als j ∈ S een 1+εε -approximatie is, verkregen met een volledig polynomiaal approximatie schema.

1. Voer het gretige algoritme uit Opgave 2.1 uit: dit geeft S1. 2. t := max©1,εp(S1)

n

ª ;

for j = 1 step 1 until n do p j := bpj

t c.

3. Pas de dynamisch programmeringsmethode uit Opgave 2.2 uit met C = 2p(S1)

t toe op het probleem {Pnj=1 pjxj ¯ ¯ ¯ Pnj=1 ajxj ≤ b; xj ∈ {0, 1}, 1 ≤ j ≤ n}: dit geeft S2. 4. if p(S1) > p(S2) then S := S1 else S := S2.

8Het idee voor dit volledig polynomiaal approximatieschema is afkomstig van Ibarra en Kim: O.H. Ibarra and C.E. Kim, Fast approximation algoritmes for the knapsack and sum of subset problem, Journal of the ACM 22 (1975) 463–468.

Voorbeeld 2.1 (vervolg)

We passen Algoritme 2.5 toe met ε = 0.2.

Het gretige algoritme geeft S1= {1, 2, 4} met p(S1) = 25. t := max©1,54ª= 54; p

1 := 9, p

2:= 6, p

3 := 8, p

4 := 4. Het nieuwe probleem is:

max {9x1+ 6x2+ 8x3+ 4x4 | 5x1+ 4x2+ 6x3+ 3x4≤ 14; xj ∈ {0, 1}, 1 ≤ j ≤ 4}. De dynamische programmeringsmethode geeft: S2 = {1, 3, 4} met p(S2) = 28. S := S2 en de gevonden benadering is: x1 = 1, x2 = 0, x3 = x4= 1 met waarde 28.

Stelling 2.6

Algoritme 2.5 is een correct volledig polynomiaal approximatieschema met complexiteit O(n2·1

ε). Bewijs

Zij S een optimale oplossing van het oorspronkelijke probleem. Omdat het gretige algoritme uit Opgave 2.1 kwaliteit 1

2 heeft, geldt p(S1) ≥ 1

2p(S). Hieruit volgt dat de C = 2p(S1)

t p(St) uit stap 4 van het algoritme een bovengrens is van het optimum van het probleem met p i.p.v. p, zodat stap 4 van het algoritme een optimale oplossing van het getransformeerde probleem geeft. S2 hoort dus bij een optimale oplossing van het getransformeerde probleem. Als t = 1, dan is p = p, zodat S2 hoort bij de optimale oplossing van het oorspronkelijke probleem. Veronderstel dus verder dat t = εp(S1)

n > 1. We kunnen schrijven p(S) ≥ p(S2) =Pj∈S2 pj Pj∈S2 tbpj t c = tPj∈S2 p j ≥ tPj∈S p j = tPj∈Sbpj tc ≥ tPj∈S ©pj t − 1ª=Pj∈S pj− t · |S| ≥ p(S) − t · n = p(S) − εp(S1) ≥ p(S) − εp(S).

Hieruit volgt dat p(S) ≥ 1+ε1 p(S).

De complexiteit van de stappen 1 en 2 is O(n). Omdat t ≥ εp(S1)

n , is 1

t n εp(S1). Hieruit volgt voor de complexiteit van stap 3: O(n · C) = O

³ n ·2p(S1) t ´ = O¡n2·1 ε ¢ . Opmerking:

Vaak kunnen we de verkregen oplossing nog verbeteren door een voor een de items die waarde nul hebben langs te gaan en te kijken of ze nog aan de oplossing kunnen worden toegevoegd. Vraag 2.1

Pas Algoritme 2.4 met k = 1 toe op het volgende probleem:

maximaliseer 350x1+ 400x2+ 450x3+ 20x4+ 70x5+ 8x6+ 5x7+ 5x8 onder de voorwaarden:

2.4 Het begrendse knapzakprobleem