• No results found

De First-Fit-Decreasing en Best-Fit-Decreasing heuristieken

2.6 Bin-packing probleem

2.6.4 De First-Fit-Decreasing en Best-Fit-Decreasing heuristieken

De heuristieken Next-Fit, First-Fit en Best-Fit zijn zogenaamde on-line heuristieken, d.w.z. dat als we een item toewijzen aan een bin deze beslissing wordt genomen op basis van de items die tot dan toe zijn bekeken; het volume van de toekomstige items speelt hierbij geen rol. Bij off-line heuristieken nemen we aan dat we alle items, ook de toekomstige, kennen. We kunnen ze dan bijvoorbeeld sorteren. Intu¨ıtief verwachten we betere resultaten te verkrijgen als we de items van groot naar klein (decreasing) sorteren. Yao heeft in 1980 een on-line algoritme opgesteld, de Refined-First-Fit (RFF) heuristiek, met asymptotische kwaliteit van 53.12 Van Vliet heeft bewezen dat on-line algoritmen altijd een asymptotische kwaliteit van minstens 1.5401... hebben.13 Het best bekende on-line algoritme is het zogenaamde HARM ON C + 1 algoritme van Richey.14 Dit algoritme heeft kwaliteit 1.5888. Hieronder geven we een bewijs dat een on-line algoritme altijd een asymptotische kwaliteit van minstens 32 heeft.

Stelling 2.11

Voor ieder on-line algoritme H geldt dat k(H) ≥ 32.

Bewijs

Neem een lijst L1 van 2n items met volume 12 − ε, gevolgd door een lijst L2 van 2n items met volume 12 + ε, waarbij ε < 16. Omdat voor de lijst L1 geldt dat O(L1) = n (doe in iedere bin 10Met een geavanceerde datastructuur, waarbij zogenaamde 2-3 bomen worden gebruikt, is een O(n log n) im-plementatie mogelijk. Voor de details zie: S. Martello and P. Toth, Knapsack problems: algoritmes and computer implementations, Wiley, 1990, p. 223 en A.V. Aho, J.E. Hopcroft and J.D. Ullman: Data structures and algoritmes, Addison-Wesley, 1983.

11

Zie bijvoorbeeld D.S. Johnson: Fast algoritmes for bin-packing, Journal of Computer and System Sciences 8 (1974) 272–314 en D.S. Johnson, A. Demers, J.D. Ullman, G.R. Garey and R.L. Graham: Worst-case performance bounds for simple one-dimensional packing algoritmes, SIAM Journal on Computing 3 (1974) 299–325.

12

A.C. Yao: New algoritmes for bin-packing, Journal of the ACM 27 (1980) 207–227.

13A. van Vliet: An improved lower bound for on-line bin-packing algorthms, Information Processing Letters 43 (1992) 277–284.

14M.B. Richey: Improved bounds for harmonic-based bin-packing algoritmes, Discrete Applied Mathematics 34 (1991) 203–227.

twee items) is H(L1) ≥ n. Omdat de instantie na L1 zou kunnen eindigen moeten bij een on-line algoritme de overige items elk in een aparte bin: H(L1 ∪ L2) ≥ n + 2n = 3n. Anderzijds is O(L1∪ L2) = 2n (stop 2n keer een item met volume 12− ε met een item met volume 12+ ε in een bin). Hieruit volgt dat k(H) ≥ limn→∞H(L1∪L2)

O(L1∪L2) ≥ limn→∞3n 2n = 32.

We nemen in de rest van deze paragraaf aan dat de items gesorteerd zijn zdd. a1 ≥ a2≥ · · · ≥ an. Johnson heeft in 1974 bewezen15 dat als we dan First-Fit toepassen geldt dat

F F D(I) ≤ 11

9 O(I) + 4 voor alle instaties I. Dit resultaat is in 1985 verbeterd door Baker16tot

F F D(I) ≤ 11

9 O(I) + 3 voor alle instaties I. Dit werd in 1991 door Yue17 verder verbeterd tot

F F D(I) ≤ 11

9 O(I) + 1 voor alle instaties I. Recentelijk is in 2007 een nog scherpere grens gevonden door D´osa:

F F D(I) ≤ 11

9 O(I) + 6

9 voor alle instaties I.

D´osa bewees bovendien dat deze grens scherp, d.w.z. niet verbeterd kan worden.18 Al deze resultaten impliceren dat k(F F D) ≤ 119. Next-Fit profiteert veel minder van een gesorteerde rij. Er kan worden bewezen dat k(N F D) = 1.691....19 Het volgende voorbeeld laat zien dat k(F F D) ≥ 119, zodat k(F F D) = 119.

Voorbeeld 2.9

Neem ε > 0 en voldoende klein. Neem een gesorteerde instantie met 30m items met

ai=                1 2 + ε i = 1, 2, . . . , 6m 1 4 + 2ε i = 6m + 1, 6m + 2, . . . , 12m 1 4 + ε i = 12m + 1, 12m + 2, . . . , 18m 1 4 − 2ε i = 18m + 1, 18m + 2, . . . , 30m

De optimale oplossing is: 6m bins met 12+ε,14+ε,14−2ε en 3m bins met 41+2ε,14+2ε,14−2ε,14−2ε. First-Fit Decreasing geeft: 6m bins met 12+ ε en 14+ 2ε, 2m bins met in elk 3 items met volume

1

4 + ε en 3m bins met in elk 4 items met volume 14− 2ε. Hieruit volgt F F D(I) = 119O(I), zodat k(F F D) ≥ 119.

15D.S. Johnson: Fast algoritmes for bin-packing, Journal of Computer and System Sciences 8 (1974) 272–314

16

B.S. Baker: A new proof for the First-Fit-Decreasing bin-packing algoritme, Journal of the algoritmes 6 (1985) 49–70.

17

M. Yue: A simple proof for the inequality F F D(L)11

9O(L) + 1 for all L for the F F D bin-packing algoritme, Acta Mathematicae Applicatae Sinica 7 (1991) 321–331.

18G. D´osa: The tight bound of First-Fit-Decreasing bin-packing algoritme is F F D(I) ≤ 11

9O(I) + 6

9, Lecture Notes in Computer Science 4614 (2007) 1–11.

19B.S. Baker and E.G. Coffman, Jr.: A tight asypmtotic bound for Next-Fit Decreasing bin-packing, SIAM Jurnal on Algebraic and Discrete Methods 2 (1981) 147–152.

Zonder bewijs vermelden we ook het volgende resultaat.20

Stelling 2.12

(1) Als alle elementen van lijst L groter dan 15 zijn, dan is F F D(L) = BF D(L). (2) Als alle elementen van lijst L groter dan 16 zijn, dan is F F D(L) ≥ BF D(L).

In het volgende voorbeeld worden twee instanties I en J gegeven zdd. voor instantie I geldt BF D(I) < F F D(I) en bij instantie J is F F D(J ) < BF D(J ).

Voorbeeld 2.10

Neem I = {0.64, 0.40, 0.40, 0.20, 0.18, 0.18}.

Best-Fit Decreasing werkt als volgt: item 1 in bin 1; de items 2, 3 en 4 in bin 2; de items 5 en 6 in bin 1: BF D(I) = 2.

Bij First-Fit Decreasing doen we: item 1 in bin 1; items 2 en 3 in bin 2; item 4 in bin 1; item 5 in bin 2; items 6 in bin 3: F F D(I) = 3.

Neem J = {4060,2160,2160,2160,2160,6010,1060,609,609 ,609,609 }.

Best-Fit Decreasing werkt als volgt: item 1 in bin 1; de items 2 en 3 in bin 2; de items 4 en 5 in bin 3; item 6 in bin 2; item 7 in bin 3; item 8 en 9 in bin 1; items 10 en 11 in bin 4: BF D(J ) = 4. Bij First-Fit Decreasing doen we: item 1 in bin 1; de items 2 en 3 in bin 2; de items 4 en 5 in bin 3; items 6 en 7 in bin 1; items 8 en 9 in bin 2; items 10 en 11 in bin 3: F F D(J ) = 3.

Opmerking

Het is intu¨ıtief duidelijk dat als de gewichten van de items klein zijn de heuristieken beter zullen werken. Er zijn kwaliteitsresultaten voor het geval dat alle items als gewicht hoogstens α hebben. De kwaliteit voor een heuristiek H met items die gewicht hoogstens α hebben geven we aan met kα(H). In onderstaande tabel geven we een overzicht van de complexiteit en kwaliteit resultaten voor de hier besproken heuristieken.

Heuristiek Complexiteit k1(H) k1 2 (H) k1 3 (H) k1 4 (H) NF O(n) 2 2 1.5 1.333.. FF O(n log n) 1.7 1.5 1.333.. 1.25 BF O(n log n) 1.7 1.5 1.333.. 1.234.. NFD O(n log n) 1.691.. 1.424.. 1.302.. 1.15 FFD O(n log n) 1.222.. 1.183.. 1.183.. 1.15 BFD O(n log n) 1.222.. 1.183.. 1.183.. 1.15 20

Voor een bewijs van dit resultaat, zie: D.S. Johnson, A. Demers, J.D. Ullman, M.R. Garey and R.L. Graham, Worst-case performance bounds for simple one-dimensional packing algoritmes, SIAM Journal on Computing 3 (1974) 299–325.

Opmerking: Approximatieschemas

Fernandez de la Vega en Luecker21 hebben in 1981 aangetoond dat er voor iedere ε > 0 een polynomiaal approximatieschema H bestaat met k(H) ≤ 1 + ε. In 1982 hebben Karmarkar en Karp22 een volledig polynomiaal approximatieschema voor het bin-packing probleem gevonden. De complexiteit is echter voor praktische toepassingen niet geschikt.

Vraag 2.6

Beschouw de volgende lijst L van 37 items: ai=                    6 101, 1 ≤ i ≤ 7 10 101, 8 ≤ i ≤ 14 16 101, 15 ≤ i ≤ 17 34 101, 18 ≤ i ≤ 27 51 101, 28 ≤ i ≤ 37 Bepaal N F (L), F F (L) en F F D(L).

2.7 Opgaven

Opgave 2.1

Beschouw de volgende aanpassing van het gretige algoritme.

Het gretige algoritme (versie 2)

1. volume = 0; waarde = 0; voor j = 1, 2, . . . , n doe: xj = 0 : j = 1.

2. Als volume + aj ≤ b: xj = 1; volume := volume + aj en waarde := waarde + pj.

3. Als j ≤ n − 1: j := j + 1 en ga naar stap 2. Als j = n: ga naar stap 4.

4. a. Bepaal j zdd. pj= maxjpj.

b. Als pj∗ > waarde, dan nemen we xj∗ = 1, xj = 0, j 6= j.

Toon voor bovenstaande heuristiek H het volgende aan:

a. O(P ) ≤ 2 · H(P ) voor iedere instantie P , waaruit volgt dat k(H) ≥ 12. b. Laat met een voorbeeld zien dat k(H) = 12.

Hint: Neem een voorbeeld met 3 objecten en met p1 = 1, p2 = p3 = k. Zoek zelf geschikte waarden voor a1, a2 en a3.

21W. Fernandez de la Vega and G.S. Luecker, Bin packing can be solved within (1+ε) in linear time, Combinatorica 1 (1981) 349–355.

22N. Karmarkar and R.M. Karp, An efficient approximation scheme for the one-dimensional bin-packing problem, Proceedings of the 23rd Annual IEEE Symposium on Foundations of Computer Science (1982) 312–320.

Opgave 2.2

Beschouw het dynamische programmeringsschema waarin G(m, p) = de minimale inhoud van de knapzak als de items 1 tot en met m meedoen en een waarde van p wordt gehaald.

We berekenen G(m, p) voor m = 0, 1, . . . , n en voor p = 0, 1, . . . , C =Pn j=1 pj.

Als voor zekere p er geen oplossing is die deze waarde kan bereiken dan nemen we G(m, p) = ∞. We starten met G(0, 0) = 0 en G(0, p) = ∞ voor p ≥ 1.

a. Toon aan dat G(m, p) =    minG(m − 1, p − pm) + am, G(m − 1, p) als G(m − 1, p − pm) + am ≤ b G(m − 1, p) als G(m − 1, p − pm) + am > b b. Hoe wordt de optimale oplossing verkregen?

Opgave 2.3

Pas Algoritme 2.5 toe op het probleem uit Vraag 2.1. Neem ε = 12. Ga na afloop na of de verkregen oplossing nog verbeterd kan worden 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.

Opgave 2.4 Bewijs Stelling 2.7.

Opgave 2.5

Geeft het gretige algoritme in het euro-geldstelsel (munten: 1, 2, 5, 10, 20, 50, 100 en 200 cent; bankbiljetten: 5, 10, 20, 50, 100, 200 en 500 euro) een optimale oplossing voor het probleem om met zo min mogelijk munten en/of bankbiljetten een bedrag te betalen?

Opgave 2.6

Toon aan dat als voor zekere 0 < c < 1 geldt dat aj ≤ c voor alle j, dan is N F (I) ≤l

Pn j=1aj 1−c m . Opgave 2.7

Toon aan dat als voor zekere 0 < c < 1 geldt dat aj ≤ c voor alle j, dan geldt zowel voor Next-Fit, First-Fit en Best-Fit dat H(I) voldoet aan H(I) < (1 + 2c)O(I) + 1.

Hint: Onderscheid de gevallen c ≥ 12 en c < 12.

Opgave 2.8

Beschouw een instantie van het bin-packing probleem met aj ∈ (0,1

3] voor alle j. Toon aan dat bij First-Fit er hoogstens twee bins zijn met inhoud hoogstens 34.

Opgave 2.9

Toon aan dat voor de instantie I uit Voorbeeld 2.8 geldt dat O(I) ≤ 10m + 1.

PROJECT PLANNING

3.1 Probleemstelling en modellering

Een project bestaat uit een aantal activiteiten die gedeeltelijk afhankelijk en gedeeltelijk onafhan-kelijk van elkaar kunnen worden uitgevoerd: sommige activiteiten kunnen tegelijkertijd worden uitgevoerd, andere kunnen pas starten als bepaalde andere activiteiten klaar zijn. Iedere acti-viteit heeft een zekere - deterministische of stochastische - tijdsduur, waarin deze kan worden uitgevoerd.

We zijn ge¨ınteresseerd in vragen als:

- Wat is de kortste tijdsduur van het totale project?

- Wat is het vroegste en wat is het laatste tijdstip waarop een activiteit kan starten zonder dat daardoor de totale tijdsduur van het project verandert?

We zullen twee technieken bespreken: CPM en PERT. PERT is vooral geschikt voor problemen waarin de tijdsduur van de activiteiten onzeker, d.w.z. stochastisch, is; CPM is juist geschikt voor problemen met een deterministische tijdsduur.

Voorbeeld 3.1

Veronderstel dat een bouwproject verdeeld kan worden in de activiteiten A, B, ..., N.

De tijdsduur van de activiteiten is deterministisch. Deze tijden en de volgorde beperkingen staan in onderstaande tabel.

Wat is de kortste tijdsduur van het totale project? Hoe moet de planning zijn om deze te bereiken?

Activiteit Tijdsduur Voorganger Activiteit Tijdsduur Voorganger

A 4 - H 1 B B 3 - I 4 C, H C 3 - J 2 G, E D 2 B K 3 F, J E 2 B L 4 G, E F 4 A, D M 2 I, N G 3 A, D N 3 C, H 67

Om een project te modelleren wordt een netwerk gebruikt, d.w.z. een gerichte graaf waarbij aan iedere pijl een getal is toegekend. De pijlen corresponderen met de activiteiten en de getallen bij de pijlen met de tijdsduur; de knooppunten komen overeen met bepaalde stadia waarin de realisatie van het project verkeert. Zo is er een knooppunt dat correspondeert met het begin en een knooppunt dat correspondeert met het einde van het project.

Aan het netwerk leggen we de eis op dat er geen evenwijdige pijlen in mogen voorkomen. Het is altijd mogelijk hieraan te voldoen door dummy activiteiten (activiteiten met tijdsduur 0) in te voeren.

In het Voorbeeld 3.1 heeft activiteit M als voorgangers I en N. Deze situatie kan dus niet gerepre-senteerd worden door twee evenwijdige pijlen voor I en N, gevolgd door pijl M. In plaats daarvan voeren we een dummypijl P in en modelleren we het als:

s s s s - - @ @ @ @ R N M I P

Door eventueel aan ieder paar activiteiten I en J met I een directe voorganger van J een dummy, zeg IJ, toe te voegen en dit te modelleren als

s -s -s -s

I IJ J

is altijd een correcte netwerkrepresentatie te vinden (de startpunten van de activiteiten die geen voorganger hebben kunnen worden samengevoegd tot het beginpunt, en de eindpunten van de activiteiten zonder opvolger tot het eindpunt van het project). Een interessante vraag is: hoe construeren we een netwerk met zo min mogelijk dummies? Hiervoor is geen goede methode bekend.

Voorbeeld 3.1 (vervolg)

Onderstaand netwerk, met ´e´en dummy (P), is een model voor het probleem uit Voorbeeld 3.1.

s s s s s s s s s  -@ @ @ @ @ @ @ @ R 6 ? -@ @ @ @ @ @ @ @ R - -@ @ @ @ R  -       * @ @ @ @ @ @ @ @ R 1 2 3 4 5 6 7 8 9 F A D G J K B E L C H N P M I

Het netwerk mag geen geen ronde bevatten, want anders is er inconsistentie. De knooppunten kunnen dan altijd z´o genummerd worden dat de pijlen van een laag naar een hoger nummer lopen: dit heet topologisch sorteren (zie Voorbeeld 3.1).

Ga na dat deze nummering op eenvoudige wijze gevonden kan worden door het volgende algoritme uit te voeren; ga eveneens na dat de complexiteit van dit algoritme O(m) is met m het aantal pijlen in het netwerk.

Algoritme 3.1 Topologisch sorteren 1. i = 1.

2. a. Kies een knooppunt zonder binnenkomende pijlen en geef dit nummer i. b. Laat knooppunt i en de daarvan uitgaande pijlen weg.

3. a. i := i + 1.

b. Als i = n + 1 (alle knooppunten zijn genummerd): STOP. Anders: ga naar stap 2.