TAOP14: Föreläsning 2 2 Föreläsning 2: A/ modellera och lösa LP-‐problem TAOP14: Föreläsning 2 § Problemställning i ord → matema=sk modell → → AMPL-‐modell → CPLEX → resultatutskriD → → svar på den givna problemställningen Problemställning i ord → matematisk modell → AMPL-modell → CPLEX → resultatutskrift → svar på den givna problemställningen TAOP14: Föreläsning 2 3 Verkligt problem Verifiering Iden=fiering, avgränsningar, förenklingar, antaganden TAOP14: Föreläsning 2 Problemställning i ord → matematisk modell Förenklat problem Formulering Validering 4 Op=meringsmodell Beslut Variabler Mål Målfunk=on Begränsningar Bivillkor Lösningsmetod Lösning Resultat TAOP14: Föreläsning 2 5 TAOP14: Föreläsning 2 6 Exempel: Produk=onsplanering Modellformulering § Produk=on av två olika produkter. § Maximera den totala vinsten. § Resurs=llgång vid de två =llverkningsavdelningarna: avd 1: 240h; avd 2: 140h Variabeldefini=on: § Produkt 1 • • • • vinst/enhet: 30 kr resursåtgång avd 1: 4h resursåtgång avd 2: 2h begränsad eDerfrågan: 40 st § Produkt 2 • vinst/enhet: 20 kr • resursåtgång avd 1: 3h • resursåtgång avd 2: 2h xi = antalet =llverkade av produkt i, i = 1, 2 Matema=sk modell: max z = 30x1 + 20x2 [målfunk)on] då 4x1 + 3x2 240 2x1 + 2x2 140 x1 40 x 1 , x2 0 [resurs, avd. 1] [resurs, avd. 2] [maxproduk)on] [variabelbegränsningar] 1 TAOP14: Föreläsning 2 7 TAOP14: Föreläsning 2 8 Vid modellering Parametrar § Parametrar: Givna data, beskriver problemet. Alla siffror som är kända, givna från början, beskriver förutsä/ningarna för problemet. Till exempel: § Resurser -‐ Tillgångar bkt ( råvara k, =d t ) -‐ Åtgång akj ( råvara k, produkt j ) • Resursbegränsningar, priser, =llgångar, eDerfrågan § Variabler: Det man ska fa/a e/ beslut om / vill ha svar på. • Produk=on, försäljning, inköp, lager, transport, blandning § Bivillkor: Kopplar samman variabler och parametrar § Priser som behöver kommunicera med varandra. • Resursbegränsningar, priser, =llgångar, eDerfrågan pkt ( råvara k, =d t ) cjt ( produkt j, =d t ) § EDerfrågan -‐ Krav på produk=on djt ( produkt j, =d t ) § Målfunk=on: Maximera vinst / minimera kostnader • ”Försäljning gånger intäkt minus inköp gånger inköpspris” TAOP14: Föreläsning 2 -‐ Inköpspriser -‐ Försäljningspriser 9 Kan vara minimumkrav (≥) , maximumkrav (≤) eller exakt eDerfrågan (=). TAOP14: Föreläsning 2 10 Variabler Bivillkor Det man ska bestämma / kan påverka / vill ha svar på: Reglerar så a/ ställda krav tvingas a/ uppfyllas : § Produk=on xjt hur mycket ska produceras av § Resursbegränsningar produkt j under =dsperiod t ykt hur mycket ska köpas in av råvara k under =dsperiod t § Lagerbalans § Inköp § Lager Lkt hur mycket finns i lager av råvara k i slutet (början) av =dsperiod t Tmnt hur mycket ska transporteras från § Transport ∑a x jt ≤ bkt ∀ k, t Lk ,t −1 + ykt − ∑ akj x jt = Lkt ∀ k, t kj j∈J j∈J § Transportkrav (från varje m) ∑T ≤ smt ∀ m, t ∑T ≥ d nt ∀ n, t x jt ≥ 0 ∀ j, t mnt n∈N plats m =ll plats n under =dsperiod t (=ll varje n) § Variabelbegränsningar TAOP14: Föreläsning 2 11 mnt m∈M TAOP14: Föreläsning 2 12 Målfunk=on Formulering av bivillkor Ska minimeras eller maximeras Givet följande variabeldefintion : xijt = Mängd råvara i som ska blandas i produkt j i tidsperiod t § Kan bestå av flera komponenter (intäkter / kostnader). där i = 1,..,20 j = 1,..,10 och t = 1,..,5 • Ska bestå av all=ng som man tjänar på, samt allt som kostar § Koppla samman varje kostnad / intäkt med en lämplig variabel. Exempelvis: • Inköpskostnad (parameter) & inköpsmängd (variabel) pkt * ykt • Försäljningspris (parameter) & försäljning (variabel) cjt * xjt § Om en viss intäkt / kostnad inte verkar passa ihop med någon av variablerna: • Fundera över om någon variabel saknas! Formulera följande bivillkor: a) Användningen av råvara i =ll produkt j får inte övers=ga =llgången bijt enheter per vecka t b) Användningen av råvara i får inte övers=ga den totala =llgången ci enheter c) Den totala användningen av råvaror får inte övers=ga btotal enheter T 2.1 2 TAOP14: Föreläsning 2 13 TAOP14: Föreläsning 2 14 Formulering av bivillkor Exempel: produk=onsplanering II d) Den totala mängden av produkt j ska vara minst dj enheter e) Den totala mängden av produkter får högst vara dtotal under varje vecka t f) Mängden av råvara i = 2 ska vara densamma som råvara i = 3 =ll produkt j under vecka t = 4 g) Varje enskild produkt som =llverkas får innehålla som mest 30% av råvara i = 10 § De kommande tre veckorna, t = 1,2,3, är eDerfrågan av en viss produkt d1, d2, respek=ve d3. EDerfrågan i vecka t =llgodoses an=ngen genom produk=on eller a/ ta från befintligt lager. § Lagret har en kapacitet på S produkter och det kostar p kronor a/ lagra en enhet från en vecka =ll nästa. Vill man lagra y/erligare enheter kan man hyra in sig hos e/ företag bredvid, vilket kostar q kr/enhet (q > p). § Kostnaden a/ =llverka en enhet i vecka t är ct. Vid produk=on används en maskin vars kapacitet är M =mmar varje vecka. För a/ =llverka en enhet vecka t åtgår ht =mmar. Behöver man y/erligare maskin=mmar kan man leasa en maskin för k kr/ =mme. Ini=allagret betecknas L_init respek=ve m_init. § Formulera problemet som e/ linjärt op=meringsproblem T 2.2 TAOP14: Föreläsning 2 15 LP-‐modell, produk=onsplanering II 3 3 3 3 min w = ∑c x t t t=1 t=1 max z = cT x då Ax ≤ b x≥0 t=1 Lt ≤ S , t = 1,2,3 ht xt ≤ M + zt , t = 1,2,3 Lt−1 + mt−1 + xt − dt = Lt + mt , t = 1,2,3 L0 = L _ init m0 = m _ init xt , zt ≥ 0 , t = 1,2,3 Lt , mt ≥ 0 , t = 0,1,2,3 x = (x1 x2 (c b=( S c= TAOP14: Föreläsning 2 17 LP-‐modell, matrisform A = 0 0 0 h1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 h2 0 0 1 0 h3 0 0 0 0 0 0 0 0 1 0 0 0 0 1 0 0 16 LP-‐modell, matrisform + p∑ Lt + q∑ mt + k ∑ zt t=1 då TAOP14: Föreläsning 2 1 c2 x3 L0 c3 S S OBS: I denna modell finns både = -‐ villkor och ≤ -‐ villkor L1 L2 0 p p M M M L3 m0 m1 m2 m3 p 0 q q q k k k d1 d2 d3 ) T L _ init m _ init TAOP14: Föreläsning 2 T z3 ) z1 z2 ) T 18 Kom ihåg! 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 −1 0 0 1 −1 0 0 0 0 0 0 0 0 0 0 1 −1 0 0 1 −1 1 0 0 1 −1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 −1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 −1 0 0 −1 0 0 0 0 1 −1 0 0 0 0 0 0 0 0 0 0 0 0 0 § Skilj på parametrar (numerisk data) och variabler (det vi ska fa>a beslut om). § I en LP-‐modell får variabler inte mul=pliceras eller divideras med varandra! § I bivillkoren, skilj på: -‐ e/ villkor för varje index ( ∀ ) -‐ summera över index ( ∑ ) 3 TAOP14: Föreläsning 2 19 TAOP14: Föreläsning 2 20 Matema=sk modell → AMPL-‐modell AMPL § AMPL = modelleringsspråk som används för a/ formulera en matema=sk modell så a/ e/ datorprogram, tex CPLEX, kan förstå den. § Skrivs i en vanlig texnil. Alterna=v 1: Alterna=v 2: max z = 30x1 + 20x2 max z = då 4x1 + 3x2 240 2x1 + 2x2 140 x1 40 x 1 , x2 0 Två strategier: § Alterna=v 1: Modell och data =llsammans § Alterna=v 2: Modell och data var för sig TAOP14: Föreläsning 2 Modell och data =llsammans. Enkelt för små problem. 21 AMPL-‐modell, alt. 1 # Variabeldefinition var x1 >= 0; var x2 >= 0; # Målfunktion maximize z : Tecknet ”#” används framför kommentarer 4*x1 + 3*x2 <= 240; 2*x1 + 2*x2 <= 140; x1 <= 40; TAOP14: Föreläsning 2 X då j2J 23 xj 0, i2I j2J TAOP14: Föreläsning 2 22 set PRODUKTER; set AVDELNING; # Har olika produkter # Har olika avdelningar param Vinst{ PRODUKTER }; # Täckningsbidraget param Maxtid{ AVDELNING }; param a{ PRODUKTER, AVDELNING }; # Tidstillgång, avd. # Tidsåtgång param Maxprod{ PRODUKTER }; # Maxtillverkning var x{ PRODUKTER } >= 0; # Variabeldefinition TAOP14: Föreläsning 2 24 AMPL-‐modell, alt. 2, modell AMPL-‐modell, alt. 2, data set PRODUKTER := p1 p2; set AVDELNING := m1 m2; Namn på villkoret För varje ... Avd_tid{ j in AVDELNING }: sum{ i in PRODUKTER } a[i,j]*x[i] <= Maxtid[j]; Maxproduktion{i in PRODUKTER}: x[i] <= Maxprod[i]; aij xj bi , Modell och data var för sig. Smidigare för stora problem, mer generellt. maximize z : sum{ i in PRODUKTER } Vinst[i]*x[i]; subject to c j xj j2J AMPL-‐modell, alt. 2, modell 30*x1 + 20*x2; # Bivillkor subject to Avd_tid1 : Avd_tid2 : Maxproduktion : X Summera över ... param : Vinst p1 30 p2 20 Maxprod := 40 1000 ; param : Maxtid := m1 240 m2 140 ; Här specificeras: 2 produkter 2 avdelningar M=1000, ”ett tillräckligt stort tal” param a : m1 m2 := p1 4 2 p2 3 2; 4 TAOP14: Föreläsning 2 25 TAOP14: Föreläsning 2 26 AMPL-‐modell → CPLEX Kommandofil § Vi har en modell-‐ och en datafil som beskriver vårt problem. Hur få datorn a/ lösa det? reset; options solver cplex ; # nollställer tidigare beräkningar # väljer lösare model exempel1.mod ; data exempel1.dat ; # väljer modell # väljer data solve; # löser problemet modellfil: mi/problem.mod kommandofil: mi/problem.run datafil: mi/problem.dat # skriver resultatet till fil display x > exempel1.res; display Avd_tid.slack > exempel1.res; TAOP14: Föreläsning 2 27 CPLEX → resultatutskriD Alt. 1, modell och data i samma fil Alt. 2, separata filer z z = 1733.33 x1 = 40 x2 = 26.67 Avd_tid1.slack = 0 Avd_tid2.slack = 6.67 TAOP14: Föreläsning 2 28 resultatutskriD → svar på den givna problemställningen Läs av resultatet och gör en rimlighetsbedömning: = 1733.33 § Är variabelvärdena rimliga ... ... i rela=on =ll vad som är lönsamt? ... i rela=on =ll de villkor och krav som finns? x [ * ] := p1 40 p2 26.67; § Är målfunk=onsvärdet rimligt? • Om möjligt, gör en överslagsräkning • Jämför med en op=mis=sk ska/ning • Jämför med en pessimis=sk ska/ning Avd_tid.slack [ * ] := m1 0 m2 6.67; TAOP14: Föreläsning 2 29 TAOP14: Föreläsning 2 30 Op=mis=sk ska/ning Pessimis=sk ska/ning Måste all=d, med säkerhet, ge e/ värde som är bä/re än det op=mala målfunk=onsvärdet. Måste all=d, med säkerhet, ge en lösning som är =llåten med avseende på bivillkoren. Strategi: § Använd enkel ”papper och penna räkning” § Ska/a variablerna så a/ de blir för bra § Förenkla målfunk=onen så a/ den ger e/ för bra värde max z = 30x1 + 20x2 Strategi: § Använd enkel ”papper och då 4x1 + 3x2 240 penna räkning” 2x1 + 2x2 140 § Förenkla problemet utan a/ fler x1 40 lösningar än de ursprungliga blir x 1 , x2 0 =llåtna, troligen fås då färre =llåtna lösningar § Förenkla målfunk=onen så a/ den ger e/ för dåligt värde T 2.4 max z = 30x1 + 20x2 då 4x1 + 3x2 240 2x1 + 2x2 140 x1 40 x 1 , x2 0 T 2.3 5 TAOP14: Föreläsning 2 31 TAOP14: Föreläsning 2 32 Labora=on 1 Uppsummering Fö. 2 § SyDar =ll a/ ni ska komma igång med AMPL § Gå från problemställning i ord =ll resultatutskriD § Byggs upp stegvis § Förberedelse inför projektuppgiDen där ni ska lösa e/ något större problem § Modellering • Parametrar, variabler, bivillkor, målfunk=on • AMPL, modelleringsspråk för op=meringsproblem • Sista sidorna på dagens föresläsning visar AMPL-‐ modellen för problemet ”Produk=onsplanering II” § Unörliga exempel ”Ska/ningar” på Lisam: • Ger exempel på hur man kan skapa en op=mis=sk och pessimis=sk ska/ning • Här för produk=onsuppgiDen från Lek=on 2 / Labb 1 TAOP14: Föreläsning 2 33 Produk=onsplanering II 3 min w = 3 ∑c x t t t=1 t=1 modellfil, del 1 set produkter; param T; param c{produkter}; param Efterfrågan{1..T} param p; param q; param k; param M; param h{1..T}; param S; param L_init; param m_init; t=1 Lt ≤ S , t = 1,2,3 ht xt ≤ M + zt , t = 1,2,3 Lt−1 + mt−1 + xt − dt = Lt + mt , t = 1,2,3 L0 = L _ init m0 = m _ init xt , Lt , mt , zt ≥ 0 , t = 1,2,3 Behöver skapa tre filer. 34 3 + p∑ Lt + q∑ mt + k ∑ zt t=1 då 3 TAOP14: Föreläsning 2 kommandofil: exempel2.run modellfil: exempel2.mod datafil: exempel2.dat TAOP14: Föreläsning 2 35 # # # # # # # # # # # # Olika produkter Antal veckor Produktionskostnad Efterfrågan varje vecka Lagerkostnad hemma Lagerkostnad borta Leasingkostnad Maskinkapacitet Åtgång vid tillverkning Lagerkapacitet Initiallager eget Initiallager extra TAOP14: Föreläsning 2 modellfil, del 2 modellfil, del 3 # Antal producerade produkter vecka t: var x{1..T} >= 0; minimize z: sum{t in 1..T} c[t]*x[t] + sum{t in 1..T} p*L[t] + sum{t in 1..T} q*m[t] + sum{t in 1..T} k*z[t]); # Antal produkter i lager vecka t: Var L{0..T} >= 0; 36 subject to Lagerkapacitet{t in 1..T} : L[t] <= S; # Antal produkter i lager borta vecka t: var m{0..T} >= 0; Maskintid{t in 1..T} : h[t]*x[t] <= M + z[t]; # Antal leasingtimmar vecka t: var z{1..T} >=0; Lagerbalans{t in 1..T}: L[t-1] + m[t-1] + x[t] - d[t] = L[t] + m[t]; Init_eget : L[0] = L_init; Init_extra : m[0] = m_init; 6
© Copyright 2024