9789147125784

Page 1

HOLMBERG

Andra utmärkande drag: • Täcker alla delar av optimeringens grunder • Är ovanligt grundlig i behandlingen av kombinatorisk optimering och optimering av grafer • Innehåller en stor mängd övningsuppgifter, tillräckligt för både lärarledda lektioner och hemuppgifter Språket är enkelt och beskrivningarna inleds genomgående med exempel där författaren konkret förklarar när och hur metoderna kan användas.

Författaren KAJ HOLMBERG är professor i optimeringslära vid Linköpings universitet och aktiv forskare. Han har undervisat i ämnet i över 30 år och nominerats till Linköpings teknologers studentkårs pris för bästa pedagog.

OPTIMERING

OPTIMERING är en komplett grundbok i optimeringslära som passar för både enklare och mer avancerade kurser på universitetsnivå. Läsaren får en mångsidig verktygslåda för att lösa praktiska optimeringsproblem. Fokus ligger på användbara metoder snarare än teori.

KAJ HOLMBERG

Upplaga 2

OPTIMERING Best.nr 47-12578-4 Tryck.nr 47-12578-4

9789147125784c1c.indd All Pages

Metoder, modeller och teori för linjära, olinjära och kombinatoriska problem

21/02/18 12:37 PM


Optimering ISBN 978-91-47-12578-4 © 2018 Kaj Holmberg och Liber AB

Omslag: Nette Lövgren Produktionsledare: Jürgen Borchert

Upplaga 2:1

Repro: OKS Prepress Services, Indien Tryck: People Printing, Kina, 2018

KOPIERINGSFÖRBUD Detta verk är skyddat av upphovsrättslagen och får ej helt eller delvis kopieras. Kopiering för undervisningsändamål enligt BONUS-avtal är inte tillåten. Intrång i upphovsmannens rättigheter enligt upphovsrättslagen kan medföra straff (böter eller fängelse), skadestånd och beslag/förstöring av olovligt framställt material. Såväl analog som digital kopiering regleras i BONUS-avtalet. Läs mer på www.bonuscopyright.se. Liber AB, 113 98 Stockholm Kundservice tfn 08-690 90 00 Kundservice.liber@liber.se www.liber.se



IV

Förord Detta är en lärobok för grundutbildningskurser på universitetsnivå i optimering. Fokus ligger på praktiska lösningsmetoder. Boken innehåller avsnitt om linjär optimering, olinjär optimering, kombinatorisk optimering, optimering i grafer och nätverk, samt heltalsoptimering. En viss grundläggande teori ingår. I innehållet märks även komplexitet, heuristiker och Lagrangedualitet. Optimeringslära bygger på matematik, men framställningen prioriterar förståelse mer än matematisk stringens. Matematiska bevis ingår oftast inte, men ett motiverande resonemang förs ibland, då det har ett pedagogiskt värde. Varje kapitel avslutas med ett antal övningsuppgifter, och någon ytterligare exempelsamling är obehövlig. Materialet passar till en första (och kanske även en andra) kurs i optimering på universitetsnivå. Vissa kunskaper i matematik och linjär algebra är en lämplig grund. Nytt i andra upplagan

I andra upplagan har presentationen förbättrats på många ställen. Ett större antal övningsuppgifter har lagts till, och lösningar till existerande uppgifter har utökats. Kapitlet om billigaste väg har stuvats om. Kapitlet om Lagrangedualitet har omarbetatats och utökats. Mer material om matchning, moderna heuristiker samt olinjär optimering utan bivillkor har lagts till.

Om författaren Kaj Holmberg är professor i Optimeringslära vid Linköpings universitet. Han är aktiv forskare och har ca 82 internationellt publicerade artiklar. Han har undervisat på ca 20 olika kurser i Optimeringslära sedan 1979 (vilket inkluderar de flesta optimeringskurser som givits på Linköpings universitet). Han har nominerats till Gyllene Moroten, LinTeks pris för bästa pedagog. Privat är han intresserad av musik, cykling och öl (på ett aningen snobbigt sätt), både av att avnjuta andras prestationer och att försöka själv.


V

Sammanfattning Optimering är ett viktigt verktyg som kan hjälpa till att finna bra lösningar till många olika praktiska problem gällande t.ex. planering av produktion, transporter, lagerhållning, vägval, design och andra komplexa beslut. Denna bok är avsedd att ge läsaren en användbar och mångsidig verktygslåda, som i förlängningen kan spara många miljoner för företag och samhälle. Här sammanfattas översiktligt innehållet i denna lärobok. Den första delen ger först en en kort beskrivning av vad optimeringslära är, följd av introduktioner till tre viktiga delområden, nämligen linjär optimering, heltalsoptimering och olinjär optimering, inkluderande många exempel på problemformuleringar. Den första delen avslutas med ett ganska teoretiskt kapitel som ger de matematiska grunderna för de lösningsmetoder som beskrives senare i boken. Kapitlet innehåller även optimalitetsvillkor för olika typer av problem samt en introduktion till komplexitetsteori. Del två behandlar linjär optimering, och fokuserar på simplexmetoden, som är den dominerande lösningsmetoden för linjära problem. Viktiga begrepp såsom baslösningar tas upp ordentligt. Metoden beskrivs både med simplextablå och i matristermer. Denna del tar även upp dualitet för linjära problem och känslighetsananlys. Del tre behandlar lösningsmetoder för olinjära optimeringsproblem, först utan bivillkor och sedan med bivillkor. Det dominerande angreppssättet är sökmetoder, och ett flertal olika sådana presenteras. Del fyra behandlar optimering i grafer. Först ges en mängd grundläggande definitioner av grafbegrepp, och därefter fokuseras på lösningsmetoder för vissa viktiga kombinatoriska problem gällande träd och cykler, nämligen billigaste uppspännande träd-problem, handelsresandeproblem och brevbärarproblem. Ett kapitel behandlar nodmärkningsmetoder för billigaste väg-problem och utvidgningen dynamisk programmering. Problem med flöde i nätverk behandlas också, speciellt metoder för maxflödesproblem och minkostnadsflödesproblem. Även tillordningsproblemet behandlas. Del fem handlar om lösningsmetoder för allmänna heltalsproblem, främst trädsökningsmetoder, men också plansnittningsmetoder. Den avslutande delen handlar om saker som är gemensamt för de olika delområdena, först en ordentlig genomgång av komplexitet, därefter heuristiska metoder för olika problem, och avslutningsvis Lagrangedualitet, som kan användas för många olika typer av optimeringsproblem. Boken avslutas med en litteraturförteckning (i mycket begränsat urval) och ett sakregister för de viktigaste begreppen.


VI

Till dig som lärare Denna bok är avsedd att ge en heltäckande grund i optimering. Den är ganska omfattande och kan ses som ett smörgåsbord som kan användas till flera olika kurser, där många kurser inte kommer att hinna ta upp allt i boken. Det är enkelt att hoppa över Lagrangedualitet och tona ner komplexitetsteorin. Man kan även tänka sig att i princip hoppa över olinjär optimering. Dessutom kan man rensa ut en hel del ur grafdelen, utan att resten blir lidande. När det gäller matematisk svårighetsgrad är nog kapitel 5 och 17 värst. Det är möjligt att ha stora delar av kapitel 5 som referensmaterial, dvs. man vet att det finns där, men behöver inte läsa det i detalj. Kapitel 10 börjar med en genomgång av grafteori för den som inte läst det tidigare, och är inledningsvis ganska kompakt skrivet. Boken har tyvärr inte plats för alla illustrationer som skulle göra det tydligare för den oinvigde. Komplexitetsteorin är ju ganska abstrakt och detaljerna kanske inte är nödvändiga för alla läsare. Jag tror att denna bok kan användas till många olika kurser, från ganska djupa och omfattande till mindre och enklare. Jag har försökt att beskriva saker med ett någorlunda enkelt språk (kanske förutom ovan nämnda “svåra” kapitel), och i de flesta fall inleds beskrivningen med ett exempel, innan man ger sig in på detaljerna. Boken kan ses som praktisk, i den meningen att det överordnade syftet är att lösa praktiska optimeringsproblem. Fokus ligger på metoderna, inte teorin. De flesta metodbeskrivningar kan läsas och följas utan att man behöver studera den bakomliggande teorin. Boken är tänkt att innehålla tillräckligt med övningsuppgifter så att det räcker både till lektionsräkning och räkning hemma. Övningsuppgifterna är avsedda att lösas för hand. Eftersom vissa typer av metoder inte passar så bra för handräkning, finns färre uppgifter på dem. Jag kommer själv att komplettera boken med datorlaborationer i de kurser jag ger.


Innehåll

Innehåll

vii

I

Introduktion

1

Introduktion

1.1 1.2 1.3 1.4 2

5

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

3 7 8 9

Exempel på linjärprogrammeringsproblem Några modelleringsprinciper . . . . . . . Exempel på problemformuleringar . . . . Övningsuppgifter . . . . . . . . . . . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

11 14 16 19

11

Introduktion till heltalsprogrammering

3.1 3.2 3.3 3.4 3.5 4

3

. . . .

Introduktion till linjärprogrammering

2.1 2.2 2.3 2.4 3

Optimering . . . . . . Metodval . . . . . . . Tillämpningsområden . Vad man finner på nätet

1

Introduktion . . . . . . . . . . . . . . . Ett illustrativt heltalsproblem . . . . . . Speciell användning av binära variabler Lösningsmetoder för heltalsproblem . . Övningsuppgifter . . . . . . . . . . . .

25

. . . . .

25 26 29 36 37

Introduktion till olinjär optimering

47

4.1 4.2

Exempel på olinjära modeller . . . . . . . . . . . . . . . . . . . . . Övningsuppgifter . . . . . . . . . . . . . . . . . . . . . . . . . . .

47 49

Konvexitet och optimalitet

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

55


VIII

INNEHÅLL

5.1 5.2 5.3 5.4 5.5

Konvexitet . . . . . . . . . . Funktioner . . . . . . . . . . Optimeringsproblem . . . . Introduktion till komplexitet Övningsuppgifter . . . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

56 63 67 75 77

II Linjär optimering

95

6

97

Simplexmetoden

6.1 6.2 6.3 6.4 6.5 6.6 6.7 7

Baslösningar . . . . . . . . . . . . . . . . . . . . Simplexmetoden i algoritmform . . . . . . . . . . Simplexmetoden i matrisform . . . . . . . . . . . Tvåfasmetoden för att få en tillåten startbaslösning Degeneration och konvergens . . . . . . . . . . . . Andra metoder för LP . . . . . . . . . . . . . . . . Övningsuppgifter . . . . . . . . . . . . . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

97 104 112 114 117 121 121

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

137 138 141 144 146 147 150 157 158

LP-dualitet

7.1 7.2 7.3 7.4 7.5 7.6 7.7 7.8 7.9

137

Vad är en dualvariabel? . . . . . . . . . . . . . Formulering av LP-dual . . . . . . . . . . . . . Relationer mellan primal och dual . . . . . . . Dualitet och baslösningar . . . . . . . . . . . . Lösning av ett kontinuerligt kappsäcksproblem Tolkningar av LP-dual . . . . . . . . . . . . . Känslighetsanalys . . . . . . . . . . . . . . . . Duala simplexmetoden . . . . . . . . . . . . . Övningsuppgifter . . . . . . . . . . . . . . . .

. . . . . . . . .

. . . . . . . . .

III Olinjär optimering

181

8

183

Metoder för olinjära problem utan bivillkor

8.1 8.2 8.3 8.4 8.5 8.6 8.7 9

Ramverk för sökmetoder . . . . . . . . . . . Linjesökning . . . . . . . . . . . . . . . . . Brantaste lutningsmetoden . . . . . . . . . . Newtons metod . . . . . . . . . . . . . . . . Pålitligt område . . . . . . . . . . . . . . . . Sökmetod för ickedifferentierbara funktioner Övningsuppgifter . . . . . . . . . . . . . . .

Metoder för olinjära problem med bivillkor

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

183 184 187 188 191 192 193 201


INNEHÅLL

9.1 9.2 9.3 9.4 9.5 9.6 9.7 9.8 9.9

Metodprinciper . . . . . . . Zoutendijks metod . . . . . Frank-Wolfemetoden . . . . Gradientprojektionsmetoden Ett löst exempel . . . . . . . Kvadratisk programmering . Separabel programmering . . Straff- och barriärmetoder . . Övningsuppgifter . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

IX

201 202 204 205 206 207 210 212 213

IV Optimering i grafer och nätverk

221

10 Grafer, träd och cykler

223

10.1 10.2 10.3 10.4 10.5 10.6 10.7 10.8

Grafer . . . . . . . . . . . . Billigaste uppspännande träd Handelsresandeproblemet . . Matchningsproblemet . . . . Bågfärgning i tudelad graf . Brevbärarproblemet . . . . . Steinerträdsproblemet . . . . Övningsuppgifter . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

11 Billigaste väg

11.1 11.2 11.3 11.4

287

Formulering . . . . . . . . . . . . . . . . . . Lösningsmetoder för billigaste väg-problemet Dynamisk programmering . . . . . . . . . . Övningsuppgifter . . . . . . . . . . . . . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

12 Flöde i nätverk

12.1 12.2 12.3 12.4 12.5

Formulering . . . . . . . . . . . . . . . . . Maxflödesproblemet . . . . . . . . . . . . Minkostnadsflödesproblemet . . . . . . . . Ungerska metoden för tillordningsproblemet Övningsuppgifter . . . . . . . . . . . . . .

223 235 243 253 255 256 262 263

287 288 302 310 321

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

321 327 331 341 344

V Heltalsoptimering

365

13 Trädsökningsmetoder

367

13.1 Allmänna principer . . . . . . . . . . . . . . . . . . . . . . . . . . 367 13.2 Land-Doig-Dakins trädsökningsmetod . . . . . . . . . . . . . . . . 369


X

INNEHÅLL

13.3 Kombinatoriskt baserad trädsökning . . . . . . . . . . . . . . . . . 376 13.4 Övningsuppgifter . . . . . . . . . . . . . . . . . . . . . . . . . . . 385 14 Plansnittningsmetoder

14.1 14.2 14.3 14.4 14.5 14.6

401

Allmän plansnittning . . . . . Kända polytoper . . . . . . . . Gomorys plansnittningsmetod Andra typer av snitt . . . . . . Kombinationsmetoder . . . . . Övningsuppgifter . . . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

401 404 405 407 408 415

VI Komplexitet och generella metoder

421

15 Komplexitet

423

15.1 Problemkomplexitet . . . . . . . . . . . . . . . . . . . . . . . . . . 424 15.2 Övningsuppgifter . . . . . . . . . . . . . . . . . . . . . . . . . . . 433 16 Heuristiska metoder

16.1 16.2 16.3 16.4 16.5 16.6 16.7

Approximationsalgoritmer . Giriga metoder . . . . . . . Specialutvecklade algoritmer Lokalsökning . . . . . . . . Utvidgningar av lokalsökning Relaxationsmetoder . . . . . Övningsuppgifter . . . . . .

439

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

439 441 443 450 453 460 463

Lagrangerelaxation . . . . . . . . . . . . . . . . . . Subgradienter . . . . . . . . . . . . . . . . . . . . . Praktisk lösningsmetodik baserad på Lagrangedualitet Exempel på tillämpningar av Lagrangedualitet . . . . Övningsuppgifter . . . . . . . . . . . . . . . . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

479 487 489 491 499

17 Lagrangedualitet

17.1 17.2 17.3 17.4 17.5

479

Litteraturförteckning

513

Sakregister

517


DEL I

Introduktion



KAPITEL 1

Introduktion

I detta kapitel beskrivs vad optimering är och en viss klassificering av optimeringsmodeller diskuteras. Vi ger även en lista över verkliga problem som har behandlats/lösts med optimering.

1.1 Optimering Ordet ”optimus” betyder ”bäst” (på latin). Att optimera betyder alltså att finna det bästa sättet att utföra en uppgift. Vilken uppgift som ska göras och vad som menas med ”bäst” specificeras matematiskt. Detta medför att ”bäst” får en exakt och väldefinierad innebörd. I uppgiftens definition ingår även att specificera vad som är tillåtet (eller snarare vad som inte är tillåtet) att göra. Optimeringslära är alltså läran om hur man finner den bästa tillåtna lösningen till ett matematiskt definierat optimeringsproblem. Vi utgår från några (väldefinierade) variabler som är det vi styr med, det som vi väljer värden på och som så småningom kommer att definiera optimallösningen. Man använder en målfunktion för att ange hur bra olika lösningar är, genom att för varje möjligt värde på variablerna ge ett målfunktionsvärde. Dessutom finns vanligtvis ett antal bivillkor som anger vad som är tillåtet, genom att förbjuda vissa värden på variablerna. Ett optimeringsproblem är att finna en lösning som som uppfyller alla bivillkor och maximerar eller minimerar målfunktionsvärdet, z. max z = f (x) då gi (x) ≤ bi x∈X

i = 1, . . . , m

(P)

där x är en vektor av variabler, f (x) är målfunktionen och gi (x) ≤ bi för i = 1, . . . , m är bivillkoren. X är definitionsmängden för x och kan vara hela rummet eller delmängder därav. Ofta består X av alla ickenegativa punkter i aktuell dimension. Ett viktigt specialfall är när x bara får anta heltaliga värden.


4

KAPITEL 1 INTRODUKTION

Det finns åtminstone två väldigt starka skäl till att använda sig av en matematisk modell, man kan använda en metod för att hitta den bästa lösningen, och man kan verifiera att en lösning är bättre än en annan (genom att kontrollera tillåtenhet i bivillkoren och jämföra målfunktionsvärden). Har man ingen definierad målfunktion, kan man aldrig påstå att en lösning är bäst/optimal. Fokus i denna bok ligger på att använda metoder för att finna lösningen. Alternativet är att (som vi ofta gör i vardagligt liv) intuitivt göra olika val, med ett diffust mål framför ögonen. Som exempel, om man ska välja väg för att cykla från en plats till en annan, kanske man i första hand tänker välja den kortaste vägen. Indata kan då vara en något inexakt uppfattning av hur långa olika delsträckor är. Men man kanske egentligen vill finna den snabbaste vägen, och måste då uppskatta vilken skillnad i hastighet de olika sträckorna ger. Dessutom kanske man tycker att vissa sträckor är trevligare att cykla än andra. Med andra ord har man inte riktigt målet klart definierat för sig, dvs. ingen väldefinierad målfunktion. Dessutom kan indata vara bristfälliga och baserade på felaktiga uppskattningar. Därför kan man aldrig med fog påstå att en väg är sakligt bättre än en annan. Det man troligen har bra uppfattning om är bivillkoren som säger att det ska vara en väg mellan de två platserna, dvs. de flesta kommer nog fram till en lösning som faktiskt är en väg. Dock kan det tänkas att vissa personer ibland bryter mot vissa andra bivillkor, såsom enkelriktningar etc. Det kan också finnas bivillkor som vid beslutstillfället är okända, t.ex. ett nyligen startat vägarbete, som man givetvis inte kan ta hänsyn till, men som kan förändra lösningen helt. Sådan “vardagsoptimering” (som egentligen inte är optimering) gör vi alla, och kommer att fortsätta med. Men ibland är resultatet viktigare. Kostnaderna för dåliga/felaktiga lösningar kan vara höga, och man måste planera aktiviteterna i förväg. Ett reguljärt flyg från Linköping till Amsterdam får inte improvisera sin färdväg. Tåg får inte starta när som helst. Packningen på en rymdsond till Mars bör planeras noga. Designen av en bil måste uppfylla väldigt många krav. Om man dessutom kan få fram pålitliga indata, kan dessa beslut fattas på bra grund. Jag skulle också kunna nämna många fall där optimeringen skulle kunna göras, men idag inte görs, ordentligt. Det långsiktiga målet med denna bok är att främja användandet av riktig optimering. Boken skulle kunna ha undertiteln “när intuitionen inte räcker till”. Om man har använt en relevant matematisk modell, korrekta indata och en välvald optimeringsmetod, och fått fram en optimal lösning, krävs ibland att man efteråt redovisar sitt tillvägagångssätt för andra personer. Otaliga duktiga forskare har utvecklat effektiva optimeringsmetoder och bevisat att de fungerar, och dessa resultat måste man ju använda. Man behöver därför inte hitta på ett nytt bevis för att en känd metod ger optimum. Man behöver heller (vanligtvis) inte beskriva alla detaljer i metoden, speciellt inte för en hög beslutsfattare som inte kan någon matematik alls. Däremot kan man för en initierad person ibland behöva verifiera att man har använt


1.1 OPTIMERING

5

en lämplig metod på ett korrekt sätt, speciellt vid handräkning. Denna bok handlar om att lära sig metoder, så att lyckas lösa ett problem utan att använda en metod är i detta sammanhang värdelöst. Lite kort om notation. Beteckningar såsom x, b och c avser oftast kolumnvektorer, medan xj , bi och cj är de skalära elementen i dessa vektorer. I löpande text, där formatet är mindre viktigt, används ofta för bekvämlighets skull notationen x = (1, 0, 2) för lösningen x1 = 1, x2 = 0, x3 = 2, i stället för en explicit kolumnvektor eller x = (1 0 2)T . Versaler såsom A och X betecknar oftast matriser eller mängder. Delområden

Man brukar dela upp optimeringslära i olika delområden beroende på egenskaperna hos den matematiska modellen, främst då egenskaperna hos funktionerna f (x) och gi (x) samt mängden X. Modellens egenskaper medför olika slutsatser om var man ska leta efter optimallösningen och vilka angreppssätt man kan använda sig av. Låt oss nämna några delområden, och ange namn och år när man kan säga att det området grundades. Linjärprogrammering, LP (Dantzig, 1949): Här är samtliga funktioner linjära och variablerna får anta kontinuerliga värden. X är den ickenegativa ortanten. Ickelinjär programmering, ILP (Kuhn & Tucker, 1951): Här är en eller flera av funktionerna olinjär. Vanligtvis är variablerna kontinuerliga. Heltalsprogrammering, HP (Gomory, 1958): Här måste variablerna anta heltaliga värden, dvs. X består av diskreta punkter. Vanligtvis är funktionerna linjära. Dynamisk programmering, DynP (Bellman, 1957): Här är problemet uppdelat i steg (ofta tidssteg), och kan med fördel angripas genom att dessa steg utnyttjas. Kombinatorisk optimering: Här läggs fokus på att studera olika kombinationer, snarare än att söka i en kontinuerlig rymd. Problem med binära variabler samt många grafproblem behandlas inom detta område. Det handlar som synes om en ung vetenskap, som i princip föddes i samband med andra världskriget, då man försökte utnyttja sina knappa resurser så effektivt som möjligt. Vi kommer att definiera mer noggrant vad de olika benämningarna åsyftar. Nämnas bör väl också att ordet ”programmering” ska tolkas baserat på de grekiska orden ”pro” + ”gramma”, vilket ger betydelsen föreskrift, planering. Det handlar alltså inte om Java, C eller Python. Området kombinatorisk optimering har inget egentligt födelsedatum. Det kan upplevas som mer avancerat, och därmed modernare, än linjär- och ickelinjär programmering, men har äldre rötter. Några viktiga namn och årtal är Monge 1784, Frobenius 1912, König 1915, Egervary 1931, Easterfield 1946 och Robinson 1949.


6

KAPITEL 1 INTRODUKTION

Därefter flyter utveckling av linjär- och ickelinjär programmering in i området, och en korsbefruktning sker. Hela proceduren

Proceduren när man ska använda optimering för att lösa ett verkligt problem kallas ibland operationsanalys (på engelska operations research). Följande faser genomgås då. 1. Formulering av problemet i ord. Finns det ett problem? Vad vill man optimera? Vilka begränsningar finns? 2. Konstruktion av en matematisk modell. Här definieras variabler, bivillkor och målfunktion samt alla samband. Är resultatet en LP-, ILP- eller HP-modell? 3. Insamling av data. Alla koefficienter i den matematiska modellen måste få numeriska värden. 4. Lösning av det matematiska problemet. Här väljs lämplig optimeringsmetod. 5. Utvärdering av resultat (och modell). Är resultatet realistiskt, lämpligt, vettigt, ”bra”? Om inte, gå till 2 om felet verkar ligga i modellen eller till 3 om felet verkar bero på felaktiga data. 6. Använd resultatet. Vi kommer här att koncentrera oss på punkt 4, nämligen den matematiska lösningsmetoden, och punkt 2, den matematiska formuleringen av optimeringsproblemet. Punkterna 1, 3, 5 och 6 kräver omfattande kunskaper om den relevanta verkligheten, och här behöver optimeringsexperten ta hjälp av representanter för verksamheten (företag, samhälle). Förenkling

Man ska ha klart för sig att varje optimeringsmodell är en förenkling av verkligheten. Som ett exempel kan nämnas att finna bästa vägen att köra sin bil mellan två platser. Kostnaden för att använda en väg kan då bestå av bensinkostnader och andra slitagekostnader, och blir då starkt kopplad till avståndet mellan olika punkter man kan tänkas passera. Dock är det ytterst sällan man tar hänsyn till vädret när man beräknar kostnaderna, trots att det faktiskt går åt mer bensin om man har kraftig motvind än om man har medvind. Varför tas då inte detta med i beräkningen? Ett skäl kan vara att effekten är så liten, jämfört med andra kostnader, att bästa valet av väg inte påverkas. Även om kostnaden inte blir precis den man trodde, blir ingen annan väg bättre. Ett annat skäl kan vara att vi inte känner till vilket väder det kommer att vara när vår färd ska äga rum. Slumpmässiga faktorer som man inte kan förutsäga tas oftast inte med i beräkningen, trots att vi vet att resultatet av optimeringen kanske inte är helt korrekt om en storm skulle inträffa. Ytterligare skäl kan vara att det inte är vid


1.2 METODVAL

7

ett enda tillfälle som resultatet ska användas. Den bästa väg vi räknar fram kanske ska användas fem dagar i veckan under hela året. Det är dock en fördel att vara medveten om vilka förenklingar som gjorts. Målet är att förenklingarna man gör inte ska påverka resultatet (optimallösningen) speciellt mycket. Det handlar mycket om gränsdragning mellan viktiga aspekter (som tas med i modellen) och perifera aspekter (som inte tas med). Man ska alltid komma ihåg att resultatets kvalitet beror på modellens kvalitet och indatas kvalitet. Kan man inte få tag på pålitliga indata, kanske modellen behöver göras om. När man ska göra en matematisk formulering av ett optimeringsproblem ställs man nästan alltid inför den svåra avvägningen mellan modellens relevans och lösbarhet. Hög relevans hänger ofta ihop med låg lösbarhet, dvs. en modell som tar hänsyn till allting blir ofta väldigt stor och olösbar inom rimlig tid, medan en enkel, lättlöst modell kanske inte har tillräcklig relevans, dvs. gör alltför stora förenklingar för att modellens bästa lösning ska vara den bästa lösningen för det verkliga problemet.

1.2 Metodval När man väljer optimeringsmetod är målet att lösa problemet så effektivt som möjligt. Detta är viktigt, ty verkliga problem är stora. I undervisningssituationen behandlas företrädesvis mycket små problem, speciellt vid handräkning. Det är dock viktigt att försöka inse hur metoderna uppför sig då man angriper riktigt stora problem. Alla optimeringsmetoder som är värda namnet (till skillnad från demonstrationsprogram etc.), ska vara utvecklade för stora problem, dvs. ha bra prestanda när de används på stora problem. För små problem spelar metodvalet oftast mindre roll, men för stora kan skillnaden bli dramatisk. Om metod A tar 3 sekunder för att lösa ett visst litet problem, och metod B tar 4 sekunder, så kan det ta 3 timmar för metod A att lösa ett större problem, medan metod B kräver en vecka. (Det vanliga är att skillnaden ökar snabbare än linjärt.) Om man bara testar metoderna på det lilla problemet, och därför drar slutsatsen att metod B är tillräckligt bra (den kanske är lättare att implementera), så har man ju gjort ett stort misstag. En dålig metod kan alltså ta lång tid, när den appliceras på verkliga problem. En smart implementering, dvs. effektiva datastrukturer och smart programmering, är oftast inte tillräcklig för att göra en dålig metod bra. En dålig grundmetod ger oftast mycket större negativ effekt än de positiva effekter en slipad implementering kan ge. Man bör räkna med att skillnaden mellan bra och dåliga metoder bara framträder när man löser stora problem på dator, men inte när man löser små problem för hand. Se även diskussionen om komplexitet i kapitel 15. Trots att det teoretiskt är möjligt att räkna upp alla 0/1-kombinationer för att hitta optimum till ett kombinatoriskt problem, bör man använda bättre metoder. Det


8

KAPITEL 1 INTRODUKTION

viktiga är att begränsa uppräkningen så mycket det går. Fullständig uppräkning av alla möjliga alternativ är något man kan syssla med om antalet alternativ är mycket litet (vilket det sällan är i verkligheten) eller om man är okunnig i optimeringslära. I det senare fallet får man dock vara beredd att vänta på resultatet, kanske i många år. Låt oss exemplifiera med att ordna n objekt med följande illustration. Antag att objekten är n personer som ska fotograferas, och att man vill ta ett foto med varje möjlig ordning av personerna från höger till vänster. Det finns n! olika sätt att ordna personerna. Antag nu att det tar 15 sekunder för personerna att byta plats. Om det bara är fyra personer, finns det 24 olika sätt att ställa upp personerna. Det kommer då att ta 6 minuter att fotografera alla kombinationerna. Om vi har 8 personer, kommer det att ta en hel vecka att gå igenom alla kombinationer. För 12 personer skulle det ta 228 år. För 16 personer är tiden nästan 10 miljoner år, och för 18 personer skulle det ta ca 3 miljarder år. (Jorden har funnits i ungefär 4,5 miljarder år.) Om man lägger till ytterligare en person, blir tiden nästan 58 miljarder år, så för att vara färdiga nu, skulle vi ha börjat långt före Stora smällen (”Big Bang”). Datorer är mycket snabbare än människor, men å andra sidan vill vi kunna lösa problem med betydligt fler än 18 variabler. Antag i stället att det tar 15 nanosekunder att undersöka en kombination. Med 16 objekt skulle det nu ta under 4 dagar, med 18 objekt 3 år och med 19 objekt 58 år. Vi får dock inte bli övermodiga. För 20 objekt tar det 1 157 år, för 25 objekt mer än 7 miljarder år och för 30 objekt 1,26 · 1017 år. Slutsatsen är att ”metoden” att räkna upp alla möjligheter är för dålig. Vem som helst (i princip) kan programmera en kod som använder den ”metoden”, men att leva tills koden har löst ett någorlunda stort problem är värre. Vi (optimerare) använder helt enkelt bättre metoder!

1.3 Tillämpningsområden Inom ämnesområdet optimeringslära vid Linköpings universitet har många olika sorters verkliga problem behandlats med hjälp av optimeringsteknik. Nedan följer en kortfattad lista över vissa av problemen. Närmare detaljer om dem kan man få genom att kontakta författaren (e-post: kaj.holmberg@liu.se).

Optimal snöröjning. Optimal digital kartmatchning. Optimal formering av studentgrupper. Optimal design av kullager. Optimal omruttning för symmetriska trestegs-Closnätverk Optimal stråldosering vid cancerbehandling. Optimal planering av sjuksköterskor. Optimerade dagbrott. Optimal packning av pappersrullar i järnvägsvagnar.


1.4 VAD MAN FINNER PÅ NÄTET

9

Optimal design av telekommunikationsnät/datanät med modern vägvalsprincip (IP/OSPF). Styrning, kontroll och modellering av trafik i IP-nät. Frekvensplanering i GSM. Optimal placering och förflyttning av tomvagnar på järnväg. Optimal planering av lastad tågtrafik. Optimal placering av autonoma flygfarkoster (UAV) som kommunikationsreläer. Optimal design av filter. Optimal planering av skogsavverkning. Optimalt vägunderhåll. Trafikplanering (nya vägar, vägtullar). Optimalt utnyttjande av kraftverk. Optimal placering av t.ex. fabriker, lager, varuhus. Optimal ruttplanering för gas-/oljeleverantörer. Optimal processtyrning vid raffinaderier. Finansiell riskhantering. Optimering av robotrörelser. Optimal planering av transporter. Optimal planering av produktion. Kostnadsdelning inom ruttplanering. Optimal schemaläggning. Optimal personalplanering.

1.4 Vad man finner på nätet På nätet (Internet) kan man finna mycket intressant inom optimeringslära. (Jag kommer här inte att ge exakta www-adresser, eftersom de ändras ofta, utan förutsätta att läsaren kan använda sökmotorer, såsom Google.) Vi kan speciellt nämna Linear Programming FAQ och Nonlinear Programming FAQ (FAQ betyder ”Frequently Asked Questions”) som återfinns under Neos Optimization Guide, tillsammans med mycket annat. Paketet GLPK (GNU Linear Programming Kit), innehåller koden GLPSOL, som löser linjära problem (och linjära heltalsproblem), och använder modelleringsspråket GMPL. Färdigkompilerade versioner finns för flera Linux-varianter. En annan fri lösare för linjära problem (och linjära heltalsproblem) är LP _ SOLVE. En tredje LPlösare är QS OPT. En mycket bra kod för approximativ lösning av handelsresandeproblemet är LKH. Under Decision Tree for Optimization Software finner man pekare till många olika koder för olika optimeringsproblem. Inom Python-världen kan nämnas SciPy som innehåller lösare för flera optimeringsproblem. Se även min egen sida med länkar: »http://www.kajh.se/vineopt/links.html».



KAPITEL 2

Introduktion till linjärprogrammering

I detta kapitel ges en introduktion till linjära optimeringsproblem. Vi börjar med ett litet exempel som löses grafiskt. Vi diskuterar därefter modellering i allmänhet lite kort, och ger exempel på linjära modeller.

2.1 Exempel på linjärprogrammeringsproblem Låt oss börja beskrivningen av linjärprogrammering (LP) med ett litet exempel. Chokladfabrikanten Cloetta ska lägga ett veckoprogram för sin stora gjutanläggning. Då ska Plopp och Center produceras till en kampanj som startar veckan efter. Center kommer att nylanseras som stycksak, och därför säljas med ett introduktionserbjudande och endast ge halva vinsten jämfört med storsäljaren Plopp. Produktion av Plopp hela veckan skulle ge vinsten 20 000 kr, medan produktion av Center skulle ge 10 000 kr. Marknadsavdelningen bedömer att maximalt 75 % av veckoproduktionen kan avsättas i form av Plopp. Inköpsavdelningen meddelar att tillgången av glukos som ingår i fyllningen i produkterna är begränsad till 10 ton. Producerar man Plopp hela veckan åtgår 8 ton glukos, medan en hel veckas produktion av Center kräver 20 ton glukos. Endast en produkt i taget kan göras på gjutanläggningen. Hur ska produktionen planeras för att maximera vinsten? Man bör börja med att definiera vilka variabler problemet har. I detta fall handlar det om att planera produktionen av de två produkterna. Frågan är vilken sort variablerna ska ha. Eftersom koefficienterna i problemet är relaterade till tid (andel av vecka), snarare än antal enheter som produceras, bör sorten vara den tid som läggs ner på de två produkterna. Jag har valt andel av vecka, vilket gör att variabelvärdena kommer att ligga mellan noll och ett. Alternativt kan man välja dagar, timmar eller sekunder, vilket skulle innebära en omskalning av variablerna och därmed också av koefficienterna.


12

KAPITEL 2 INTRODUKTION TILL LINJÄRPROGRAMMERING

Variabeldefinition: x1 = andel av vecka 15 som används till produktion av Plopp. x2 = andel av vecka 15 som används till produktion av Center. Därefter sätter man upp de matematiska samband som finns, dels för att bestämma vilka lösningar som är tillåtna (bivillkoren), dels för att avgöra hur stor vinsten blir (målfunktionen). Om vi lyckas göra samtliga matematiska samband linjära fås en linjärprogrammeringsmodell. I detta fall får vi bivillkor som anger att tiden som ska planeras är (högst) en vecka, (1), att marknaden begränsar försäljningen, (2), och att tillgänglig mängd glukos måste räcka, (3). När det gäller bivillkor 1 är det bara att summera de två tiderna för att få total tid. I bivillkor 2 ingår endast produkt 1. I bivillkor 3 kan man notera att åtgången av glukos beror linjärt på tiden vi använder till produktion, och den totala åtgången är helt enkelt summan av åtgången för de två produkterna. Man bör inte glömma villkoren att variabelvärdena inte får vara negativa. (Vi har ingen tolkning av negativ tid.) Målfunktionen avser vinst, och ska maximeras. Jag väljer att räkna i hela 10 000kronorssedlar, vilket innebär att jag slipper skriva ett antal nollor i målfunktionen. Vi får följande matematiska modell. max z = 2x1 + x2 då x1 + x2 x1 8x1 + 20x2 x1 , x2

≤ 1 ≤ 34 ≤ 10 ≥ 0

(1) (en vecka) (2) (marknaden) (3) (glukos) (4)

I figur 2.1 ges en bild av bivillkoren, med målfunktionen streckad för ett par olika värden på vinsten. Observera att de möjliga omskalningar av variabler och målfunktion som diskuterats ovan inte alls påverkar utseendet av det tillåtna området eller målfunktionens lutning. (Endast axlarnas skalning ändras.) Detta innebär att den optimala lösningen inte ändras av skalningen. Optimallösningen till detta problem är x1 = 0,75, x2 = 0,2, z = 1,7, vilket i klartext betyder: Producera Plopp 75 % av veckan och Center 20 % av veckan, vilket ger en vinst på 17 000 kr. Denna lösning kan i det tvådimensionella fallet finnas med grafisk lösning. Denna metod går i korthet ut på att man parallellförflyttar målfunktionsfronten (med hjälp av en linjal) mot bättre och bättre målfunktionsvärden, tills ytterligare förflyttning skulle innebära att det inte finns någon tillåten lösning med detta målfunktionsvärde. Den på detta sätt sist funna tillåtna punkten är bäst, dvs. optimal. I figuren är den markerad med en liten ring. I stället för att försöka läsa ut koordinaternas värden i figuren, kan man beräkna den optimala punkten exakt genom att identifiera de aktiva bivillkoren, dvs. de som är uppfyllda med likhet i punkten, och lösa det resulterande ekvationssystemet (exakt).


2.1 EXEMPEL PÅ LINJÄRPROGRAMMERINGSPROBLEM

13

x2 1

(1)

(3)

z=0

(2)

z=1

1

x1

Figur 2.1. Chokladexemplet. Den lilla ringen indikerar optimallösningen.

(I figuren ser vi att bivillkor 2 och 3 är aktiva, så genom att sätta likhet i dem kan man lösa ut ovanstående punkt.) Man kan även notera att det bara finns ett begränsat antal möjligheter för vilka bivillkor som är aktiva, till skillnad från koordinaterna för den optimala punkten. Dessutom finns ett visst intresse av att veta vilka bivillkor som är aktiva, eftersom det ger information om vilka resurser som används fullt ut (och vilka som till någon del är oanvända). I detta fall kan vi konstatera att bivillkor 2 och 3 är aktiva, vilket betyder att vi säljer all Plopp som går att sälja, och använder all tillgänglig glukos, medan bivillkor 1 inte är aktivt, vilket betyder att gjutanläggningen inte används hela veckan, utan står oanvänd viss tid (och därför skulle kunna användas till annat den tiden). Vi ser att bivillkor 1 ligger helt utanför det tillåtna området. Om man skulle ta bort bivillkor 1 skulle det tillåtna området inte alls förändras. Ett sådant bivillkor kallas redundant. Variationer

Låt oss nu betrakta några variationer av exemplet i föregående avsnitt för att illustrera några specialfall. Antag att vi inte har tillgång till gjutanläggningen hela veckan, utan bara 95 % av veckan. Bivillkor 1 blir då x1 + x2 ≤ 0,95. Om vi ritar in detta bivillkor, fås figuren 2.2. Optimallösningen är inte förändrad, men alla tre bivillkoren är aktiva i optimum. Det är ett “för mycket”, eftersom det räcker med två aktiva bivillkor för att specificera


14

KAPITEL 2 INTRODUKTION TILL LINJÄRPROGRAMMERING

x2 1

(1)

(3)

z=0

(2)

z=1

1

x1

Figur 2.2. Degenererad lösning. Tre bivillkor (ett “för mycket”) är aktiva i optimum.

en punkt. Vi kan alltså välja vilka två bivillkor som helst av de tre aktiva för att lösa ut vår punkt. En sådan punkt kallas degenererad, och betydelsen av detta kommer att framgå då vi börjar diskutera baslösningar. Vi kan notera följande. Om man väljer två aktiva bivillkor, och struntar i det tredje, går det bra med 2 och 3 aktiva, och med 1 och 2 aktiva. Däremot, om vi väljer 1 och 3 som aktiva och struntar i 2, så verkar det som punkten inte längre är optimal, eftersom bivillkor 1 och 3 tillåter bättre punkter. Man måste alltså ta med bivillkor 2 som aktivt för att inse att punkten är optimal. En annan variation av det ursprungliga exemplet fås om målfunktionen ändras så att produktion av Plopp hela veckan skulle ge vinsten 10 000 kr, medan produktion av Center skulle ge 25 000 kr. Om vi gör denna ändring grafiskt fås figuren 2.3. Den tidigare optimallösningen är fortfarande optimal, men eftersom målfunktionen är parallell med bivillkor 3, så är även punkten x1 = 0, x2 = 0,5 optimal. Dessutom är alla punkter däremellan också optimala. I detta fall har vi alltså en icke-unik optimallösning.

2.2 Några modelleringsprinciper Att konstruera en matematisk modell till ett optimeringsproblem kan ibland ses som en konstart (i stället för vetenskap). Dock finns det vissa regler man kan följa, för att sträva efter att göra processen så metodisk som möjligt. Följande huvuduppgifter måste utföras:


2.2 NÅGRA MODELLERINGSPRINCIPER

15

x2 1

(1)

(3)

(2)

1

x1

Figur 2.3. Icke-unik optimallösning, dvs. det finns flera optimala punkter.

1. Variabeldefinition. 2. Formulering av målfunktion. 3. Formulering av bivillkor. Först av allt måste man göra en variabeldefinition, av det enkla skälet att allt annat i modellen bygger på variablerna. Det är till och med viktigt vilken sort variablerna har (sekunder, minuter, timmar, dagar eller år; styck, dussin, tjog eller tusental, osv.). Variablerna i en modell är oftast de storheter som man direkt bestämmer över och som man vill finna de optimala värdena på. Ofta är det aktiva storheter, t.ex. hur många enheter man väljer att producera, snarare än följder av dessa val, t.ex. hur mycket som går åt av någon resurs till följd av denna produktion. Ibland kan man snegla på vilka storheter som specificerar en optimallösning, eftersom en sådan oftast innehåller de optimala värdena av variablerna. Därefter sätter man upp målfunktionen. Först bestämmer man vad man vill minimera eller maximera, och därefter skriver man upp ett explicit uttryck för målfunktionsvärdet som funktion av variablerna. Bivillkoren konstrueras ungefär på samma sätt som målfunktionen, men här ska värdet på uttrycket begränsas, uppåt eller nedåt. Man skriver vanligtvis variablerna till vänster och konstanten till höger om likhets- eller olikhetstecknet. Man kan notera att bivillkoren talar om vad som är förbjudet, inte vad som är tillåtet. Ett bivillkor förbjuder alltså vissa punkter, men om de andra punkterna är tillåtna beror på alla andra bivillkor. Det tillåtna området ges av den sammanlagda effekten av alla bivillkor.


16

KAPITEL 2 INTRODUKTION TILL LINJÄRPROGRAMMERING

Multiplikativ skalning av koefficienter som diskuterats tidigare (t.ex. att dividera alla målfunktionskoefficienter med 10 000) är tillåten, och förändrar inte optimallösningen. Notera dock att vid omskalning av ett bivillkor måste samtliga koefficienter och högerledet skalas om på samma sätt. Omskalning av en variabel innebär att alla dess koefficienter, både i bivillkor och målfunktion, ska skalas om på samma sätt. Eftersom linjära modeller oftast är lättast att lösa, bör man undvika att konstruera olinjära funktioner (t.ex. genom att multiplicera variabler med varandra) om det inte är absolut nödvändigt. Mycket av det som gäller för linjära problem (speciellt var och hur man ska leta efter optimallösningen) gäller inte för olinjära problem.

2.3 Exempel på problemformuleringar Låt oss nu ge modeller i mer allmänna termer, där numeriska värden på koefficienterna inte ges. I stället används matematiska beteckningar och generella koefficienter. Att formulera ett problem matematiskt i sådana beteckningar går utmärkt, även om man givetvis måste sätta in numeriska värden när problemet ska lösas. Läsaren antas förstå viss matematisk notation som summatecken och ∀ i, vilket betyder för alla i. Exempel 1: Råvaror och slutprodukter

Vi har m olika råvaror som ska blandas ihop till n olika slutprodukter. Det finns inte mer än ai kg av råvara i, och vi vill ha bj kg av slutprodukt j. Slutprodukt j får inte innehålla mer än dij kg av råvara i. Varje kg av råvara i kostar ci kr och varje kg av slutprodukt j inbringar vi kr. Vi vill maximera nettovinsten. Å ena sidan har vi alltså begränsade mängder råvaror, å andra sidan krav på vissa mängder av slutprodukterna. Variablerna kan inte formuleras enbart i råvaror eller enbart i slutprodukter, utan måste innehålla båda dessa dimensioner. Detta ger på ett naturligt sätt två index på variablerna. Variabeldefinition: xij = antal kg av råvara i som används till slutprodukt j. max z = då

m n

(vj − ci )xij

i=1 j=1 n j=1 m i=1

xij ≤ ai

i = 1, . . . , m

(1)

xij = bj

j = 1, . . . , n

(2)

xij ≤ dij i = 1, . . . , m, j = 1, . . . , n (3) xij ≥ 0 i = 1, . . . , m, j = 1, . . . , n (4)


2.3 EXEMPEL PÅ PROBLEMFORMULERINGAR

17

Problemet tillhör en standardgrupp av linjära problem, nämligen blandningsproblem. I dessa problem har man oftast två sidor, nämligen tillgångssidan och efterfrågesidan, och båda två ger upphov till bivillkor. En fördel med att använda två index på variablerna är att bivillkoren går att skriva på relativt enkla sätt. Om man försöker göra formuleringen med endast ett variabelindex, blir summeringarna (dvs. frågan vilka variabler som ska vara med i respektive bivillkor) betydligt mer komplicerad. (Läsaren uppmanas att inte försöka.) Exempel 2: Skogsprodukter

Mälarhöjdens Sågverk köper olika skogsråvaror (från tjocka timmerstockar till småkvist) från Mälardalens Skogsägare och producerar olika slutprodukter (bl.a. plankor av olika dimensioner). Varje råvara kan användas till flera olika slutprodukter. Ett ton av råvara i ger aij ton av slutprodukt j. Priserna på råvarorna varierar med tiden, och man har möjlighet att lagra råvaror till framtida tidsperioder. Under månad t kostar det cit kr att köpa in ett ton av råvara i, och försäljning av ett ton av färdigprodukt j ger intäkten djt . Att lagra ett ton av råvara i till nästa månad kostar li . Det finns högst Sit ton av råvara i tillgängligt för inköp under månad t. Man kan inte lagra mer än L ton mellan två månader. Alla färdigprodukter som produceras säljes direkt. (Efterfrågan anses obegränsad.) Det finns inga kostnader för själva produktionen. Man vill formulera en LP-modell för hur sågverket ska planera sina inköp, produktion, lagerhållning och försäljning under T månader, så att vinsten maximeras. Man kommer att använda planeringen upprepade gånger i följd, så inlagret till första månaden sätts lika med utlagret efter den sista. För ett problem av denna typ behövs flera olika typer av variabler. xit = Antal inköpta ton av råvara i i månad t. yijt = Antal ton av råvara i som används till slutprodukt j i månad t. vit = Antal ton av råvara i i lager i slutet av månad t. Den matematiska modellen blir som följer. max z = djt aij yijt − cit xit − li vit t t t j i i i då vi,t−1 + xit − yijt = vit ∀ i, t (1) j

viT − vi0 = 0 ∀i xit ≤ Sit ∀ i, t vit ≤ L ∀ t i

x, v, y ≥ 0

(2) (3) (4)


18

KAPITEL 2 INTRODUKTION TILL LINJÄRPROGRAMMERING

Den första gruppen bivillkor hanterar lagerhållningen, genom att beräkna utgående lager som ingående lager plus inköpta råvaror minus använda råvaror. Den andra ser till att modellen blir cyklisk, genom att låta utlagret efter den sista perioden bli inlager till den första. Därefter kommer kapacitetsvillkor, först för råvarorna, 3, och sedan för lagren, 4. Målfunktionen maximerar intäkterna minus kostnaderna.

Exempel 3: Julgransförsäljning

Grangrossisten Göran Granstam är missnöjd med sin julgransförsäljning. I Köping tog granarna slut alldeles för tidigt, medan man i Västerås hade stora lager kvar efter julafton. Han bestämmer sig för att göra en bättre planering nästa gång. Han har granlager på ett antal platser, där också granarna säljs, och avverkning på andra platser. På avverkningsplats i finns si granar av lämplig storlek. Granar som inte avverkas finns kvar till nästa år, och har värdet q per gran (i medel). Transportkostnaden per gran från avverkningsplats i till lagerplats j är cij . En avverkad gran som inte är såld den 25 december anses värdelös och kastas. På lagerplats j finns utrymme för att lagra kj granar och lagerkostnaden per natt och gran är lj . Försäljningspriset per gran är fj . Efter mycket funderande och studium av tidigare års försäljning, gör Göran prognosen att högst dj granar per dag kan säljas på plats j. (På vissa lagerplatser finns ingen försäljning, men det modellerar han helt enkelt genom att sätta dj = 0.) Göran vill bestämma avverkning, transporter, lagerhållning och försäljning. Avverkade granar lagras inte vid avverkningsplatserna utan transporteras direkt till lagerplatserna. Avverkning och transport sker en gång per dag (på morgonen). Hjälp Göran att formulera en LP-modell för att maximera vinsten. Modellen ska täcka de 30 dagarna från 25 november till 25 december. Alla lager är tomma före den 25 november. Även här behövs flera olika grupper av variabler. xit = Antal granar som avverkas på avverkningsplats i dag t. yijt = Antal transporterade granar från avverkningsplats i till lager j dag t. ujt = Antal granar i lager på lagerplats j från dag t till dag t + 1. wjt = Antal granar som säljs på lagerplats j dag t. vi = Antal granar som står kvar på avverkningsplats i efter den 25 december. Den matematiska modellen blir som följer: max z = fj wjt − cij yijt − lj ujt + qvi j

t

i

j

t

j

t

i


2.4 ÖVNINGSUPPGIFTER

xit −

då uj,t−1 +

i

yijt = 0

∀ i, t

19

(1)

j

yijt − wjt − ujt = 0 xit ≤ si

∀ j, t > 0 (2) ∀i

(3)

t

ujt ≤ kj ∀ j, t w jt ≤ dj ∀ j, t vi + xit = si ∀ i t

uj0 = 0 x, y, u, v, w ≥ 0

∀j

(4) (5) (6) (7)

Bivillkorsgrupp 1 ser till att de granar som avverkas transporteras till ett lager. Grupp 2 beräknar utgående lager som ingående lager plus det som transporteras dit, minus det som säljs. Därefter följer kapacitetsvillkor, först för avverkningen, sedan för lagerhållningen och till sist för försäljningen. Bivillkorsgrupp 6 beräknar hur många granar som står kvar efteråt. Avslutningsvis sätts ingående lager till noll.

2.4 Övningsuppgifter Låt oss nu ge några ytterligare exempel på optimeringsproblem som kan formuleras som linjärprogrammeringsproblem. Flera andra exempel som ger linjära modeller, med tillägget att alla eller vissa variabler måste anta heltaliga värden, återfinns i avsnitt 3.5. UPPGIFT 2.1

Ett elektronikföretag tillverkar kretskort av typ 1 och 2. Beräknad vinst per såld enhet är 2 400 kr respektive 600 kr. Tre specialmaskiner, en för ytbeläggning, en för etsning och en för lödning, hyrs av ett leasingföretag för att genomföra produktionen. Veckokapaciteten per maskin är 100 timmar. Kapacitetskraven (tim/enh) ges i nedanstående tabell: Maskin Ytbeläggning Etsning Lödning

Kort 1 2 6 10

Kort 2 2 1 0

Företaget har ett återvinningsansvar, vilket innebär att man måste betala miljövänlig återvinning av kretskorten. Man uppskattar kostnaden till 300 kr per kretskort oavsett sort. Formulera problemet att bestämma i vilka kvantiteter korten ska tillverkas för att vinsten ska bli maximal.


20

KAPITEL 2 INTRODUKTION TILL LINJÄRPROGRAMMERING

UPPGIFT 2.2

Dietproblemet [9]: Polly undrar hur mycket pengar hon ska använda till mat, så att hon får all den energi (2 000 kcal), protein (55 g) och kalcium (800 mg) hon behöver varje dag. Hon väljer sex olika födoämnen, som verkar vara billiga källor för näring. Data ges i tabellen nedan. Efter lite funderande bestämmer hon sig för att hon inte kan äta mer än följande antal portioner per dag: havregryn: 4, kyckling: 3, ägg: 2, mjölk: 8, körsbärspaj: 2, bruna bönor och fläsk: 2. Formulera Pollys problem att minimera kostnaden för mat, under förutsättning att alla krav uppfylls. Portions- Energi Protein Kalcium PortionsFödoämne storlek (kcal) (g) (mg) pris Havregryn 28 g 110 4 2 3 Kyckling 100 g 205 32 12 24 Ägg 2 st 160 13 54 13 Mjölk 237 ml 160 8 285 9 Körsbärspaj 170 g 420 4 22 20 Bruna bönor & fläsk 260 g 260 14 80 19

UPPGIFT 2.3

Vid uppstigning i luftballong används vikter som hänger i ballongkorgen. Genom att vid behov släppa ner dessa vikter, kan man göra ballongen lättare. Studenten Udolf funderar på att tjäna lite pengar på att tillverka och sälja sådana vikter till hugade ballongfarare. En ballongvikt består helt enkelt av en tygpåse fylld med sand. Udolf har tillgång till tre olika sorters sand, vit sand från Öland, brun sand från Östgötaslätten och svart sand från Norge, och funderar på vilka sorter han ska använda. Vissa egenskaper hos sanden ges i nedanstående tabell. Sand Vit Brun Svart

Densitet (kg/dm3 ) 3,2 2,2 3,4

Kornstorlek (mm) 0,4 1,8 0,3

Pris (per kg) 9 3 12

Tygpåsen har storleken 5 dm3 och håller inte för mer än 16 kg sand. Udolf planerar att göra 100 identiska påsar under nästa vecka, men kan under den tiden inte få tag på mer än 200 dm3 svart sand och 400 dm3 vit sand. När påsarna faller ner, slås de sönder, så för att inte förändra den lokala miljön alltför mycket, kräver Udolf att sanden inte innehåller mer än 50 % vit sand. Han vill minimera kostnaden för


2.4 ÖVNINGSUPPGIFTER

21

sanden, men kräver att en påse inte får väga mindre än 13 kg. Formulera Udolfs sandproblem som ett LP-problem.

UPPGIFT 2.4

Ett daghem har uppskattat antalet arbetstimmar under de närmaste fem månaderna. Den fasta personalen består i början av juli av 12 dagbarnvårdare. Varje dagbarnvårdare kan arbeta upp till 160 timmar per månad. Man kan även ta in nyanställd personal. En helt nyanställd anses inte göra någon nytta alls den första månaden, utan kräver i stället 50 timmars handledning av en utbildad dagbarnvårdare. Efter en månad är den nyanställde färdigutbildad, och kan göra full nytta. En utbildad dagbarnvårdare har en månadslön på 15 000 kr (oavsett antalet arbetstimmar under månaden) och en nybörjare har en månadslön på 11 000 kr. I slutet av varje månad slutar 15 % av de utbildade dagbarnvårdarna av olika skäl. Månad Juli Augusti September Oktober November

Antal timmar 600 700 800 950 900

Formulera en linjär optimeringsmodell för att minimera den totala lönekostnaden för den givna perioden.

UPPGIFT 2.5

Det internationella företaget Nyser tillverkar buljong. Man funderar på att göra en ny sort, Bouillione Light, som ska innehålla mindre fett än den vanliga, Bouillione de Luxe. En tärning Bouillione de Luxe väger 10 gram. Innehållsförteckningen (i viktordning) lyder: salt, smakförstärkare (E621, E627, E631), palmfett, potatisstärkelse, hydrolyserat vegetabiliskt protein, maltodextrin, socker, jästextrakt, nötköttsextrakt 2 %, aromer, gurkmeja, selleriblad, färgämne. Fetthalten är 16 %. För att minska den totala fetthalten, kan man minska mängden palmfett, men också mängden kött (som ju innehåller fett). För att få ett godtagbart resultat när det gäller smak, behöver man öka mängden smakförstärkare (E621, E627 och E631) och salt. Kostnader per gram (normerade) och mängd i Bouillione de Luxe (gram)


22

KAPITEL 2 INTRODUKTION TILL LINJÄRPROGRAMMERING

och fetthalt för de berörda råvarorna är följande: Ämne Palmfett Nötköttsextrakt E621 E627 E631 Salt

Kostnad 0,12 1,00 0,04 0,05 0,06 0,07

Mängd (gram) 1,5 0,2 1,1 1,0 0,9 4,0

Fetthalt (%) 100 10 0 0 0 0

Totalt väger dessa ingredienser 8,7 gram och innehåller 1,52 gram fett. De resterande ingredienserna (som inte ska ändras) väger 1,3 gram och innehåller 0,08 gram fett. Buljongtärningens totala vikt får inte ökas, och den får inte minskas mer än 2 gram (eftersom man planerar ett högre pris för den nya fettsnåla produkten). Om man har mindre än 0,2 gram palmfett blir konsistensen oacceptabel, och en undre gräns för nötköttsextraktet är 0,07 gram. Samtidigt krävs att totala fetthalten inte är mer än 3 % för att få använda beteckningen Light. Salthalten ska ligga mellan 40 % och 60 %. Man vill att salt ska komma först i innehållsförteckningen även för Bouillione Light. Inget E-ämne får därför väga mer än salt, eftersom man då skulle få sätta det först i innehållsförteckningen, vilket skulle kunna uppfattas negativt. Den totala vikten av alla E-ämnen får inte överstiga 4 gram. Mängden E627 ska vara minst lika stor som mängden E631 men inte mer än dubbelt så mycket. På grund av en artikelserie i dagspressen angående eventuella skadliga effekter av E621, krävs att E621 ska stå efter de andra E-ämnena i innehållsförteckningen (om det är med alls), dvs. inte får väga mer än någon annan smakförstärkare. Formulera en linjär optimeringsmodell för att hitta den blandning av ingredienser till en buljongtärning av sort Bouillione Light som minimerar kostnaden.

Svar och lösningar SVAR 2.1

Variabeldefinition: xj = tillverkat antal kort av typ j per vecka. För varje maskin fås ett bivillkor som begränsar använd tid. max z = 2100x1 + 300x2 då 2x1 + 2x2 6x1 + x2 10x1 x1 , x2

≤ 100 ≤ 100 ≤ 100 ≥0

(1) (2) (3) (4)


2.4 ÖVNINGSUPPGIFTER

23

SVAR 2.2

Variabeldefinition: xj = antal portioner av födoämne j. min då

3x1 110x1 4x1 2x1 x1 ≤ 4, x1 ≥ 0,

+ + + +

24x2 205x2 32x2 12x2 x2 ≤ 3, x2 ≥ 0,

+ + + +

13x3 160x3 13x3 54x3 x3 ≤ 2, x3 ≥ 0,

+ + + +

9x4 160x4 8x4 285x4 x4 ≤ 8, x4 ≥ 0,

+ + + +

20x5 420x5 4x5 22x5 x5 ≤ 2, x5 ≥ 0,

+ + + +

19x6 260x6 ≥ 2000 14x6 ≥ 55 80x6 ≥ 800 x6 ≤ 2 x6 ≥ 0

Vi kan också ge modellen i matrisform: min z = cT x då Ax ≥ b, 0 ≤ x ≤ u, där cT⎛= (3 24 13 9 20 19), bT = (2000 55⎞ 800), uT = (4 3 2 8 2 2) och 110 205 160 160 420 260 A = ⎝ 4 32 13 8 4 14 ⎠. 2 12 54 285 22 80 Om man kan äta delar av portioner behöver x inte vara heltal.

SVAR 2.3

Variabeldefinition: xj = mängd (dm3 ) av sandsort j som används i en påse (1=vit, 2=brun, 3=svart sand). min z = 28,8x1 + 6,6x2 + 40,8x3 då x1 + x2 + x3 ≤ 5 (volym) (1) 3,2x1 + 2,2x2 + 3,4x3 ≤ 16 (maxvikt) (2) 3,2x1 + 2,2x2 + 3,4x3 ≥ 13 (minvikt) (3) 100x1 ≤ 400 (vit sand) (4) 100x3 ≤ 200 (svart sand) (5) 0,5x1 − 0,5x2 − 0,5x3 ≤ 0 (andel vit sand) (6) x 1 , x2 , x3 ≥ 0 Man kan alternativt låta variablerna ha sorten kg, vilket betyder en omskalning av alla koefficienter med densitetskoefficienterna. Bivillkor 2 och 3 får enklare koefficienter, men bivillkor 1 krångligare.

SVAR 2.4

Variabeldefinition: xj = antal nybörjare som utbildas månad j, j = 1, . . . , 5 yj = antal dagbarnvårdare som finns tillgängliga i början av månad j, j = 1, . . . , 5 Låt dj beteckna efterfrågan under månad j, d = (600,700,800,950,900).


24

KAPITEL 2 INTRODUKTION TILL LINJÄRPROGRAMMERING

min z =

5

(15000yj + 11000xj )

j=1

160yj − 50xj ≥ dj j = 1, . . . , 5 0,85yj + xj = yj+1 j = 1, . . . , 4 y1 = 12 y, x ≥ 0

(Att inte lägga heltalskrav på variablerna är att räkna med att man kan anställa personal på deltid.)

SVAR 2.5

Variabeldefinition: Antal gram i Bouillione Light av: x1 = palmfett, x2 = nötköttsextrakt, x3 = E621, x4 = E627, x5 = E631, x6 = salt, x7 = totalvikt (hjälpvariabel). min z = 0,12x1 + x2 + 0,04x3 + 0,05x4 + 0,06x5 + 0,07x6 då x1 + x2 + x3 + x4 + x5 + x6 + 1,3 = x7 8 ≤ x7 ≤ 10 x1 ≥ 0,2, x2 ≥ 0,07 0,08 + x1 + 0,1x2 ≤ 0,03x7 0,4x7 ≤ x6 ≤ 0,6x7 x3 ≤ x6 , x4 ≤ x6 , x5 ≤ x6 x3 + x4 + x5 ≤ 4 x4 ≥ x5 , x4 ≤ 2x5 , x3 ≤ x4 , x3 ≤ x5 x1 , x2 , x3 , x4 , x5 , x6 , x7 ≥ 0

(1) (2, 3) (4, 5) (6) (7, 8) (9, 10, 11) (12) (13–16)

Bivillkor 1 definierar den totala mängden förändrade ingredienser, och bivillkor 2 och 3 ger begränsningarna på totalvikten. Bivillkor 4 och 5 anger minvärden för fett och kött. Bivillkor 6 ser till att maximal fetthalt inte överskrids, medan bivillkor 7 och 8 begränsar salthalten. (Att x7 finns i högerleden i dessa bivillkor beror på att den totala mängden inte är fixerad.) Bivillkor 9, 10, 11 ser till att ingen smakförstärkare väger mer än saltet. Bivillkor 12 ger maxgränsen för smakförstärkarna, och bivillkoren 13–16 ger önskade relationer mellan smakförstärkarna.


KAPITEL 3

Introduktion till heltalsprogrammering

I detta kapitel diskuterar vi optimeringsmodeller med heltalskrav på variablerna. Vi ger först ett litet exempel som kan analyseras grafiskt, och diskuterar därefter specifika aspekter när det gäller modellering med heltalsvariabler. Några exempel på välkända heltalsmodeller ges också.

3.1 Introduktion Heltalsprogrammering (integer programming), HP, skiljer sig från linjärprogrammering och ickelinjär programmering i det att alla eller vissa variabler endast får anta heltaliga värden, oftast ändligt många, och inte oändligt många kontinuerliga värden. Detta gör problemen svårare att lösa. I vissa metoder löser man t.ex. LP-problem som delproblem ett större antal gånger. Man kan i allmänhet inte använda samma typer av metoder som för kontinuerliga problem. I avsnitt 3.2 visar vi t.ex. att avrundning av en kontinuerlig lösning inte alltid ger ett bra resultat. Det finns många optimeringsproblem som kräver heltalsprogrammeringsmodeller, speciellt sådana som behandlar produktion, transport eller annan hantering av stora odelbara enheter, t.ex. maskiner, bilar, båtar, fabriker, byggnader eller material i stora odelbara förpackningar. Andra diskreta problem är så kallade kombinatoriska problem, vilka oftast innehåller bestämning av väg genom ett nätverk eller andra urval av bågar i en graf, bestämning av ordningen för olika behandlingsprocesser i fabriker eller val av en eller flera kombinationer av olika föremål, oftast representerade av binära variabler. Slutligen kan man även modellera vissa komplikationer i annars kontinuerliga problem med heltalsvariabler. Som exempel på detta kan vi nämna fasta kostnader, styckvis linjära kostnadsfunktioner, antingen-eller-villkor och mycket annat. Vi ska i detta och följande avsnitt behandla allmänna linjära heltalsproblem av följande typ. max z = cT x då Ax ≤ b, 0 ≤ x ≤ u, heltal

(P)


26

KAPITEL 3 INTRODUKTION TILL HELTALSPROGRAMMERING

eller (ekvivalent) max z =

n

c j xj

j=1

n

aij xj ≤ bi

i = 1, . . . , m

j=1

0 ≤ xj ≤ uj , heltal j = 1, . . . , n Vi antar vanligtvis att c, A, b är heltal. Man kan omvandla rationella koefficienter till heltal genom att multiplicera med den minsta gemensamma nämnaren. Ibland är uj = 1 ∀j, vilket betyder att varje variabel bara får anta värdet 0 eller 1. Förutom heltalsvillkoren är problemet linjärt (P kallas ett linjärt heltalsproblem, trots att heltalskraven inte är linjära bivillkor). Problemet är ett rent heltalsproblem, om alla variabler ska vara heltal. I ett så kallat blandat heltalsproblem behöver endast vissa av variablerna vara heltal. I ett så kallat 0/1-problem ska variablerna vara lika med 0 eller 1 (sådana variabler kallas ibland binära). Varje rent heltalsproblem, med ändliga övre gränser på alla variabler, kan omformuleras till ett ekvivalent 0/1-problem med hjälp av binär utveckling. I de flesta praktiska fall finns övre gränser för variablerna, då de representerar aktiviteter som kräver någon resurs som finns i begränsad mängd (t.ex. tid, plats, pengar).

3.2 Ett illustrativt heltalsproblem Formulering av exemplet PKorv

Låt oss betrakta följande exempel rörande inköp av stora maskiner för korvstoppning. Man kan köpa två olika sorter av korvstoppningsmaskiner. De är identiska på de flesta punkter, men olika när det gäller kylning och korvproduktion. En maskin av sort 1 kräver varje timme 8 m3 kallt vatten och ger 1 m3 kall luft. En maskin av sort 2 kräver bara 5 m3 kallt vatten per timme, men behöver dessutom 2 m3 kall luft per timme. De pumpar som ska sköta kylningen klarar maximalt av att ge 31 m3 kallt vatten och 6 m3 kall luft per timme. En maskin av sort 2 kan använda kall luft som kommer från en maskin av sort 1. En maskin av sort 1 ger 30 kg korv per timme och en maskin av sort 2 ger 18 kg korv per timme. Inga andra skillnader eller begränsningar är av intresse. Vårt mål är att göra så mycket korv som möjligt per timme. Hur många korvmaskiner av varje sort ska vi köpa? Variabeldefinition: xj = antal köpta maskiner av sort j, j = 1, 2. Målfunktionsvärdet, z, som ska maximeras är antal kg korv vi får ut per timme. Låt råvara A vara kallt vatten och råvara B kall luft. Maximeringen ska alltså ske utan


3.2 ETT ILLUSTRATIVT HELTALSPROBLEM

27

att tillgången av råvara A eller råvara B överskrids. Variablerna måste dessutom vara ickenegativa heltal. max z = 30x1 +18x2 då 8x1 +5x2 ≤ 31 −x1 +2x2 ≤ 6 x1 , x2 ≥ 0, heltal

(A) (B)

(PKorv)

I figur 3.1 ges en grafisk bild av det tillåtna området för problemet PKorv. I vänstra figuren är bivillkoren A och B uppritade och alla (ickenegativa) heltalspunkter markerade med svarta punkter. Det område som är tillåtet i den så kallade LP-relaxationen av problemet, dvs. då heltalskraven tas bort, är skuggat. Det tillåtna området till PKorv består alltså av de svarta punkter som ligger i det skuggade området (eller på gränsen till det). I den högra figuren är enbart de tillåtna heltalspunkterna utritade, vilket ger en tydligare bild av det tillåtna området, som är ett ändligt antal diskreta punkter. Vi kommer att låta z∗ beteckna det optimala målfunktionsvärdet till P, och zLP LP-relaxationens optimala målfunktionsvärde. x2

x2

5

5

4

4 B

3

3

2

2 A

1

1

0

0 0

1

2

3

4

x1

0

1

2

3

4

x1

Figur 3.1. Det tillåtna området för problemet PKorv.

LP-relaxation, grafisk lösning och avrundning

Optimum till LP-relaxationen av PKorv återfinns i den punkt som markerats med en liten ring i figur 3.2, nämligen x1 = 3,875, x2 = 0 och zLP = 116,25. Eftersom man får LP-relaxationen genom att ta bort vissa villkor från problemet, vilket gör att det tillåtna området blir större, fås ett ”bättre” målfunktionsvärde.


28

KAPITEL 3 INTRODUKTION TILL HELTALSPROGRAMMERING

x2 5 4 3 2 1 0 0

1

2

3

4

x1

Figur 3.2. LP-optimum för PKorv.

SATS 3.2.1

LP-relaxationen ger en optimistisk uppskattning av z∗ . (För max: zLP ≥ z∗ .) Skillnaden mellan zLP och z∗ kallas heltalsgap eller dualgap. Avrundning av LP-relaxationen till närmaste heltalspunkt ger x1 = 4, x2 = 0. Denna punkt är dock inte tillåten. Avrundning till närmaste heltalspunkt kan alltså ge en otillåten punkt. Om avrundningen inte måste ske till närmaste heltalspunkt, utan kan göras uppåt eller nedåt, beroende på hur bivillkoren ser ut, ökar chansen att få en tillåten punkt. (Vi beaktar dock bara ändring av en variabel i taget.) Avrundning till närmaste tillåtna punkt ger x1 = 3, x2 = 0, och målfunktionsvärdet z = 90. Antingen är en tillåten lösning optimal, eller så finns det en bättre lösning. En sämre lösning kan aldrig vara optimal. SATS 3.2.2

Varje tillåten lösning ger en pessimistisk uppskattning av z∗ . (För max: z ≤ z∗ .) Vi har nu skaffat både en övre och en undre gräns för det optimala målfunktionsvärdet, vilket gör att vi fått ett intervall för z∗ , och också ett mått på hur långt från optimum den funna tillåtna lösningen kan ligga (i värsta fall). Vi har 90 ≤ z∗ ≤ 116,25, vilket ger ett relativt fel på ungefär 30 %.


3.3 SPECIELL ANVÄNDNING AV BINÄRA VARIABLER

29

Om vi kan förbättra gränserna (antingen genom att finna en bättre tillåten lösning eller genom att skärpa den optimistiska uppskattningen), kan vi få ett mindre intervall, dvs. ett mindre relativt fel. Målfunktionen innehåller bara heltaliga koefficienter, och alla variabler ska vara heltal, så z∗ blir heltal. Vi kan därför avrunda zLP nedåt, till 116. Vi har nu intervallet 90 ≤ z∗ ≤ 116. Om vi söker efter en bättre tillåten lösning, genom att beakta möjligheten att öka eller minska enstaka variabler, finner vi att det är tillåtet att öka x2 till 1, vilket ger z = 108. (Lokalsökning och utvidgningar behandlas utförligt i kapitel 16.) Vi har nu kommit fram till att 108 ≤ z∗ ≤ 116, vilket ger ett relativt fel på 7 %. Detta är ett lokalt optimum, dvs. alla närliggande punkter är antingen otillåtna eller har sämre målfunktionsvärde. (Optimum ligger i punkten x1 = 2, x2 = 3 och z∗ = 114. Hur man finner den beskrivs senare.) Låt oss notera att antalet närliggande punkter i n dimensioner är 2n , så att genomsöka alla närliggande punkter kräver exponentiell tid som funktion av n.

3.3 Speciell användning av binära variabler Binära variabler kan användas för att modellera logiska beslut. Beslut om man ska vidta en viss åtgärd eller inte (så kallat ”go/no-go”-beslut) kan hanteras matematiskt med följande variabeldefinition: x = 1 om vi ska göra det, x = 0 om inte.

Antingen-eller-villkor

Ett exempel på en vanlig typ av logiska villkor är så kallade antingen-eller-villkor, vilka kan modelleras med 0/1-variabler på följande sätt. Antag att minst ett av följande två bivillkor ska gälla: a1j xj ≤ b1 , a2j xj ≤ b2 j

j

Inför yi som är 1 om bivillkor i ska gälla, och låt M vara ett stort tal (större än vad j aij xj − bi kan bli). Följande formulering ger önskad effekt: a1j xj ≤ b1 + M(1 − y1 ) j

a2j xj ≤ b2 + M(1 − y2 )

j

y1 + y2 = 1 y1 ∈ {0, 1}, y2 ∈ {0, 1}


30

KAPITEL 3 INTRODUKTION TILL HELTALSPROGRAMMERING

Ett annat sätt att tolka detta antingen-eller-villkor är att kräva att om så måste j a2j xj ≤ b2 och vice versa. Vi kan generalisera till att minst k av m bivillkor ska gälla. aij xj ≤ bi + M(1 − yi ) i = 1, . . . , m

j

a1j xj > b1 ,

j

yi = k

i

yi ∈ {0, 1} i = 1, . . . , m

Mängder med inbuktningar

I avsnitt 5.1 definieras konvexa mängder. Enkelt uttryckt har en konvex mängd inga inbuktningar och måste vara sammanhängande. Med hjälp av binära variabler kan man modellera vissa mängder som inte är konvexa. Ibland måste ett variabelvärde tas ur en viss diskret mängd. Om denna mängd består av någon följd av värden med jämna avstånd, t.ex. alla jämna tiotal, så kan problemet enkelt skalas om till ett vanligt heltalsproblem. Om värdena inte uppvisar någon regelbundenhet, t.ex. om x ska vara lika med 2, 45, 193 eller 452, får man införa en 0/1-variabel för varje möjligt värde. x = 2y1 + 45y2 + 193y3 + 452y4 , y1 + y2 + y3 + y4 = 1, yi ∈ {0, 1} i = 1, . . . , 4 Villkorliga undre gränser, x = 0 eller x ≥ L, kan modelleras med binära variabler. x ≥ Ly, x ≤ My, y ∈ {0, 1} där M är större än vad x kan bli. Ett exempel på ett ickekonvext område är den skuggade stjärna som ses till höger i figur 3.3. Detta område kan ses som unionen av två konvexa områden, och kan

Figur 3.3. Två konvexa områden och den ickekonvexa unionen av dem.


3.3 SPECIELL ANVÄNDNING AV BINÄRA VARIABLER

31

beskrivas av följande bivillkor, där y1 ∈ {0, 1} (och vi använt y2 = 1 − y1 ). 2x1 + x2 −2x1 + x2 x1 + 2x2 −x1 + 2x2

≤ ≤ ≤ ≤

2 + M(1 − y1 ) 2x1 − x2 2 + M(1 − y1 ) −2x1 − x2 2 + My1 x1 − 2x2 2 + My1 −x1 − 2x2

≤ ≤ ≤ ≤

2 + M(1 − y1 ) 2 + M(1 − y1 ) 2 + My1 2 + My1

Här kan man sätta M = 4. Ett annat exempel är ett stiliserat C som kan ses som en cirkelskiva med en tårtbit urtagen. Bivillkoret x21 + x22 ≤ 1 ger en (hel) cirkelskiva med centrum i origo och radie 1. Lutningen på tårtbitskanterna kan antas vara ±45◦ . Mängden kan formuleras på följande sätt med hjälp av antingen-eller-villkor för tårtbiten: x21 + x22 ≤ 1, x1 − x2 − 2y ≤ 0, x1 + x2 + 2y ≤ 2, y ∈ {0, 1}.

Fasta kostnader

I många fall uppträder så kallade fasta kostnader, vilket betyder att kostnaden uppträder då en anläggning av något slag byggs, installeras eller köps, men för övrigt inte beror på hur mycket som passerar igenom anläggningen (produceras, bearbetas, förpackas, skickas). Antag att man ska tillverka d enheter på n maskiner. Kostnaden för användning av maskin j består dels av en inköpskostnad, fj , oberoende av hur mycket maskinen körs, och en behandlingskostnad, pj , för varje enhet som tillverkas på maskinen. Kostnaden, cj (xj ), för att maskin j ska göra xj enheter blir då cj (xj ) = pj xj + fj om xj > 0, och 0 om xj = 0. I figur 3.4 visas kostnaden c(x) som funktion av x. Inför yj = 1 om xj > 0 och 0 om xj = 0 och låt uj vara övre gränser för xj . Den matematiska modellen för att minimera kostnaderna blir då v∗

= min

n j=1

pj xj + n

n

fj yj

j=1

xj ≥ d

j=1

xj − uj yj ≤ 0 j = 1, . . . , n xj ≥ 0 j = 1, . . . , n yj ∈ {0, 1} j = 1, . . . , n


32

KAPITEL 3 INTRODUKTION TILL HELTALSPROGRAMMERING

c(x)

x

Figur 3.4. Produktionskostnad innehållande en fast kostnad.

Linjärisering

Vissa binära problem är skenbart olinjära, men kan linjäriseras utan fel. För problem med bara binära variabler kan polynom göras om till linjära funktioner. Först kan vi konstatera att heltaliga potenser av binära variabler inte ändrar värdet: (xj )n = xj för xj = 0 eller 1. Blandade produkter kan man ta hand om som visas nedan. Likheten z = x1 x2 · · · xn är ekvivalent med olikheterna z ≤ xi för alla i och z ≥ i xi −(n−1). På detta sätt kan alla polynom göras om till linjära funktioner, med bieffekten att ett antal nya bivillkor måste läggas till. Kappsäcksproblemet

Det så kallade kappsäcksproblemet är ett viktigt typproblem i heltalsprogrammering, som, trots sin enkelhet, innehåller de grundläggande svårigheterna som är betecknande för heltalsprogrammering. Vi har en kappsäck som inte klarar mer än b kg, och som ska fyllas med olika saker. Sak j har vikt aj och ger nyttan cj om den tas med. Vi vill maximera nyttan. (Detta problem uppträder t.ex. då en tjuv just öppnat ett kassaskåp med guldtackor, smycken, sedelbuntar etc.) Variabeldefinition: xj = 1 om vi tar med sak j, 0 om inte, j = 1, . . . , n. Matematisk modell: max z =

n

c j xj

j=1

n

a j xj ≤ b

j=1

xj ∈ {0, 1}

j = 1, . . . , n


3.3 SPECIELL ANVÄNDNING AV BINÄRA VARIABLER

33

I detta problem har vi ett bivillkor, med positiva koefficienter, vilket kallas kappsäcksbivillkor. I stället för binära variabler har man ibland allmänna heltalsvariabler, som kan anta alla heltalsvärden mellan 0 och en övre gräns, uj (om ingen annan gräns finns, fås ju uj = b/aj ). Det så kallade kontinuerliga kappsäcksproblemet fås om variablerna är kontinuerliga, dvs. inga heltalskrav finns, och kan fås som LP-relaxation av det binära eller heltalskappsäcksproblemet. Detta problem kan lösas optimalt med en enkel så kallad girig metod, som härleds med hjälp av LP-dualitet i kapitel 7. Om man använder LP-relaxationen för att lösa ett kappsäcksproblem med heltalskrav, kan man notera att avrundning nedåt av LP-lösningen ger en tillåten heltalslösning. Övertäckningsproblemet

Vi har m st olika sorters guldmynt liggande i n st nedgrävda skattkistor, där varje kista innehåller flera sorter (vi vet vilka, för det står på skattkartan), men inte alla. Vi definierar följande (kända) koefficienter. aij = 1 om sort i finns i kista j, 0 om inte, i = 1, . . . , m, j = 1, . . . , n. Vi ska samla ihop minst ett guldmynt av varje sort, genom att gräva upp och öppna rätt skattkistor. Kista j ”kostar” cj (enhet: blod, svett och tårar) att gräva upp och öppna, och vi vill minimera kostnaden. Variabeldefinition: xj = 1 om kista j öppnas, 0 om inte, j = 1, . . . , n. Vi får följande matematiska modell: min z =

n

c j xj

j=1

n

aij xj ≥ 1

i = 1, . . . , m

j=1

xj ∈ {0, 1}

j = 1, . . . , n

Detta kallas övertäckningsproblemet, eftersom man kan säga att bivillkoren kräver en övertäckning av alla sorter. Ett övertäckningsproblem är alltså ett 0/1-problem där bivillkoren enbart innehåller ettor och nollor, högerledet innehåller ettor, och bivillkoren har olikheten ≥. En besläktad modell fås om man kräver att varje sort ska finnas i exakt en av kistorna som öppnas. Detta kallas uppdelningsproblemet (eller partitioneringsproblemet), och har likhet i bivillkoren. Man kan ibland reducera problemstorleken för övertäckningsproblem genom att fixera variabler. Reduktionstester för detta syfte beskrivs i avsnitt 14.5.


34

KAPITEL 3 INTRODUKTION TILL HELTALSPROGRAMMERING

Lokaliseringsproblemet

Efterfrågan hos en mängd kunder ska tillgodoses genom att fabriker byggs på vissa av en mängd utvalda platser. Varorna ska också transporteras till kunderna. Om man beslutar att bygga en anläggning på plats i, fås den fasta kostnaden fi och produktionskapaciteten si . Om man inte bygger blir både kostnad och kapacitet noll. Kund j har efterfrågan dj . Transportkostnaden per enhet som skickas från fabrik i till kund j är cij . Vi vill minimera totalkostnaden. Eftersom tillgången för en anläggning är begränsad (kapaciterad), även om den byggs, kallas detta problem det kapaciterade lokaliseringsproblemet. Variabeldefinition: yi = 1 om en fabrik byggs på plats i, och 0 om inte. xij = andel av efterfrågan för kund j som tillgodoses från fabrik i. min

m n

cij dj xij +

i=1 j=1

n

m

fi yi

i=1

dj xij ≤ si yi

i = 1, . . . , m

(1)

j = 1, . . . , n

(2)

j=1

m

xij = 1

i=1

xij − yi ≤ 0 i = 1, . . . , m, j = 1, . . . , n (3) xij ≥ 0 i = 1, . . . , m, j = 1, . . . , n (4) yi ∈ {0, 1} i = 1, . . . , m (5) Detta problem innehåller två principiella svårigheter. Den första ligger i konflikten mellan fasta och rörliga kostnader, där en plats med låg fast kostnad för att bygga en anläggning ofta har höga (rörliga) transportkostnader. Den andra ligger i att en anläggning antingen byggs i sin helhet eller inte alls, även om bara en liten del av dess kapacitet behöver utnyttjas. LP-relaxationen av problemet är lättare att lösa, men ger ofta lösningar där delar av anläggningar byggs. Om si ≥ j dj ∀i kallas problemet okapaciterat eftersom varje anläggning kan tillfredsställa efterfrågan hos alla kunder. En ekvivalent formulering av problemet fås om bivillkoren 3 tas bort, eftersom de följer från bivillkoren 1. Den formuleringen är dock sämre att använda i metoder baserade på LP-relaxation, ty den har en LP-relaxation som sällan ger heltalslösningar. En fördel är att antalet bivillkor minskas. Nackdelarna överväger dock, och den formuleringen används sällan. Hinkpackning

Ett annat välkänt optimeringsproblem är det som på engelska kallas ”bin packing”, och kan ses som en korsning av kappsäcksproblemet och uppdelningsproblemet. Jag


3.3 SPECIELL ANVÄNDNING AV BINÄRA VARIABLER

35

väljer (den egna) översättningen hinkpackning. (Andra förslag är lådpackning eller bingpackning, härlett ur ordet binge.) Man har ett antal objekt som ska packas ner i flera kappsäckar (hinkar, lådor, bingar). Alla objekt ska packas ner och målet är att minimera antalet kappsäckar som används. För varje kappsäck finns ett ”kappsäcksvillkor” avseende vikt, längd eller dylikt. Detta problem kan exempelvis uppstå då man behöver ett antal rör av olika längder, och bara kan köpa rören i tremeterslängder. Man vill då bestämma hur rören ska sågas för att minimera det antal tremeterslängder man måste köpa. En annan tillämpning är när man har handlat mycket mat och ska packa ner den i plastpåsar för att forsla hem den. En plastpåse får då inte väga mer än vad man orkar bära, och för miljöns skull vill vi inte köpa onödigt många plastpåsar. En tredje tillämpning är när man ska förflytta ett antal olika kollin med lastbil/tåg och vill minimera antalet lastbilar/godsvagnar som krävs. Låt oss ge en matematisk formulering av hinkpackningsproblemet med vikt som begränsande egenskap, så som vi tidigare gjorde med kappsäcksproblemet. Vi har m olika objekt som ska packas och högst n olika hinkar som får användas. Objekt i har vikten ai och vikten av innehållet i en hink får inte överstiga b. Variabeldefinitioner: xij = 1 om objekt i packas i hink j, och 0 om inte, i = 1, . . . , m, j = 1, . . . , n, yj = 1 om hink j används, och 0 om inte, j = 1, . . . , n. Den matematiska modellen blir som följer. min z = då

n j=1 n j=1 m

yj xij = 1

i = 1, . . . , m

ai xij ≤ b

j = 1, . . . , n

i=1

xij ≤ yj

i = 1, . . . , m, j = 1, . . . , n

xij ∈ {0, 1}

i = 1, . . . , m, j = 1, . . . , n

yj ∈ {0, 1}

j = 1, . . . , n

Den första gruppen bivillkor ser till att alla objekt packas, den andra att vi inte stoppar i för mycket i någon hink, och den tredje ser till att yj = 1 om något packas i hink j.


36

KAPITEL 3 INTRODUKTION TILL HELTALSPROGRAMMERING

Det finns olika varianter av problemet, t.ex. att hinkarna kan ha olika kapaciteter, bj , och olika kostnader, cj . Målfunktionen ändras då till min z = nj=1 cj yj , och andra m bivillkorsgruppen till i=1 ai xij ≤ bj j = 1, . . . , n. Andra varianter är att packa ner så många objekt som möjligt, eller så att nyttan maximeras, i ett givet antal hinkar. Det finns också flera utvidgningar av detta problem, t.ex. fler än en typ av begränsning för hinkarna, t.ex. vikt och volym. Detta ger flera bivillkorsgrupper av den andra typen ovan. Man kan se ovanstående problem som endimensionell packning, där aj och b avser längd. Det finns då även två- och tredimensionell packning, där objekten och hinkarna har två respektive tre dimensioner som kan vara begränsande. Dessa utvidgningar gör vanligtvis problemet svårare att lösa. Exempelvis kan man i tvådimensionell packning vrida objekten 90° för att få plats. Svårigheten med problemet är i princip samma som i kappsäcksproblemet, nämligen att objekten är odelbara. Om det inte riktigt finns plats för ett visst objekt i en viss hink, måste hela objektet placeras i en annan hink. Genom att relaxera odelbarheten (dvs. heltaligheten) för objekten får man en optimistisk uppskattning (dvs. en undre gräns) på antalet hinkar som kommer att behövas. Man delar helt enkelt

den m totala vikten med varje hinks kapacitet, och avrundar uppåt: zH = i=1 ai /b . En pessimistisk uppskattning av antalet hinkar får man genom att finna en tillåten lösning. Det finns många heuristiska metoder för hinkpackningsproblemet, där man går igenom alla objekt en gång, och placerar ut dem i hinkarna. Den enklaste metoden är att placera objektet i första hinken där det får plats. Alternativ är att placera objektet i den fullaste hinken med tillräcklig plats, eller i den tommaste använda hinken. Denna typ av metoder beskrivs mer i kapitel 16.

3.4 Lösningsmetoder för heltalsproblem Låt oss nu diskutera angreppssätt för att lösa allmänna heltalsproblem, utan att gå in på detaljer. Man har flera principiella val: Måste metoden säkert ge optimum eller duger en ”skapligt bra” lösning? Bygger metoden på LP-relaxation eller på den kombinatoriska strukturen? Ska vi använda trädsökning (se kapitel 13) eller plansnittning (se kapitel 14) (eller båda) som princip för att uppnå heltalighet? En optimerande metod finner garanterat globalt optimum, och bevisar det. Fullständig uppräkning av alla möjliga lösningar är inte en effektiv möjlighet, eftersom det finns för många möjligheter. Ofullständig uppräkning kan däremot vara bra, om man kan minska antalet uppräknade lösningar utan att missa optimum. I stället kan man använda en snabbare heuristik, som inte ger några garantier för att optimum ska hittas, och inte bevisar optimalitet även om man skulle ha tur och hitta optimum. Heuristiker är oftast konstruktiva metoder, där man försöker utnyttja problemets struktur på bästa sätt. Sökmetoder av olika typer används ofta. Denna typ av metoder beskrivs utförligt i kapitel 16.


3.5 ÖVNINGSUPPGIFTER

37

En LP-baserad lösningsmetod baseras på ett upprepande av följande steg. Lösning av LP-relaxationen. Modifiering av LP-problemet. De olika varianter som finns modifierar LP-problemet på olika sätt. Vi kommer i senare avsnitt att beskriva både trädsökningsmetoder och plansnittningsmetoder som är LP-baserade. I en kombinatorisk lösningsmetod utgår man i stället från problemets kombinatoriska struktur, antingen olika grafstrukturer eller den binära (0/1) strukturen. Detta angreppssätt används främst för problem där LP-relaxationen inte ger så bra information, dvs. när relaxationen av heltalskraven är en alltför kraftig relaxation och gör så att alltför mycket information försvinner. En trädsökningsmetod bygger på följande: Relaxation av problemet. Uppdelning av problemet i flera (disjunkta) problem medelst förgrening. Rekursiv användning av algoritmen. Kapning av grenar som inte leder till optimum. Avsökning av hela trädet. Användning av övre och undre gränser för det optimala målfunktionsvärdet. I kapitel 13 beskrivs både LP-baserade och kombinatoriskt baserade trädsökningsmetoder. Metodprincipen kallas på engelska för branch-and-bound, dvs. förgrena och begränsa, där begränsningen avser det optimala målfunktionsvärdet. Detta namn indikerar också att just dessa två principer är mycket viktiga i metoden. En trädsökningsmetod som inte använder sig av övre och undre uppskattningar av det optimala målfunktionsvärdet för att kapa grenar, är inte värd namnet. En plansnittningsmetod bygger på följande: Addition av bivillkor som skär bort LP-optimum men inte någon tillåten heltalslösning. Ett enda LP-problem (dvs. ingen förgrening). Ökande storlek av problemet. Denna metodtyp är LP-baserad. Plansnittningsmetoder är skenbart enklare än trädsökningsmetoder, men komplikationen ligger i svårigheten att finna linjära bivillkor som uppfyller kraven och är starka. Detta beskrivs i kapitel 14.

3.5 Övningsuppgifter UPPGIFT 3.1

En fjällvandrare ska välja mellan ett antal föremål av olika värde och vikt när hon packar sin ryggsäck. Hon kan inte bära mer än b kg. Vilka saker ska hon stoppa ner för att maximera värdet av det medtagna? Formulera problemet som


38

KAPITEL 3 INTRODUKTION TILL HELTALSPROGRAMMERING

ett heltalsproblem, med b = 23 och 4 föremål med värdet c = (18, 14, 8, 4) och vikten a = (15, 12, 7, 4), då högst 1 enhet av varje föremål får medföras.

UPPGIFT 3.2

Ett bageri saluför 4 sorters kakor i kartonger om hela dussin. Vissa gemensamma ingredienser i kakorna A och B är ömtåliga och kan inte sparas till nästa dag. För att inte göra förluster har bagaren därför beslutat att förbruka de brutna förpackningarna helt, vilket innebär att tillsammans 10, 20 eller 30 dussin av kakorna A och B bakas, om de över huvud taget tillreds. De ömtåliga ingredienserna för kaksort A och B levereras i engångsförpackningar, och man får därför betala en miljöavgift på 10 kr för varje förpackning (som räcker till 10 dussin kakor). Efterfrågan på kaka C uppgår till 20 dussin, medan övriga kakor har till synes obegränsad efterfrågan. Bageriets kapacitet tillåter att 30 dussin kakor bakas per dag. Vinsten per kaka A – D är 20, 25, 30 respektive 25 öre. Värdet för kaka D gäller enbart när minst 20 dussin av kakan bakas. För övrigt blir den olönsam och tillverkas inte. Hur många dussin av respektive kaksort ska bakas för att vinsten ska bli maximal? Formulera som ett heltalsproblem.

UPPGIFT 3.3

En rörmokare ska göra anslutningar till ett antal rör under ett golv. Golvet består av ett antal plattor som kan lyftas upp för att komma åt underliggande rör, se figuren nedan. Anslutning kan ske på godtyckligt ställe längs varje rör. Varje platta som lyfts frigör en mindre mängd asbest, så man vill minimera antalet plattor som lyfts. Vilka plattor ska man lyfta för att komma åt samtliga rör? 2

1

3

4

5

B

A

C 6

11

7

8

9

10

12

13

14

15

18

19

20

D

16

17 E

F


3.5 ÖVNINGSUPPGIFTER

39

a) Formulera detta som ett heltalsproblem. b) Antag att en platta som inte ligger mot en vägg bara kan lyftas om en närliggande platta också lyfts. (Diagonalt räknas ej som närliggande.) Hur förändras modellen?

UPPGIFT 3.4

Ett företag har produktion i m fabriker på olika platser. Man måste nu installera rökgasrening för att få fortsätta produktionen. En rökgasreningsanläggning vid fabrik i kostar fi kr per dag, möjliggör produktion av si enheter per dag, och installeras i sin helhet eller inte alls. Utan rökgasrening får ingen produktion bedrivas. Produkterna tillverkade vid fabrikerna transporteras till n kunder, där kund j efterfrågar bj enheter per dag. Kostnaden att tillverka en enhet av produkten vid fabrik i och transportera den till kund j är cij . Man har tidigare observerat en ganska kraftig överkapacitet och kan tänka sig att inte installera rökgasrening vid vissa fabriker. Dessa fabriker får då användas för andra ändamål, såsom lagerhållning. Företagets problem är att bestämma var rökgasrening ska installeras, så att de totala kostnaderna minimeras. Formulera företagets problem som ett linjärt blandat heltalsproblem.

UPPGIFT 3.5

Ett stort antal informationsposter finns lagrade på m filer, där fil k har storlek lk . En viss post finns lagrad på en eller flera olika filer, och vi vet vilka. Antag att en viss kund efterfrågar n stycken preciserade poster. Vi vill nu, bland de filer som tillsammans innehåller alla begärda poster, läsa in dem som ger den minsta totala filstorleken. Formulera problemet matematiskt. (För att komma åt data på en fil måste man läsa in hela filen.)

UPPGIFT 3.6

Ett museum fullt av värdefulla konstverk måste ha vakter som övervakar de många salarna. Vakterna placeras i dörröppningarna för att kunna övervaka flera salar samtidigt. Museets rumsplan är given i följande figur. Problemet är att finna det minsta antal vakter som behövs, och var dessa ska placeras, för att alla salar i museet ska övervakas av åtminstone en vakt. Formulera problemet matematiskt.


40

KAPITEL 3 INTRODUKTION TILL HELTALSPROGRAMMERING

A

B 3

C

1

D

2 5 E

4

6

7

UPPGIFT 3.7

Rudolf har köpt fem tavlor med exotiska motiv på sin semester i Outakoski. Han ska hänga upp dem på en vägg, där dock inte alla fem får plats i bredd. Bredden på väggen är given, och han vill minimera höjden till den tavla som sitter högst upp. Ingen tavla får sitta lägre än en meter över golvet. Varje tavla har en given höjd och en given bredd. Inga tavlor får överlappa varandra. a) Hjälp Rudolf att formulera en optimeringsmodell (ett linjärt blandat heltalsproblem) för att bestämma var tavlorna ska sitta på väggen. Ledning: skilj på fallen då två tavlor sitter bredvid varandra och då den ena sitter ovanför den andra. b) Ange optimallösningen till modellen i uppgift a om alla tavlorna faktiskt får plats bredvid varandra.

UPPGIFT 3.8

Rörmokare Rune Rak ska packa ner sin samling tillskurna rör. Alla rör har samma diameter men olika längd. Han ska packa ner dem i en smal, hög kartong på följande sätt. Rören ställs upp i kartongen. Exakt sju stycken får då plats. Sedan lägger Rune en bit styv papp ovan på rören. (Han ser till att pappbiten ligger horisontellt.) På denna pappbit ställer han ytterligare sju rör, och lägger på en ny pappbit. Detta upprepas lager för lager, tills alla rör fått plats. Rune Rak har för närvarande 63 rör i sin samling, så han inser att det blir nio lager. Plötsligt slår det honom att den totala höjden beror på hur rören placeras (dvs. vilka som placeras i samma lager), och han bestämmer sig för att minimera den totala höjden. Låt rörbit j ha längden lj . a) Formulera en matematisk modell för problemet. Undvik olinjära funktioner. b) Ange en enkelt beräkningsbar övre gräns för det optimala målfunktionsvärdet. Ange även en liknande undre gräns. c) Visa vilken lösning modellen ger om alla rör har samma längd. Bevisa optimalitet med hjälp av resultatet i uppgift b.


3.5 ÖVNINGSUPPGIFTER

41

UPPGIFT 3.9

Ett schackspel består av ett kvadratiskt bräde med 8×8 rutor (vilket vi kan se som en matris). Ett torn i ruta (i, j) hotar alla pjäser i rad i och i kolumn j. En dam i ruta (i, j) hotar alla pjäser i rad i, kolumn j och längs de två diagonaler som går genom ruta (i, j). a) Formulera problemet att finna det maximala antal torn som kan placeras på ett schackbräde, utan att något torn hotar ett annat, som ett linjärt heltalsproblem. b) Formulera problemet att finna det maximala antal damer som kan placeras på ett schackbräde, utan att någon dam hotar en annan, som ett linjärt heltalsproblem. (Var noga med vilka termer som ska summeras i bivillkoren.)

UPPGIFT 3.10

Formulera ett linjärt heltalsproblem som finner en tillåten lösning till ett Sudoku. Använd variablerna xijk = 1 om siffra k placeras i rutan i rad i och kolumn j.

Svar och lösningar SVAR 3.1

max z = 18x1 + 14x2 + 8x3 + 4x4 då 15x1 + 12x2 + 7x3 + 4x4 x ≤ 23, xj ∈ {0, 1} för j = 1, . . . ,4.

SVAR 3.2

Variabeldefinition: xj = antalet bakade dussin av kaka j, j = 1, . . . , 4. y1 = antal engångsförpackningar som används. y2 = 1 om kaka D bakas, 0 om inte. Olinjära bivillkor (som måste omformuleras): x1 + x2 = 0, 10, 20 eller 30, x4 = 0 eller x4 ≥ 20 max z = 2,4x1 + 3x2 + 3,6x3 + 3x4 − 10y1 då x1 + x2 + x3 + x4 ≤ 30 x3 ≤ 20 x1 + x2 = 10y1 20y2 ≤ x4 ≤ 30y2 y1 ∈ {0, . . . , 3}, y2 ∈ {0, 1}, xj ≥ 0, heltal för alla j


42

KAPITEL 3 INTRODUKTION TILL HELTALSPROGRAMMERING

SVAR 3.3

Indata: aij = 1 om man kan nå rör i under platta j och 0 annars. a) Variabeldefinition: xj = 1 om platta j lyfts och = 0 annars. min x1 + x2 + x3 + x4 + x5 + x6 + x7 + x8 + x9 + x10 + x11 + x12 + x13 +x14 + x15 + x16 + x17 + x18 + x19 + x20 då x1 + x2 + x6 + x7 ≥ 1 x3 + x4 + x5 + x9 + x10 ≥ 1 x3 + x8 + x13 ≥ 1 x11 + x12 + x13 + x14 ≥ 1 x17 + x18 + x19 ≥ 1 x15 + x18 + x19 + x20 ≥ 1 xj ∈ {0, 1} ∀j Detta är ett övertäckningsproblem. Bivillkoren kan skrivas Ax ≥ 1, där ⎛

⎜ ⎜ ⎜ A=⎜ ⎜ ⎜ ⎝

1 0 0 0 0 0

1 0 0 0 0 0

0 1 1 0 0 0

0 1 0 0 0 0

0 1 0 0 0 0

1 0 0 0 0 0

1 0 0 0 0 0

0 0 1 0 0 0

0 1 0 0 0 0

0 1 0 0 0 0

0 0 0 1 0 0

0 0 0 1 0 0

0 0 1 1 0 0

0 0 0 1 0 0

0 0 0 0 0 1

0 0 0 0 0 0

0 0 0 0 1 0

0 0 0 0 1 1

0 0 0 0 1 1

0 0 0 0 0 1

⎞ ⎟ ⎟ ⎟ ⎟ ⎟ ⎟ ⎠

b) Följande bivillkor måste läggas till: x7 ≤ x2 + x6 + x8 + x12 , x8 ≤ x3 + x7 + x9 + x13 , x9 ≤ x4 + x8 + x10 + x14 , x12 ≤ x7 + x11 + x13 + x17 , x13 ≤ x8 + x12 + x14 + x18 , x14 ≤ x9 + x13 + x15 + x19 .

SVAR 3.4

Variabeldefinition: xij = mängd varor som produceras i fabrik i och skickas till kund j, yi = 1 om rökgasrening installeras vid fabrik i och = 0 annars. min

n m i=1 j=1 n

cij xij +

m

fi yi

i=1

xij ≤ si yi

i = 1, . . . , m

xij = bj

j = 1, . . . , n

j=1

m i=1

xij ≥ 0 i = 1, . . . , m, j = 1, . . . , n yi ∈ {0, 1} i = 1, . . . , m


3.5 ÖVNINGSUPPGIFTER

SVAR 3.5

Indata: ajk = 1 om information j finns på fil k, och 0 om inte. Variabeldefinition: xk = 1 om fil k läses in, och 0 om inte. min då

m k=1 m k=1

l k xk ajk xk ≥ 1 j = 1, . . . , n

xk ∈ {0, 1}

k = 1, . . . , m

SVAR 3.6

Indata: aij = 1 om rum i kan övervakas från dörröppning j och 0 annars. Variabeldefinition: xj = 1 om vakt placeras i dörröppning j och 0 annars. Vi får ett övertäckningsproblem: min x1 + x2 + x3 + x4 + x5 + x6 + x7 då x1 + x2 + x3 x3 + x5 + x6 x1 + x4 x2 + x4 + x5 + x7 x 6 + x7 x 1 , x2 , x3 , x4 , x5 , x6 , x7

≥ 1 ≥ 1 ≥ 1 ≥ 1 ≥ 1 ∈ {0, 1}

(A) (B) (C) (D) (E)

SVAR 3.7

a) Indata: B = väggens bredd, hj = höjd av tavla j, bj = bredd av tavla j. Variabeldefinitioner: zoij = 1 om tavla i sitter ovanför tavla j, zuij = 1 om tavla i sitter under tavla j, wijh = 1 om tavla i sitter till höger om tavla j, wijv = 1 om tavla i sitter till vänster om tavla j, xj = avstånd från vänster kant av tavla j till väggens vänstra kant, yj = avstånd från nedre kant av tavla j till golvet, d = avstånd från golvet till översta tavlans övre kant. min d då d ≥ yj + hj xj + b j ≤ B yi ≥ yj + hj − M(1 − zoij ) yj ≥ yi + hi − M(1 − zuij ) xi ≥ xj + bj − M(1 − wijh )

∀j ∀j ∀i, j ∀i, j ∀i, j

(1) (2) (3) (4) (5)

43


HOLMBERG

Andra utmärkande drag: • Täcker alla delar av optimeringens grunder • Är ovanligt grundlig i behandlingen av kombinatorisk optimering och optimering av grafer • Innehåller en stor mängd övningsuppgifter, tillräckligt för både lärarledda lektioner och hemuppgifter Språket är enkelt och beskrivningarna inleds genomgående med exempel där författaren konkret förklarar när och hur metoderna kan användas.

Författaren KAJ HOLMBERG är professor i optimeringslära vid Linköpings universitet och aktiv forskare. Han har undervisat i ämnet i över 30 år och nominerats till Linköpings teknologers studentkårs pris för bästa pedagog.

OPTIMERING

OPTIMERING är en komplett grundbok i optimeringslära som passar för både enklare och mer avancerade kurser på universitetsnivå. Läsaren får en mångsidig verktygslåda för att lösa praktiska optimeringsproblem. Fokus ligger på användbara metoder snarare än teori.

KAJ HOLMBERG

Upplaga 2

OPTIMERING Best.nr 47-12578-4 Tryck.nr 47-12578-4

9789147125784c1c.indd All Pages

Metoder, modeller och teori för linjära, olinjära och kombinatoriska problem

21/02/18 12:37 PM


Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.