OPERÁCIÓKUTATÁS Kalmár János, 2012 Tartalom A nulla-egy LP megoldása Hátizsák feladat
A nulla-egy LP megoldása A x b, x 0 (1) c T x max (2) A Z feletti (egész) mátrix, b és c Z feletti vektorok, x bináris (0-1) vektor. Megoldása leszámlálási algoritmussal, tehát az összes lehetséges x (2 n darabszámú) megoldást számba veszi, úgy választja ki az optimumot. A gyakorlatban a vizsgált esetek számát természetesen ésszerűen korlátozzák.
A nulla-egy LP megoldása 1. Tétel: Legyen S részhalmaza az {1,2,…,n} indexhalmaznak. A j x j j S (3) lineáris egyenlőtlenségnek akkor és csak akkor nincs 0-1 megoldása, ha min(0, j ) > j S (4) teljesül. Bizonyítás: j x j a minimumát akkor veszi fel, amikor x j = 0, ha j > 0, és x j = 1, ha j < 0
A nulla-egy LP megoldása 2. Tétel: Ha a min(0, j ) + j0 > j, j 0 S (5) feltétel teljesül valamely j 0 indexre, akkor annak szükséges feltétele, hogy (3)-nak legyen 0-1 lehetséges megoldása az, hogy x j0 = 1 legyen, ha j0 < 0, illetve x j0 = 0 legyen, ha j0 > 0. Ha j0 = 0, akkor az 1. Tétel miatt nincs megoldás.
A nulla-egy LP megoldása Algoritmus: x j változókat két halmazra osztjuk: ha j S, akkor x S j kötött változó (értékét rögzítjük 0-ra vagy 1-re), a többi x j, j S szabad (meghatározandó) változó. Ennek megfelelően az (1) feltételek aktualizálva: a i,j x j b i - a i,j x S j (6) illetve ismerve a (2) célfgv. egy z alsó korlátját kiegészítjük (1)-et az alábbi feltétellel, hogy a rosszabb eredményeket kizárhassuk: c T x z
A nulla-egy LP megoldása 3. Tétel: Az alábbi algoritmus véges lépésben véget ér: Inicializálás: Legyen S={0}, tehát minden változó szabad, és legyen z = c j, ahol c j < 0 Folytassuk a ciklusnál.
A nulla-egy LP megoldása Algoritmus Ciklus: az S-ben kötött változók alapján számítsuk újra (1) feltételeket. Ha nincs több szabad x j változó, akkor lépjünk tovább az célfgv ellenőrzésre. Egyébként a 2. tétel (5) feltételét alkalmazva keressünk olyan szabad x j változót, melynek (0-1) rögzítése szükséges valamelyik (1)-beli feltétel kielégítéséhez; ha találtunk ilyet, egészítsük ki S sort jobbról j-vel, húzzuk alá j-t, és kezdjük elölről a ciklust. Ha nem találtunk ilyen szabad változót, akkor tetszőleges x j szabad változóval egészítsük ki S sort jobbról j-vel (aláhúzás nélkül), és lépjünk vissza a ciklus elejére.
A nulla-egy LP megoldása Algoritmus Célfgv ellenőrzés: ha az S-beli megoldás (2) célfgvénye z-nél tovább nem javítható (ld. 1. Tétel) menjünk tovább az alternatíva keresésre. Egyébként módosítsuk z-t, tároljuk a hozzá tartozó lehetséges megoldást és menjünk tovább az alternatíva keresésre.
A nulla-egy LP megoldása Algoritmus Alternatíva keresése: válasszuk ki S sorban utolsó nem aláhúzott j elemét – ha nincs ilyen, akkor az eddig tárolt legjobb megoldás az optimális megoldás. Ha még nem találtunk legjobb megoldást, akkor (1)-nek nincs megoldása. Ha találtunk utolsó nem aláhúzott j elemet, akkor húzzuk alá, a hozzá tartozó kötött x j változó értékét változtassuk meg (0-ról 1-re, vagy viszont), töröljük a tőle jobbra álló elemeket S-ből, és ugorjunk vissza a ciklusra.
A nulla-egy LP megoldása Mintapélda: -x 1 + 3x 2 – 5x 3 – x 4 + 4x 5 -2 2x 1 - 6x 2 + 3x 3 + 2x 4 - 2x 5 0 x 2 – 2x 3 + x 4 + x 5 -1 -5x 1 - 7x 2 – 10x 3 – 3x 4 - x 5 max Inicializálás: Legyen S={0}, és z = -26 így a célfüggvényből származtatott kiegészítő feltétel -5x 1 - 7x 2 – 10x 3 – 3x 4 - x 5 -26
A nulla-egy LP megoldása Mintapélda: A 3. feltételre elvégzett 2. tétel szerinti teszt alapján x 3 = 1 szükséges ahhoz, hogy legyen lehetséges megoldás, ezért S = {3}. x 3 rögzítése után a 2. feltétel 2x 1 - 6x 2 + 2x 4 - 2x 5 -3 és a 2. tétel szerinti teszt alapján x 2 = 1 szükséges ahhoz, hogy legyen lehetséges megoldás, ezért S = {3, 2}.
A nulla-egy LP megoldása Mintapélda: A 3. feltétel most x 4 + x 5 0 Az erre elvégzett 2. tétel szerinti teszt alapján x 4 = x 5 = 0 szükséges ahhoz, hogy legyen lehetséges megoldás, ezért S = {3,2,-4,-5}. (a tárolt sorszám előjele mutatja a hozzá tartozó változó értékét: j>0 x j = 1, j<0 x j = 0) Mivel egyik teszt sem pozitív, ezért az egyetlen szabad változót x 1 = 0-n rögzítem, ezért az új S={3,2,-4,-5,-1}
A nulla-egy LP megoldása Mintapélda: S={3,2,-4,-5,-1} már egy lehetséges megoldás, melynek célfgvénye -17, ezért a kiegészítő feltételt szigoríthatjuk: -5x 1 - 7x 2 – 10x 3 – 3x 4 - x 5 -17 Most S-ben az utolsó nem aláhúzott elem -1, ezért (alternatívaként) áttérünk az S={3,2,-4,-5,1} megoldásra, ami a kiegészítő feltételt már nem elégíti ki, ezért marad optimális megoldásnak x 1 = x 4 = x 5 = 0, x 2 = x 3 = 1
A hátizsákfeladat megoldása A megoldandó feladat a T x b, x 0 (3) c T x max (4) a és c Z feletti (pozitív egészelemű) n dimenziós vektorok, x n dimenziós bináris (0-1) vektor, és b pozitív egész szám. A paraméterek jelentése: a j a j-dik tárgy súlya, c j a j-dik tárgy értéke b a hátizsák (súly)kapacitása x j = 1 jelenti azt, hogy a j-dik tárgy bekerült a zsákba, x j = 0, ha nem.
A hátizsákfeladat megoldása A gyorsabb megoldás érdekében rendezzük a tárgyakat c j / a j (egységnyi súlyra eső érték) szerint csökkenő sorba; a ‘brutal force’ (nyers erő) módszer (sorban egymás után tesszük be a tárgyakat a hátizsákba, amíg be nem telik) ezen sorrend mellett gyakran azonnal az optimumhoz vezet. A feladatot dinamikus programozással oldjuk meg, amihez rekurzív összefüggést keresünk. Jelölje P r (d) a következő feladatot a T x d, x 0 (5) c T x max (6)
A hátizsákfeladat megoldása ahol a és c Z feletti (egészelemű) pozitív r (<=n) dimenziós vektorok, x r dimenziós bináris (0-1) vektor, és d pozitív egész szám. Jelölje a P r (d) feladat megoldását f r (d), akkor a (3)-(4) feladat optimális megoldása nyílván f n (b). Ha az optimális megoldásban x r = 0, akkor f r (d) = f r-1 (d), viszont x r = 1 esetén f r (d) = f r-1 (d - a r ) + c r, ezért végeredményben az f r (d) = max(f r-1 (d), f r-1 (d - a r ) + c r ) képlet adja a keresett rekurziót.
A hátizsákfeladat megoldása Mintapélda: x x x x 4 <= 7 7 x x x x 4 max Az ismeretlenek már eleve a fajlagos érték szerint csökkenő sorrendben vannak, ezért megkezdhetjük az f r (d) függvény kiszámítását: f r (d) d=0d=1d=2d=3d=4d=5d=6d=7 f0f f1f f2f f3f f4f
A hátizsákfeladat megoldása A táblázatból kiolvasható, hogy az optimális megoldásban x 1 = 0, x 2 = 1, x 3 = 1 és x 4 = 0. Ha a j-dik tárgyból nem 1, hanem t j példány áll rendelkezésre (x j <= t j ), akkor úgy vezetjük vissza a feladatot a bináris megoldásra, hogy a tárgyak közé a j-diket t j különböző példányban visszük be. Különböző optimalizálási feladatok megoldó programjai találhatók a neten az alábbi címen: