9789147099351

Page 1

HOLMBERG

OPTIMERING

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. 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.

KAJ HOLMBERG

OPTIMERING är en komplett grundbok i optimeringslära

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

Best.nr 47-09935-1 Tryck.nr 47-09935-1-01

9789147099351c1c.indd 1

12/11/12 12:57 PM


2012-11-14 – sida i – # 1

Optimering

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

Kaj Holmberg


ISBN 978-91-47-09935-1 © 2010 Kaj Holmberg och Liber AB Typografi: Anna Hild Omslag: Eva Jerkeman, Nette Lövgren

Första upplagan 2 Repro: Resultat Grafisk Produktion Tryck: Kina 2013

Kopieringsförbud

Detta verk är skyddat av upphovsrättslagen! Kopiering, utöver lärares och elevers rätt att kopiera för undervisningsbruk enligt BONUS-avtal, är förbjuden. BONUS-avtal tecknas mellan upphovsrättsorganisationer och huvudman för utbildningsanordnare t ex kommuner/ universitet. 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.bonuspresskopia.se.

Liber AB, 113 98 Stockholm tfn 08-690 90 00 www.liber.se Kundservice tfn 08-690 93 30, fax 08 690 93 01 e-post: kundservice.liber@liber.se

Copysida.indd 1

22/10/12 2:32 PM


2012-11-14 – sida ii – # 2

II

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, och heltalsoptimering. En viss grundläggande teori ingår. I innehållet märks även komplexitet, heuristiker och Lagrangedualitet. Framställningen är baserad på en matematisk grund i en omfattning som är tänkt att vara “lagom”, dvs. inte alltför omfattande men inte alltför bristfällig. Matematiska bevis ingår i princip inte. 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.

Om författaren Kaj Holmberg är professor i Optimeringslära vid Linköpings universitet. Han är aktiv forskare och har ca 75 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.


2012-11-14 – sida iii – # 3

III

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 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 beskrivs. 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 den ganska generella Lagrangedualiteten, som kan användas för många olika typer av problem. Boken avslutas med en litteraturförteckning (i mycket begränsat urval) och ett sakregister för de viktigaste begreppen.


2012-11-14 – sida iv – # 4

IV

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 komprimerat. 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 i detaljerna. Boken kan ses som praktisk, i den meningen att det överordnade syftet är att lösa praktiska optimeringsproblem. Fokus läggs 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 därför färre uppgifter på dem. Jag kommer själv att komplettera boken med datorlaborationer i de kurser jag ger.


2012-11-14 – sida v – # 5

Innehåll

Innehåll

v

I

Introduktion

1

1

Introduktion

1.1 1.2 1.3 1.4 2

5

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

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

3 6 7 8 9

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

9 12 14 17

. . . .

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

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

23 24 27 35 36

Introduktion till olinjär optimering

45

4.1 4.2

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

45 47

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

Konvexitet och optimalitet

23

53


2012-11-14 – sida vi – # 6

VI

INNEHÅLL

5.1 5.2 5.3 5.4 5.5

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

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

54 62 66 75 76

II Linjär optimering

89

6

91

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 . . . . . . . . . . . . . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

LP-dualitet

7.1 7.2 7.3 7.4 7.5 7.6 7.7 7.8 7.9

129

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 8

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

129 130 133 136 138 140 143 150 151

171

Metoder för olinjära problem utan bivillkor

8.1 8.2 8.3 8.4 8.5 8.6 8.7 8.8

91 99 107 109 112 116 116

173

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

173 174 177 178 179 181 182 183


2012-11-14 – sida vii – # 7

INNEHÅLL

9

Metoder för olinjära problem med bivillkor

9.1 9.2 9.3 9.4 9.5 9.6 9.7 9.8 9.9

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

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

VII

191

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

191 192 195 196 197 198 201 203 204

IV Optimering i grafer och nätverk

211

10 Grafer, träd och cykler

213

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 . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

213 226 234 243 245 246 252 253

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

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

269 271 284 291

11 Billigaste väg

11.1 11.2 11.3 11.4

269

12 Flöde i nätverk

12.1 12.2 12.3 12.4

Formulering . . . . . . . . . Maxflödesproblemet . . . . Minkostnadsflödesproblemet Övningsuppgifter . . . . . .

301

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

301 306 311 325

V Heltalsoptimering

341

13 Trädsökningsmetoder

343

13.1 Allmänna principer . . . . . . . . . . . . . . . . . . . . . . . . . . 343 13.2 Land-Doig-Dakins trädsökningsmetod . . . . . . . . . . . . . . . . 345


2012-11-14 – sida viii – # 8

VIII

INNEHÅLL

13.3 Kombinatoriskt baserad trädsökning . . . . . . . . . . . . . . . . . 352 13.4 Övningsuppgifter . . . . . . . . . . . . . . . . . . . . . . . . . . . 360 14 Plansnittningsmetoder

14.1 14.2 14.3 14.4 14.5 14.6

373

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

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

373 376 377 379 380 386

VI Komplexitet och generella metoder

393

15 Komplexitet

395

15.1 Problemkomplexitet . . . . . . . . . . . . . . . . . . . . . . . . . . 396 15.2 Övningsuppgifter . . . . . . . . . . . . . . . . . . . . . . . . . . . 405 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 . . . . . .

411

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

411 413 416 422 425 431 434

Lagrangerelaxation och det duala problemet . . . . . Subgradienter . . . . . . . . . . . . . . . . . . . . . Lagrangedualitet på heltalsproblem . . . . . . . . . . Exempel på tillämpningar av Lagrangedualitet . . . . Praktisk lösningsmetodik baserad på Lagrangedualitet Övningsuppgifter . . . . . . . . . . . . . . . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

441 443 445 447 450 453

17 Lagrangedualitet

17.1 17.2 17.3 17.4 17.5 17.6

441

Litteraturförteckning

459

Sakregister

463


DEL I

Introduktion

Namnlรถst-1 1

10-07-16 10.32.31


2012-11-14 – sida 2 – # 10


2012-11-14 – sida 3 – # 11

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. Vad som menas med ”bäst”, och vilken uppgift som ska göras, 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 till varje möjligt värde på variablerna ge ett målfunktionsvärde. Dessutom finns vanligtvis ett antal bivillkor som anger vad som 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.


2012-11-14 – sida 4 – # 12

4

KAPITEL 1 INTRODUKTION

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 räkna upp olika kombinationer, snarare än att söka i en kontinuerlig rymd. Problem med binära variabler och 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, Ada, C eller Fortran. 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. Därefter flyter utveckling av linjär- och ickelinjär programmering in i området, och en korsbefruktning sker.


2012-11-14 – sida 5 – # 13

1.1 OPTIMERING

5

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. Finns det ett problem? Vad vill man optimera? Vilka begränsningar finns? 2. Konstruktion av en matematisk modell. Definiera 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. Välj 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 avsedda verksamheten, 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 billigaste väg-problem, där man söker den billigaste vägen mellan olika platser. Kostnaden för att använda olika vägar kan till exempel vara baserade på bensinkostnader och andra bilkostnader om man tänker köra med egen bil. Kostnaderna blir då starkt kopplade 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 ganska liten, jämfört med andra kostnader. Om effekten är så liten att valet av väg faktiskt inte påverkas, behöver man ju inte ta med dessa faktorer för att hitta bästa vägen. Även om kostnaden blir lite högre än man trodde, så blir ingen annan väg billigare. Ett annat skäl kan vara att vi helt enkelt 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. Ett annat skäl kan vara att det inte är vid ett enda tillfälle som resultatet ska användas. Den billigaste väg vi räknar fram kanske ska användas fem dagar i veckan under hela året.


2012-11-14 – sida 6 – # 14

6

KAPITEL 1 INTRODUKTION

Det är dock en fördel att man är 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 bör göras om på grund av detta. 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 tar oftast alldeles för lång tid att lösa, medan en enkel, lättlöst modell kanske inte har tillräcklig relevans, dvs. gör alltför stora förenklingar för att lösningen ska vara relevant för den verkliga situationen.

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 alltså 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 viktiga är att räkna upp ”smart”, dvs. begränsa uppräkningen så mycket det går. Full-


2012-11-14 – sida 7 – # 15

1.3 TILLÄMPNINGSOMRÅDEN

7

stä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 design av telekommunikationsnät/datanät med modern vägvalsprincip (IP/OSPF). Styrning, kontroll och modellering av trafik i IP-nät. Optimal nyttjande av telekommunikationsnät/datanä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.


2012-11-14 – sida 8 – # 16

8

KAPITEL 1 INTRODUKTION

Optimal planering av skogsavverkning. Optimalt vägunderhåll. Optimal snöröjning. 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. Optimal packning av pappersrullar i järnvägsvagnar. 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. Vi kan speciellt nämna Linear Programming FAQ och Nonlinear Programming FAQ (FAQ betyder ”Frequently Asked Questions”) som återfinns under »wiki.mcs.anl.gov/NEOS/ index.php/NEOS_Wiki», tillsammans med mycket annat. Paketet GLPK (GNU Linear Programming Kit), »www.gnu.org/software/glpk/», 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) som heter LP _ SOLVE kan laddas ner från »sourceforge.net/projects/lpsolve/». En tredje LP-lösare, QS OPT återfinns under »www.isye.gatech.edu/~wcook/qsopt/». Från »www.ampl.com/downloads/index.html» kan man ladda hem studentversioner av AMPL, som till stora delar är identiskt med GMPL, och lösare för de olika problemen. En mycket bra approximativ metod för att lösa handelsresandeproblemet som heter LKH kan laddas ner från »www.dat.ruc.dk/~keld/research/LKH/». Under »plato.la.asu.edu/guide.html» återfinner man Decision Tree for Optimization Software, som innehåller pekare till många olika koder för olika optimeringsproblem. Se även min egen sida med länkar: »www.mai.liu.se/~kahol/kurser/all/».


2012-11-14 – sida 9 – # 17

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 i taget av produkterna kan köra 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 är det uppenbart att det handlar 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.


2012-11-14 – sida 10 – # 18

10

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 för att tiden som ska planeras är (högst) en vecka, (1), marknaden begränsar försäljningen, (2), och 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 produkterna, och den totala åtgången är helt enkelt summan av åtgången för de två produkterna. Man bör inte glömma att variabelvärdena inte får bli negativa. (Vi har ingen vettig 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. x2 max z = 2x1 + då x1 + x2 x1 8x1 + 20x2 x2 x1 ,

≤ 1 ≤ 34 ≤ 10 ≥ 0

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

I figur 2.1 ges en bild av bivillkoren, och målfunktionen är 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 så kallad 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). (I figuren ser vi att bivillkor 2 och 3 är aktiva, så genom att sätta likhet i dem kan man


2012-11-14 – sida 11 – # 19

2.1 EXEMPEL PÅ LINJÄRPROGRAMMERINGSPROBLEM

x

11

2

1

(1)

(3)

z=0

(2)

z=1

1

x1

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

lösa ut ovanstående punkt.) Man kan även notera att svaret på vilka bivillkor som är aktiva är diskret, dvs. det finns ett ändligt antal möjligheter, till skillnad från svaret på vilken punkt som är optimal, vilken är kontinuerlig. Dessutom finns ett visst egenintresse av att veta vilka bivillkor som är aktiva, eftersom det ger information om vilka resurser som används fullt ut (och vilka som är till någon del 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, och det kallas därför ett redundant bivillkor.

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. Vi ser nu att optimallösningen inte är förändrad. Dock ser man att 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 en punkt. Vi kan alltså välja vilka två bivillkor som


2012-11-14 – sida 12 – # 20

12

KAPITEL 2 INTRODUKTION TILL LINJÄRPROGRAMMERING

x

2

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.

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 om 2 och 3 är aktiva, och om 1 och 2 är 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 hänsyn till bivillkor 2 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. Vi ser nu att den tidigare optimallösningen fortfarande är 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:


2012-11-14 – sida 13 – # 21

2.2 NÅGRA MODELLERINGSPRINCIPER

13

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å denna. 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 om man vill minimera eller maximera målfunktionsvärdet (skillnaden är bara ett minustecken, t.ex. intäkt minus kostnad eller kostnad minus intäkt). Därefter skriver man upp ett explicit uttryck för målfunktionsvärdet som koefficienter för de olika variablerna. Bivillkoren konstrueras ungefär på samma sätt som målfunktionen, men här gäller det att värdet på uttrycket ska 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


2012-11-14 – sida 14 – # 22

14

KAPITEL 2 INTRODUKTION TILL LINJÄRPROGRAMMERING

tillåtna beror på alla andra bivillkor. Det tillåtna området ges av den sammanlagda effekten av alla bivillkor. 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å

n m

(vj − ci )xij

i=1 j=1 n

xij ≤ ai

i = 1, . . . , m

(1)

xij = bj

j = 1, . . . , n

(2)

j=1

m i=1

xij ≤ dij x≥0

i = 1, . . . , m, j = 1, . . . , n (3)


2012-11-14 – sida 15 – # 23

2.3 EXEMPEL PÅ PROBLEMFORMULERINGAR

15

(x ≥ 0 betyder egentligen xij ≥ 0 för i = 1, . . . , m, j = 1, . . . , n.) 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. Observera fördelen med att använda två index på variablerna, nämligen 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. Vi definierar följande 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. djt aij yijt − cit xit − li vit max z = t t t j i i i då vi,t−1 + xit − yijt = vit ∀ i, t (1) j

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

x, v, y ≥ 0

(2) (3) (4)


2012-11-14 – sida 16 – # 24

16

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ändna råvaror. Den andra ser till att modellen blir cyklisk, genom att låta utlagret efter den sista perioden blir 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 åsätts 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. Värdet på Q är lite osäkert. Vilken lösning skulle Göran få om han råkade mata in ett väldigt stort värde på Q? Ä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: Fj wjt − Cij yijt − Lj ujt + Qvi max z = j

t

i

j

t

j

t

i


2012-11-14 – sida 17 – # 25

2.4 ÖVNINGSUPPGIFTER

xit −

då uj,t−1 +

i

yijt = 0

∀ i, t

17

(1)

j

yijt − wjt − ujt = 0 xit ≤ Si

∀ j, t > 0 (2) ∀i

(3)

t

ujt ≤ Kj ∀ j, t w jt ≤ Dj ∀ j, t xit = Si ∀ i vi + 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. Om Q skulle vara väldigt stort, är det mer lönsamt att låta granarna stå kvar, så inget kommer att avverkas.

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


2012-11-14 – sida 18 – # 26

18

KAPITEL 2 INTRODUKTION TILL LINJÄRPROGRAMMERING

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 vinsten ska bli maximal.

UPPGIFT 2.2

Dietproblemet [8]: 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 och 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å vilken sort, eller kombination av 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


2012-11-14 – sida 19 – # 27

2.4 ÖVNINGSUPPGIFTER

19

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 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, vilken 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


2012-11-14 – sida 20 – # 28

20

KAPITEL 2 INTRODUKTION TILL LINJÄRPROGRAMMERING

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) 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 förutsätter 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.


2012-11-14 – sida 21 – # 29

2.4 ÖVNINGSUPPGIFTER

21

För varje maskin fås ett bivillkor som begränsar använd tid. max z = 2100x1 + 300x2 då 2x1 + 2x2 6x1 + x2 10x1 x2 x1 ,

≤ 100 ≤ 100 ≤ 100 ≥0

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

SVAR 2.2

Variabeldefinition: xj = antal portioner av födoämne j. Vi ger 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 Observera att 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 3,2x1 + 2,2x2 + 3,4x3 3,2x1 + 2,2x2 + 3,4x3 100x1 100x3 0,5x1 − 0,5x2 − 0,5x3 x1 , x2 , x3

≤ 5 (volym) ≤ 16 (maxvikt) ≥ 13 (minvikt) ≤ 400 (vit sand) ≤ 200 (svart sand) ≤ 0 (andel vit sand) ≥ 0

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


2012-11-14 – sida 22 – # 30

22

KAPITEL 2 INTRODUKTION TILL LINJÄRPROGRAMMERING

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. min z =

5

(15000yj + 11000xj )

j=1

160yj − 50xj ≥ dj j = 1, . . . , 5 xj = yj+1 j = 1, . . . , 4 0,85yj + 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.


2012-11-14 – sida 23 – # 31

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 vissa, diskreta värden, oftast heltal och oftast ändligt många (i vart fall uppräkneligt många) och inte oändligt många kontinuerliga värden. Detta gör problemen, generellt sett, betydligt svårare. 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.


2012-11-14 – sida 24 – # 32

24

KAPITEL 3 INTRODUKTION TILL HELTALSPROGRAMMERING

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)

eller (ekvivalent) max z = då

n j=1 n

cj xj aij xj ≤ bi

i = 1, . . . , m

j=1

0 ≤ xj ≤ uj , heltal j = 1, . . . , n Vi antar ofta 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 helt linjärt (P kallas ofta ett linjärt heltalsproblem, även om heltalskraven gör att det i egentlig mening inte är ett linjärt problem). Problemet kallas 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). För ett rent heltalsproblem består det tillåtna området av ett ändligt antal diskreta punkter (se figur 3.1). Även i blandade heltalsproblem är det lätt att se att det tillåtna området inte är sammanhängade eller konvext. (Se kapitel 5 angående begreppet konvexitet.)

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


2012-11-14 – sida 25 – # 33

3.2 ETT ILLUSTRATIVT HELTALSPROBLEM

25

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 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 figur3.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. Vi kommer att låta z∗ beteckna det optimala målfunktionsvärdet till P, och zLP LP-relaxationens optimala målfunktionsvärde. x2 5

x2 5

4 B

4

3 3

2 2

A

1

1

0 0

1

2

3

4

x1

0 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


2012-11-14 – sida 26 – # 34

26

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.

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. 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. Detta indikerar en svårighet med avrundning, nämligen att resultatet kan bli 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. Generellt sett är antingen en tillåten lösning optimal eller så finns det en ännu 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 %. 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.


2012-11-14 – sida 27 – # 35

3.3 SPECIELL ANVÄNDNING AV BINÄRA VARIABLER

27

Vi kan notera att målfunktionen bara innehåller heltaliga koefficienter, och att alla variabler ska vara heltal. Detta gör att 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 åstadkommer ovanstående: a1j xj ≤ b1 + M(1 − y1 ) j

a2j xj ≤ b2 + M(1 − y2 )

j

y1 + y2 = 1 y1 ∈ {0, 1}, y2 ∈ {0, 1} (Man kan eventuellt eliminera den ena binära variabeln genom att sätta y2 = 1 − y1 .) Ett annat sätt att tolka detta antingen-eller-villkor är att kräva att om j a1j xj > b1 , så måste j a2j xj ≤ b2 och vice versa.


2012-11-14 – sida 28 – # 36

28

KAPITEL 3 INTRODUKTION TILL HELTALSPROGRAMMERING

Vi kan generalisera till att minst k av m bivillkor ska gälla. aij xj ≤ bi + M(1 − yi ) i = 1, . . . , m 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.

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


2012-11-14 – sida 29 – # 37

3.3 SPECIELL ANVÄNDNING AV BINÄRA VARIABLER

29

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.

c(x)

x

Figur 3.4. Produktionskostnad innehållande en fast kostnad.


2012-11-14 – sida 30 – # 38

30

KAPITEL 3 INTRODUKTION TILL HELTALSPROGRAMMERING

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

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

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 alla positiva heltal n. Därefter återstår enbart blandade produkter, och dem kan man ta hand om som visas nedan. Likheten z = x1 x2 · · · xn är ekvivalent med olikheterna xi − (n − 1) z ≤ xi ∀i och z ≥ i

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.


2012-11-14 – sida 31 – # 39

3.3 SPECIELL ANVÄNDNING AV BINÄRA VARIABLER

31

Matematisk modell: max z = då

n j=1 n

cj xj aj xj ≤ b

j=1

xj ∈ {0, 1}

j = 1, . . . , n

I detta problem har vi ett bivillkor, med ickenegativa 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. Detta problem är vad som 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 (och med olikheten ≤ i kappsäcksvillkoret), 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

cj xj

j=1

n

aij xj ≥ 1

i = 1, . . . , m

j=1

xj ∈ {0, 1}

j = 1, . . . , n


2012-11-14 – sida 32 – # 40

32

KAPITEL 3 INTRODUKTION TILL HELTALSPROGRAMMERING

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. 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 då

n m

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

i = 1, . . . , m, j = 1, . . . , n (3) xij − yi ≤ 0 i = 1, . . . , m, j = 1, . . . , n (4) xij ≥ 0 (5) yi ∈ {0, 1} i = 1, . . . , m 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 öppna en anläggning ofta har höga (rörliga) transportkostnader. Den andra ligger i att en anläggning antingen öppnas 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 orealistiska lösningar, där delar av anläggningar öppnas. Om si ≥ j dj ∀i kallas problemet okapaciterat eftersom varje anläggning kan tillfredsställa efterfrågan hos alla kunder.


2012-11-14 – sida 33 – # 41

3.3 SPECIELL ANVÄNDNING AV BINÄRA VARIABLER

33

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 mycket 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 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 att man har ett stort antal musikstycken med olika längd, och ska spela in dessa på cd-skivor, så att antalet cd-skivor som krävs minimeras. 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

yj xij = 1

i = 1, . . . , m

ai xij ≤ b

j = 1, . . . , n

j=1 m i=1


2012-11-14 – sida 34 – # 42

34

KAPITEL 3 INTRODUKTION TILL HELTALSPROGRAMMERING

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. 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 =

n

cj yj

j=1

och andra bivillkorsgruppen till m

ai xij ≤ bj j = 1, . . . , n

i=1

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. volym. Detta ger flera bivillkorsgrupper av den andra typen ovan. Man kan också se ovanstående problem som endimensionell packning, där aj och b avser längd. Det finns då även två- och tre-dimensionell 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 90o 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 totala vikten med varje hinks kapacitet, och avrundar uppåt. m ai /b zH = i=1

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ändna hinken. Denna typ av metoder beskrivs mer i kapitel 16.


2012-11-14 – sida 35 – # 43

3.4 LÖSNINGSMETODER FÖR ALLMÄNNA HELTALSPROBLEM

35

3.4 Lösningsmetoder för allmänna 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 däremot kan 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. 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.


2012-11-14 – sida 36 – # 44

36

KAPITEL 3 INTRODUKTION TILL HELTALSPROGRAMMERING

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. Detta beskrivs mer i kapitel 14.

3.5 Övningsuppgifter UPPGIFT 3.1

En fjällvandrare har att 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 ett heltalsproblem.

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


2012-11-14 – sida 37 – # 45

3.5 ÖVNINGSUPPGIFTER

3

2

1

4

5

37

B

A

C 6

11

7

8

9

10

12

13

14

15

18

19

20

D 16

17

E F

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? 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. 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. 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 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


HOLMBERG

OPTIMERING

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. 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.

KAJ HOLMBERG

OPTIMERING är en komplett grundbok i optimeringslära

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

Best.nr 47-09935-1 Tryck.nr 47-09935-1-01

9789147099351c1c.indd 1

12/11/12 12:57 PM


Turn static files into dynamic content formats.

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