• No results found

Opgave 2.1

McRonald maakt voor een zusterbedrijf elke week twee soorten steak sauzen: Spicy Gonzales en Cool Gringo. Elk van de sauzen wordt gemaakt door het mengen van twee ingrediënten, die we A en B noemen. Hoewel een zekere mate van vrijheid is toegestaan bij het maken van de sauzen, moet voldaan worden aan de volgende eisen:

1. Cool Gringo mag niet voor meer dan 75% bestaan uit ingrediënt A;

2. Spicy Gonzales moet voor tenminste 25% uit ingrediënt A en voor tenminste 50% uit ingrediënt B bestaan;

3. Per week kunnen ten hoogste 40 liter van ingrediënt A en ten hoogste 30 liter van ingrediënt B worden ingekocht.

McRonald kan tegen een prijs van 7 euro per liter Spicy Gonzales en tegen een prijs van 6 euro per liter Cool Gringo de sauzen verkopen, terwijl de ingrediënten A en B resp. 3 en 4 euro per liter kosten. McRonald wil zijn winst maximaliseren.

Stel hiervoor een lineair programmeringsprobleem op en los dit op.

Opgave 2.2

Een boer heeft 100 ha grond beschikbaar voor het verbouwen van tarwe en/of rogge. Daartoe moet de grond eerst worden ingezaaid. De kosten voor zaad zijn: 0.20 euro per mud tarwe en 0.12 euro per mud rogge. De opbrengst is 60 mud per ha per jaar voor tarwe en 95 mud per ha per jaar voor rogge. De 100 ha kan gebruikt worden voor het verbouwen van tarwe of rogge. Per gebruikte ha per jaar is 4 uur arbeidskracht nodig plus 0.15 uur per mud tarwe en 0.70 uur per mud rogge. Tarwe brengt 1.75 euro per mud en rogge 0.95 euro per mud op. Verder kan tarwe gekocht worden voor 2.50 euro per mud en rogge voor 1.50 euro per mud.

Daarnaast kan de boer kippen en/of varkens houden, waarvoor hij 30.000 dm2 grondoppervlak beschikbaar heeft. De boer verkoopt de kippen en varkens als ze een jaar oud zijn. Een varken brengt 40 euro op. De boer meet de kippen in termen van ’een varken equivalent’ (= het aantal kippen dat samen 40 euro opbrengt): een equivalent kippen brengt dus ook 40 euro op. De varkens en de kippen worden in twee soorten verdeel: zij die tarwe eten en zij die rogge eten. Een varken dat tarwe eet vraagt 25 mud tarwe, 25 uur arbeid en 75 dm2 grondoppervlak; een varken dat rogge eet vraagt 20 mud rogge, 25 uur arbeid en 75 dm2 grondoppervlak. Een equivalent aantal kippen dat tarwe eet vraagt 25 mud tarwe, 40 uur arbeid en 45 dm2 grondoppervlak; en equivalent aantal kippen dat rogge eet vraagt 10 mud rogge, 40 uur arbeid en 45 dm2grondoppervlak. Aangenomen wordt dat voor het voederen van de varkens en de kippen de boer zowel gekochte als verbouwde tarwe en rogge kan gebruiken.

Aan eigen arbeidskrachten heeft de boer per jaar 4.000 uur beschikbaar. Hij kan echter ook arbeidskrachten inhuren. Dit kost 25 euro per persoon (ingehuurde arbeidskrachten) per uur. Per persoon ingehuurde arbeidskrachten is per uur ook nog 0.15 uur aan begeleiding door het eigen personeel van de boer nodig.

De boer streeft een zo groot mogelijke jaaropbrengst na. Maak een LP-model voor dit probleem, los het op en beantwoord de volgende vragen (rond eventueel waarden af op gehele getallen): a) Welke opbrengst kan de boer halen?

b) Hoeveel land moet de boer verbouwen met tarwe en hoeveel met rogge? c) Hoeveel varkens en hoeveel kippen moet de boer houden?

d) Hoeveel arbeid moet de boer inhuren?

Opgave 2.3

De personeelsafdeling van een ziekenhuis wil het aantal leerlingverpleegsters bepalen dat het ko-mende jaar ingezet zal moeten worden. Men baseert zich op de volgende schattingen van de behoefte in termen van arbeidsuren:

Periode Uren januari/februari 10.000 maart/april 11.000 mei/juni 14.000 juli/augustus 15.000 september/oktober 16.000 november/december 16.000

Gedurende de eerste twee maanden van hun aanstelling worden de leerlingverpleegsters opgeleid. Dit vraagt 90 uren begeleiding van een ’echte’ verpleegster. Laatstgenoemde heeft daardoor ditzelfde aantal uren minder voor het uitoefenen van haar eigenlijke taak. Naast de opleiding kan elke leerlingverpleegster 160 uur productief werk verrichten gedurende die eerste twee maanden. Een verpleegster werkt 320 uur per twee maanden.

Begin januari zijn er 28 verpleegsters in dienst. Aan het einde van elke periode van twee maanden zegt 10% van de ’echte’ verpleegsters haar baan op. Slechts 80% van de leerlingverpleegsters rondt de opleiding met succes af. De andere 20% haakt gedurende de opleiding af. Zij krijgen gemiddeld 50% van de opleiding en volvoeren eenzelfde fractie van de productieve arbeid.

De directie vindt het wenselijk dat er begin januari van het volgend jaar minstens 30 verpleegsters zijn. Een verpleegster kost het ziekenhuis 4.000 euro en een leerlingverpleegster 2.000 euro per periode (een leerling die halverwege een periode afhaakt kost ook maar de helft, d.w.z. 1.000 euro).

De personeelsafdeling wil nu weten hoeveel leerlingverpleegsters er aan het begin van elk van de komende zes perioden moeten worden aangenomen om de totale kosten over het jaar zo laag mogelijk te houden.

Maak een LP-model voor dit probleem (hoewel het eigenlijk een geheeltallig probleem is) en los het op.

Opgave 2.4

Beschouw Voorbeeld 2.3met, in plaats van de L1-approximatie, de L-approximatie, d.w.z. min

(a,b)

{ max

1≤i≤n |yi− (axi+ b)|}.

We vragen bij deze approximatie derhalve naar een lijn die de maximale verticale afstand van de gegeven punten tot de lijn minimaliseert.

a) Geef een algemene LP-formulering om de L-approximatie op te lossen.

b) Bepaal, door het bijbehorende LP-probleem op te lossen, de L-approximatie voor de volgende data:

xi 1 6 15 20 35 48 60 75 86 100 yi 13 10 -3 -2 12 19 39 46 64 75

Opgave 2.5

Beschouw het twee-vinger-Morra spel: dit spel wordt gespeeld door twee spelers A en B en komt op het volgende neer. De spelers A en B tonen elkaar tegelijkertijd één of twee vingers en gokken tegelijkertijd het aantal vingers dat de tegenstander gaat laten zien. Afhankelijk van wat elk van de spelers doet, vindt een uitbetaling van de ene aan de andere speler plaats. Onderstaande tabel geeft het uitbetalingsschema. Bijvoorbeeld, als speler A twee vingers toont en zegt dat B één vinger zal laten zien, en speler B één vinger toont en zegt dat A één vinger zal laten zien, dan ontvangt speler A 4 euro van speler B.

B toont 1 B toont 1 B toont 2 B toont 2 en zegt 1 en zegt 2 en zegt 1 en zegt 2

A toont 1 en zegt 1 0 1 -3 0

A toont 1 en zegt 2 -2 0 0 2

A toont 2 en zegt 1 4 0 0 -4

A toont 2 en zegt 2 0 -3 5 0

a. Stel de LP-problemen op (niet in algemene termen, maar met getallen) om een paar optimale strategieën te bepalen.

Opgave 2.6

Er zijn n steden en de afstand om van stad i naar stad j te reizen in bekend, namelijk cij voor i, j = 1, 2, . . . , n, waarbij we cii= ∞ nemen voor alle i. Een handelsreiziger staat voor de opdracht om een rondreis langs alle steden te maken zdd. de totale reisafstand minimaal is. We kunnen trachten van dit probleem een combinatorisch optimaliseringsprobleem te maken. We introduceren daartoe (0,1)-variabelen xij met de volgende interpretatie: xij = 0 (1) betekent dat de directe route van stad i naar stad j niet (wel) wordt gekozen. Op deze wijze ligt het voor de hand het volgende probleem te bekijken:

min        n X i,j=1 cijxij Pn i=1xij = 1, 1 ≤ j ≤ n Pn i=1xji= 1, 1 ≤ j ≤ n xij ∈ {0, 1} voor alle (i, j)

       (2.42)

Hierbij hebben de voorwaarden Pn

i=1xij = 1, 1 ≤ j ≤ n, de betekenis dat er voor iedere stad j precies één stad is waar vanuit stad j wordt bezocht en de voorwaardenPn

i=1xji = 1, 1 ≤ j ≤ n, geven aan dat we vanuit iedere stad j naar precies één andere stad toegaan. De doelfunctie telt precies alle afstanden die in de route zitten.

a. Waarom is de formulering van (2.42) niet (helemaal) correct?

b. Toon aan dat de formulering wel correct is als aan het probleem het volgende wordt toegevoegd: ui− uj + nxij ≤ n − 1 voor alle i, j ≥ 2 en ui≥ 0 en geheel voor i = 1, 2, . . . , n.

Aanwijzing:

Laat de route in plaats 1 beginnen en interpreteer ui = k, wanneer plaats i als k-de stad vanuit stad 1 wordt bezocht.

Opgave 2.7

Veronderstel dat er m (identieke) machines zijn waarop taken uitgevoerd kunnen worden. Er zijn n taken en taak i heeft een (geheeltallige) bewerkingstijd pi, 1 ≤ i ≤ n. Een taak hoeft maar op één machine te worden uitgevoerd en een machine kan slechts één taak tegelijk aan. Gevraagd is een planning te vinden zdd. al het werk zo vroeg mogelijk af is.

Formuleer dit probleem als een combinatorisch optimaliseringsprobleem.

Opgave 2.8

Een onderneming heeft n klanten. Klant j heeft hoeveelheid dj aan product nodig. Om de n klanten adequaat te bevoorraden, wil de onderneming een nieuwe vestiging bouwen. Voor de vestiging komen m locaties in aanmerking. Vestiging in locatie i brengt vaste kosten fi met zich mee en de transportkosten om klant j te bedienen vanuit locatie i zijn cij (per eenheid).

In welke locatie(s) zal de onderneming zich vestigen om de totale kosten te minimaliseren en vanuit welke locatie zal klant j (1 ≤ j ≤ n) worden bediend? Formuleer dit probleem als een combinatorisch optimaliseringsprobleem.

Opgave 2.9

Beschouw de volgende situatie: n verschillende gebouwen moeten worden neergezet op n gegeven locaties. De vraag luidt: welk gebouw moet op welke locatie worden neergezet. Het is bekend hoeveel mensen per dag van gebouw j naar gebouw l gaan, zeg bjl. Het is ook bekend wat de afstand tussen locatie i en locatie k is, zeg aik.

Waar moeten de gebouwen worden neergezet opdat de totale afstand die de mensen tezamen per dag moeten afleggen minimaal is? Formuleer dit probleem als een combinatorisch (niet-lineair) optimaliseringsprobleem.

Opgave 2.10

Een onderneming vervoert haar producten in containers. De kosten van een container zijn als volgt: vaste kosten van 25 euro en verder voor de opstaande zijden 50 euro per m2 en voor de bodem 80 euro per m2 (er is geen bovenkant). De technische eisen voor de container zijn dat de lichaamsdiagonaal maximaal 4 meter mag zijn, de breedte maximaal 2 meter en de hoogte maximaal 1.5 meter.

De onderneming wil de afmetingen van deze containers zo maken dat de containers per m3 zo goedkoop mogelijk zijn. Formuleer dit probleem als een (niet-lineair) optimaliseringsprobleem.

Opgave 2.11

Beschouw een aandelenportefeuille met 3 aandelen. Veronderstel dat µ1= 3, µ2 = 4, µ3 = 5; σ11= 1, σ12= σ21= σ13= σ31= 0, σ22= 2, σ23= σ32= 1, σ33= 3 en R = 4.

Netwerk optimalisatie

Een netwerk is een gerichte graaf (dit is een graaf waarin iedere verbinding een gegeven richting heeft: er is dus sprake van éénrichtingsverkeer en de verbindingen heten pijlen) met een functie, die op de pijlen gedefinieerd is. Een pijl met beginpunt i en eindpunt j noteren we met het geordende paar (i, j). Laat A de verz. van de pijlen zijn. Een functie l op de pijlen geeft aan iedere pijl een reëel getal, dus l : A → R. We noteren de functiewaarde op de pijl (i, j) met lij. In een netwerk kunnen diverse optimaliseringsproblemen worden bekeken. Als voorbeeld noemen we het kortste pad probleem. Dan is er één functie op de pijlen, lengte genaamd, en het probleem luidt: bepaal het kortste pad van knooppunt 1 naar knooppunt n. Hierbij is de lengte van een pad de som van de lengtes van de pijlen op dit pad.

Voorbeeld 3.1

Beschouw het kortste pad probleem van knooppunt 1 naar knooppunt 8 in onderstaande graaf (de getallen naast de pijlen zijn de lengtes).

s s s s s s s s -- -? 6  @ @ @ @ @ @ R @ @ @ @ @ @ R   @ @ @ @ @ @ R  @ @ @ @ @ @ R 1 4 5 8 3 7 2 6 6 14 8 3 4 8 14 6 6 4 10 12 10 3

3.1 Dijkstra’s algoritme voor het kortste pad probleem

Als er rondes van negatieve lengtes zijn, dan is het kortste pad probleem niet goed gedefinieerd (door de ronde steeds weer te doorlopen gaat de lengte naar −∞). Daarom nemen we bij het

kortste pad probleem aan dat er geen rondes van negatieve lengte zijn. In deze paragraaf zullen we een algoritme geven voor het geval dat alle lengtes lij niet-negatief zijn.

Het probleem om het kortste pad te vinden van knooppunt 1 naar knooppunt n is vrijwel even lastig als het vinden van het kortste pad van knooppunt 1 naar alle andere knooppunten 2, 3, . . . , n. We zullen dan ook dit laatste probleem beschouwen. Als er voor een tweetal (i, j) in het netwerk geen pijl is, dan voegen we deze pijl toch toe en geven er de lengte +∞ aan (zo’n pijl zal dus nooit voorkomen in een kortste pad). Hiermee bereiken we dat we voor ieder tweetal (i, j) kunnen spreken over de pijl van i naar j.

Bij het kortste pad probleem zijn we geïnteresseerd in twee zaken: de lengte van het kortste pad en de route ervan. De lengte van het kortste pad van knoppunt 1 naar knooppunt i noteren we met li. Voor de route is het voldoende om voor ieder knooppunt te weten welk knooppunt zijn voorganger is op het kortste pad: we kunnen dan teruglopen naar knooppunt 1 en verkrijgen aldus de route (in omgekeerde volgorde). De directe voorganger van knooppunt i op het kortste pad van knooppunt 1 naar knooppunt i noteren we met vi. Knooppunt 1 heeft geen voorganger en daarom gebruiken we hiervoor de conventie dat v1 = 0.

Bij de methode van Dijkstra worden aan ieder knooppunt i van het netwerk twee labels toe-gekend: li en vi. Het label li is de lengte van een pad van knooppunt 1 naar knooppunt i en met label vi geven we de voorganger van knooppunt i op dit pad aan.

We onderscheiden definitieve labels en tijdelijke labels. Voor de definitieve labels geldt dat we zeker weten dat li = li; voor de tijdelijke labels geldt dat li gelijk is aan de lengte van het kortste pad van knooppunt 1 naar knooppunt i met als tussenpunten alleen knooppunten met een definitief label. Bij de start heeft alleen knooppunt 1 een definitief label en nemen we l1:= v1 := 0. Merk op dat dan inderdaad l1 = l1 en v1 = v1. Voor de andere knooppunten i zijn de tijdelijke labels li= l1i en vi = 1, i = 2, 3, . . . , n. De verzameling van knooppunten met een definitief label wordt genoteerd met D.

In elke iteratie van het algoritme wordt D met één knooppunt uitgebreid. Het algoritme heeft dus n − 1 iteratiestappen. Het knooppunt dat aan D wordt toegevoegd is het knooppunt met een tijdelijk label dat van alle knooppunten met een tijdelijk label de kleinste l-waarde heeft, zeg dat dit knooppunt k is. Vervolgens worden de labels van de tijdelijke knooppunten herzien. Als lk+ lki < li voor een tijdelijk knooppunt i, dan is de route naar i te verkorten door via knooppunt k te lopen. In dat geval worden de labels aangepast: li := lk+ lki en vi := k.

Algoritme 3.1 Dijkstra’s algoritme voor het kortste pad probleem met niet-negatieve lengtes 1. D := {1}; l1 := v1 := 0; li := l1i, vi:= 1, i = 2, 3, . . . , n.

2. Als D = {1, 2, . . . , n}: stop.

3. (a) Kies k /∈ D zdd. lk= mini /∈D li; (b) lk:= lk, vk := vk;

(d) Voor alle i /∈ D: als lk+ lki< li, dan: li := lk+ lki en vi := k; (e) Ga naar stap 2.

Voorbeeld 3.1 (vervolg)

Het algoritme van Dijkstra voor het netwerk uit Voorbeeld 3.1geeft de volgende berekeningen. Iteratie 1 D := {1}; l1 := v1 := 0; l2 := 14, v2 := 1; l3:= 14, v3 := 1; l4 := ∞, v4 := 1; l5:= ∞, v5 := 1; l6 := ∞, v6= 1; l7 := ∞, v7= 1; l8 := ∞, v8 := 1. k := 2; l2:= 14, v2:= 1; D := {1, 2}; l4 := 22, v4:= 2; l5:= 17, v5 := 2; l6 := 20, v6 := 2. Iteratie 2 k := 3; l3:= 14, v3:= 1; D := {1, 2, 3}; l4:= 20, v4 := 3; l7 := 17, v7:= 3. Iteratie 3 k := 5; l5:= 17, v5:= 2; D := {1, 2, 3, 5}; l8 := 27, v8 := 5. Iteratie 4 k := 7; l7:= 17, v7:= 3; D := {1, 2, 3, 5, 7}. Iteratie 5 k := 4; l4:= 20, v4:= 3; D := {1, 2, 3, 5, 7, 4}. Iteratie 6 k := 6; l6:= 20, v6:= 2; D := {1, 2, 3, 5, 7, 4, 6}. Iteratie 7 k := 8; l8:= 27, v8:= 5; D := {1, 2, 3, 5, 7, 4, 6, 8}.

Het kortste pad van knooppunt 1 naar knooppunt 8 krijgen we door over de v-labels terug te lopen: 8 ← 5 ← 2 ← 1. Het kortste pad P is dus P = [1, 2, 5, 8] met lengte 27.

In de volgende stelling tonen we aan dat het algoritme van Dijkstra correct is.

Stelling 3.1 Het algoritme van Dijkstra eindigt met de lengtes en routes van de kortste paden. Bewijs

We tonen met inductie naar het iteratienummer aan dat tijdens het algoritme de definitieve knooppunten de goede labels krijgen.

Bij de eerste iteratie, als alleen knooppunt 1 definitief is, is hieraan voldaan. Veronderstel dat het ook juist is tot en met iteratie m en laat D de definitieve verz. zijn aan het einde van iteratie m. Stel k /∈ D is gekozen zdd.

lk= min

i /∈D li (3.1)

en veronderstel dat lk6= lk. Omdat lk de lengte van een route van knooppunt 1 naar knooppunt k is geldt dat dan lk> lk. Omdat

lk= min

heeft het kortste pad van knooppunt 1 naar knooppunt k minstens één knooppunt dat niet tot D behoort. Laat knooppunt j het eerste knooppunt op het kortste pad van knooppunt 1 naar knooppunt k zijn dat niet tot D behoort. Het kortste pad van knooppunt 1 naar knooppunt j bevat dus alleen punten van D. We kunnen nu schrijven:

lj = min

i∈D {li + lij} = lj ≥ lk> lk ≥ lj, (3.3) de laatste ongelijkheid omdat alle lengtes niet-negatief zijn en het kortste pad van knooppunt 1 naar knooppunt k via knooppunt j loopt. Dit geeft een tegenspraak. Het element k dat aan D wordt toegevoegd voldoet dus inderdaad aan lk = lk. Uit stap 3d van het algoritme is het ook direct duidelijk dat de li’s goed worden aangepast voor de tijdelijke labels en dat de voorganger vi op het pad van 1 naar i met lengte li eveneens goed wordt bijgehouden.

Er zijn ook problemen die er op het eerste probleem niet uitzien als een kortste pad probleem, maar die toch als zodanig gemodelleerd kunnen worden. We geven hieronder een voorbeeld.

Voorbeeld 3.2 Meest betrouwbare pad

Beschouw een gerichte graaf G = (V, A) met een betrouwbaarheidsfunctie p: A → R+, waarbij 0 < pij ≤ 1 de kans is dat een boodschap niet verloren gaat als deze over de verbinding (i, j) wordt gestuurd.

Gevraagd wordt om het meest betrouwbare pad te vinden van knooppunt 1 naar knooppunt n. Zij b(P ) de betrouwbaarheid als het bericht over pad P van knooppunt 1 naar knooppunt n wordt gestuurd, d.w.z.

b(P ) = Y

(i,j)∈P

pij. (3.4)

Het meest betrouwbare pad probleem is dus het probleem max

P b(P ) = max

P

Y

(i,j)∈P

pij waarbij P een pad is van knooppunt 1 naar knooppunt n. (3.5)

Merk op dat de logaritme een monotoon stijgende functie is, wat tot gevolg heeft dat het maxi-maliseren van een functie equivalent is met het maximaxi-maliseren van de logaritme van die functie. Tevens merken we op dat het maximaliseren van een functie f equivalent is met het minimaliseren van de tegengestelde functie −f . Er geldt dus (ln is de natuurlijke logaritme):

max P b(P ) ⇔ max P ln{b(P )} = max P X (i,j)∈P ln pij ⇔ min P X (i,j)∈P {−ln pij}. (3.6)

Beschouwen we de lengtefunctie lij = −ln pij, dan is het kortste pad probleem m.b.t. de lengte-functie l equivalent met het meest betrouwbare pad probleem m.b.t. de betrouwbaarheidslengte-functie p. Omdat 0 < pij ≤ 1, is lij ≥ 0, zodat de methode van Dijksta kan worden toegepast.

Getallenvoorbeeld

Beschouw een graaf met 5 knooppunten. Hieronder staan de betrouwbaarheidsfunctie (een − betekent dat deze verbinding niet aanwezig is) en de daaruit afgeleide lengtefunctie (in 4 decimalen nauwkeurig). p =          − 0.97 0.95 0.97 − − − 0.99 0.98 0.965 − 0.99 − 0.96 0.95 − − 0.98 − 0.96 − − − − −          → l =          − 0.0305 0.0513 0.0305 − − − 0.0101 0.0202 0.0356 − 0.0101 − 0.0408 0.0513 − − 0.0202 − 0.0408 − − − − −         

Met behulp van de methode van Dijkstra is hieruit te bepalen dat 1 → 4 → 5 het meest betrouwbare pad van knooppunt 1 naar knooppunt 5 is. De betrouwbaarheid van dit pad is 0.97 × 0.96 = 0.9312 (ook te berekenen via de lengtefunctie: e−(0.0305+0.0408) = 0.9312).