Eirik Benum Reksten Hans Olav Norheim (ja, det kommer nok litt matte nå ja)
Hva er lineærprogrammering? Vi har et problem hvor vi... 1. ønsker å minimere eller å maksimere et mål 2. kan spesifisere målet som en lineær funksjon av spesifikke variable 3. Kan spesifisere de tilgjengelige ressursene som ligninger på disse variablene Dersom et problem tilfredsstiller de tre punktene over kan det løses ved hjelp av lineærprogrammering
Lineært Program Et lineært program er en matematisk struktur som består av: Et uttrykk som enten skal maksimeres eller minimeres. Et sett med ulikheter, som er lineære funksjoner av variablene. I dette faget skal dere lære å formulere problemer som lineære programmer!
Eksempel Åsmund ønsker å bli president i Algdatia Det er 3 fylker i Algdatia Sort, 100 000 velgere Flow, 200 000 velgere Path, 50 000 velgere For å vinne valget må han ha minst 50% av stemmene i hvert eneste fylke Han har 4 kjernesaker han kan reklamere for Kortere veier Sortert telefonkatalog Gratis algdatbøker til alle Bensinpriser 1 krone til reklame for en sak vil gi han X antall velgere mer eller mindre i hvert fylke.
Valgkampsaker Kjernesak \ Fylke Sort Flow Path Kortere veier -2 5 3 Sortert telefonkatalog 8 2-5 Gratis algdatbøker 0 0 10 Bensinpriser 10 0-2 Befolkning (tusen) 100 200 50 Tabellen viser antall stemmer han får dersom han bruker 1 krone på reklame for en kjernesak Eksempel: 1 krone brukt på reklame for kortere veier vil gi 2 stemmer mindre i Sort mens det vil gi 5 stemmer i flow og 3 stemmer i Path
Hvor mye må Åsmund bruke på valgkamp? Simpelt å bare finne et beløp som gir minst 50% i alle fylker Finn et beløp som fordelt gir pluss til alle fylker F.eks.. 1 krone på kortere veier og 1 på bensinpriser som gir Sort +8, Flow +5 og Path +1 Bare å gange dette opp til en har nok stemmer i alle fylker Åsmund er gjerrig og skjønner at dette ikke gir en optimal løsning. Han vil bruke minst mulig penger. Klok som han er skjønner han at dette kan formuleres til et problem i lineærprogrammering
Minimere eller maksimere et mål Målet er minst mulig reklamepenger Åsmund ønsker å bruke minst mulig penger til dette (minimere) Vi har et lineærprogram!
Målet kan spesifiseres som en lineær funksjon av spesifikke variable Penger brukt på reklame for: Kortere veier = X1 Sortert telefonkatalog = X2 Gratis algdatbøker = X3 Bensinpriser = X4 Reklamepenger = X1 + X2 + X3 + X4
Kjernesak Sort Flow Path Kortere veier -2 5 3 Sortert telefonkatalog 8 2-5 Bondegårdsferie til alle 0 0 10 Bensinpriser 10 0-2 Befolkning (tusen) 100 200 50 Sort: -2X1 + 8X2 + 0X3 + 10X4 >= 100/2 Flow: 5X1 + 2X2 + 0X3 + 0X4 >= 200/2 Path: 3X1-5X2 + 10X3 + -2X4 >= 50/2 Kan ikke bruke negativt antall kroner: X1, X2, X3, X4 >=0
Kan nå sette opp et lineært program Minimér X1 + X2 + X3 +X4 Med begrensningene: -2X1 + 8X2 + 0X3 + 10X4 >= 50 5X1 + 2X2 + 0X3 + 0X4 >= 100 3X1-5X2 + 10X3-2X4 >= 25 X1, X2, X3, X4 >=0 Lineært PROGRAM Løsningen her vil gi minst 50% stemmer i hvert fylke samt minst mulig penger brukt til reklame
Hva er det man egentlig løser? Enkelt eksempel kun 2 variable Maksimer X1 + X2, begrenset av: 4X1 X2 <= 8 2X1 + X2 <= 10 5X1 2X2 >= -2 X1, X2 >= 0 Området ulikhetene avgrenser er gult på figuren på neste side Alle muligheter for X1 + X2 som ligger inne i dette området kales feasiblesolutions. Det er inne i det området en må maksimere X1 +X2
2 dimensjoner i koordinatsystem
Standardform Standard måte å sette opp et lineærprogram på 1. Må være et maksimeringsproblem 2. Alle ulikhetene må være på formen: ax1 + bx2... <= C (dvs. lineær ligning mindre eller lik en konstant) 3. X1, X2,... >= 0 for alle variabler
Konvertering til standardform 4 ting som kan gjøre at det ikke er på standardform 1. Kan ha et minimeringsproblem 2. Kan ha likheter i stedet for ulikheter 3. Kan ha større-lik ulikheter (feil vei) 4. Kan finnes variabler som ikke er nedre begrenset av 0
1. Minimering maksimering Enkelt; bare å endre fortegn på målet Minimer: X1 + X2 + X3 + X4 Maksimer: -X1 - X2 - X3 - X4
2. Fikse = <= Anta X1 4X2 = 5 Bytter ut med: X1 4X2 <=5 X1 4X2 >=5 Disse 2 sammen betyr X1 4X2 = 5
3. Fikse >= <= Anta X1 4X2 >= 5 Gange hele med (-1) -X1 + 4X2 <= -5 NB: >= <= når en ganger med (-1) på begge sider
4. Lage nedre begrensning 0 på en variabel som ikke har det Anta at X ikke er nedre begrenset Sett X = Y - Z Legg til Y, Z >= 0
Slack form Som standardform, men med LIKheter i stedet for ULIKheter (bortsett fra >= 0-ulikhetene) Introduserer nye variabler s i, et mål på differansen mellom høyre og venstre side av ulikheten Har: 5X1 + 2X2 <= 100 000 0 <= 100 000 (5X1 + 2X) Gir med slack: s = 100 000-5X1-2X s >= 0
Slack form (2) Kokebokoppskrift fra standard slack form 1. Sett målet lik z eks. z = X1+ 3X2 2. Gjør om ulikhetene til å inneholde en slack 5X1 + 30X2 <= 100 s1 = 100-5X1-2X og 17X1 - X2 <= 10 s2 = 10-17X1 + X2 3. Føy til de nye slack-variablene i >= 0-rekka. Boka bruker x n+1 som første slack-variabel.
Slack form: Eksempel Standard form: Maksimer X1 + X2 begrenset av: 4X1 X2 <= 8 2X1 + X2 <= 10 X1, X2 >= 0 Slack form: Maksimer z = X1 + X2 begrenset av: X3 = 8 (4X1 X2) X4 = 10 (2X1 + X2) X1, X2, X3, X4 >= 0
Kort om simplex Løser lineære programmer på slack form Worst case er exponentiel kjøretide: a^n Ofte mye raskere i praksis Linker (fin, men tror den har en feil, den klarer ikke å løse alle løselige problemer) http://people.hofstra.edu/faculty/stefan_waner/realw orld/simplex.html (litt mer tungvindt å bruke, men ser ut til å fungere bra) http://wwwfp.mcs.anl.gov/otc/guide/casestudies/simplex/applet/s implextool.html
Eksempler på problemer som kan løses ved lineære programmer Korteste vei Bedre med egne teknikker Maks flyt Bedre med egne teknikker Sirkulasjonsproblemer Best ved hjelp av lineære programmer
Korteste vei som lin.prog. (single pair) G = (V, E), w: E R Maximize d[t] subject to d[v] <= d[u] + w(u, v) for each edge (u, v) in E d[s] = 0 V variables (d[v], d[u] ), E + 1 constrains JA, det står MAXIMIZE.
Maks flyt som lin.prog. G = (V, E), w: E R Maximize subject to f(u, v) <= c(u, v) for each u, v in V f(u, v) = -f(v, u) for each u, v in V = 0 for each u in V {s, t} V 2 variables, 2 V 2 - V - 2 constraints
Sirkulasjonsproblemet Det vi kjenner som maks-flyt nå kan generaliseres til et sirkulasjonsproblem. Start og slutt-noder er da ikke spesielle lenger; vi oppretter en kant fra slutt til start og jobber med sirkulasjon i stedet. Vihartoandre kjente spesialiseringeravsirkulasjonsprob Minimum-cost-flow Kanter har nå en kostnad per enhet i tillegg til kapasitet. Vi ønsker å oppnå en flyt d i grafen fra s til t billigst mulig. Multicommodity flow Vi har strømmer av forskjellige varer fra startnodene s i til t i, som deler samme transportnettverk.
Oppg. 5, eksamen 2005H På en nyttårsfest er det invitert N gutter og N jenter, og arrangøren vil opnåatsåfåsommuligfåren ikespesieltønsket bordkavaler/dame til bords. Spørreundersøkelse gjennomført, data samlet i to matriser G og P. G(i, j) = 0 dersom gutt nr. i ikke spesielt ønsker jente nr. j, j = 1,2,..., N; ellers er G(i, j) = 1. P(j, i) = 0 dersom jente nr. j ikke spesielt ønsker gutt nr. i, i = 1, 2,..., N; ellers er P(j, i) = 1. Ønskene er ikke nødvendigvis gjensidige; eksempelvis kan G(5, 19) = 1 mens P(19, 5) = 0. Problem PAR: Finn en par-sammensetting som er slik at så få personer som mulig ender opp med å få en ikke spesielt ønsket person til bords.
Løsning
Løsning (2) s 0/1 0/1 0/1 1 2 3 Min/max flow: 0/1 Kostnad: -(G(i,j) + P(j,i)) 0/N 1 2 3 0/1 0/1 0/1 t
Oppgave 6, 2005H GLAGNAR er en type datastruktur (en klasse) 4 attributter/felter: buncha, muncha, cruncha og human. zoid er en minimums-heap av GLAGNAR-instanser, GLAGNAR sammenlignes på muncha Du er usikker på hva buncha-feltene er satt til for instansene i zoid, men du vet at muncha-feltene er satt til ulike tall. runcha og human-attributtene for disse instansene er udefinerte. while zoid.length > 1 pop a fra zoid pop b fra zoid rinds en ny GLAGNAR-instans rinds.muncha a.muncha + b.muncha rinds.cruncha a rinds.human b sett (dvs. push) rinds inn i zoid Hva gjør koden?