You are on page 1of 53

Operációkutatás

12. előadás

E.-Nagy Marianna
Operációkutatás és Aktuáriustudományok Tanszék

2023/24 őszi félév


Egészértékű programozás
Korlátozás és szétválasztás
Korlátozás és szétválasztás
Egészértékű programozási feladat:

max c T x
Ax ≤ b
x ≥0
x ∈ Zn

Ötlet: Ha x a folytonos relaxált megoldása és x8 = 5,23, akkor vagy x8 ≤ 5


vagy x8 ≥ 6.

Legyen most a feladatunk


max −x1 + 4x2
   
−1 2 4
 5 2  x ≤  25 
−2 −2 −7
x ∈ Z2⊕
Példa
max −x
!1 + 4x2 !
−1 2 4
5 2 x≤ 25
−2 −2 −7

x ∈ Z2⊕

0 1 2 3 4 5

A folytonos relaxált megoldása x = (3.5, 3.75).


Példa

0 1 2 3 4 5

A feladat kettéosztása x1 ≤ 3 és x1 ≥ 4 részfeladatokra.


Példa

0 1 2 3 4 5

A zöld feladat megoldása x = (3, 3.5). x2 -n szétválasztunk.


Példa

0 1 2 3 4 5

A zöld alsó feladat megoldása x = (2, 3), cT x = 10, a felső feladat infízibilis.
Példa

0 1 2 3 4 5

A piros feladat megoldása x = (4, 2.5), cT x = 6. Itt nem lehet 10-nél jobb
egészértékű megoldás, felesleges szétválasztani.
Példa: korlátozás és szétválasztás megoldás fája (B&B-tree)

x = (3.5, 3.75)
cT x = 11.5

x1 ≤ 3 x1 ≥ 4

x = (3, 3.5) x = (4, 2.5)


cT x = 11 cT x = 6

x2 ≤ 3 x2 ≥ 4

x = (2, 3)
inf.
cT x = 10
Algoritmus: korlátozás és szétválasztás (max feladatra)

0. L = {eredeti feladat}, z = −∞
1. Ha L = ∅, akkor készen vagyunk. Egyébként válasszunk egy L ∈ L
feladatot, töröljük L-ből.
2. Oldjuk meg az L feladat folytonos relaxáltját.
Ha nincs megengedett megoldása, menjünk az 1. lépésre,
különben legyen xL az optimális megoldás.
3. Ha cT xL < z, akkor menjünk az 1. lépésre.
4. Ha xL ∈ Zn és cT xL > z,
akkor legyen z = cT xL és xOPT = xL . Menjünk az 1. lépésre.
5. Ha xL ̸∈ Zn és cT xL ≥ z,
akkor válasszunk egy i indexet, melyre xiL ̸∈ Z,
legyen L1 = L ∪ {xi ≤ ⌊xiL ⌋} és L2 = L ∪ {xi ≥ ⌊xiL ⌋ + 1}
L = L ∪ {L1 , L2 }.
Menjünk az 1. lépésre.
Algoritmus – megjegyzések

A korlátozás és szétválasztás technika sokkal általánosabb környezetben


is működik (például nemlineáris programozás esetén is használatos).
Ha vegyes egészértékű programozási feladatunk van, akkor
természetesen csak az egész változókkal foglalkozunk.
Már az algoritmus elején is adhatunk jobb alsó korlátot: például
z = tetsz. megengedett egész megoldás célfüggvényértéke.
Jobb induló alsó korlát ; csökkentheti a megvizsgálandó feladatok
számát.
Az előző algoritmusban csak xi ≤ (≥)k típusú feltételeket veszünk az
eredeti feladathoz. Így egy részfeladatot leír az éppen aktív alsó és felső
korlátok vektora (L = {l, u}), vagyis a részfeladatok tárolása nem
igényel sok helyet.
Algoritmus – szabadsági fokok

Két szabad választás van az algoritmusban:


A részfeladat kiválasztása L-ből.
- LIFO
- folytonos célfüggvény
- kerekített célfüggvény
- ...
A nemegész változó indexének kiválasztása.
- törtrész nagysága
- ci -t is figyelembe véve
- ...
Egészértékű programozás
Hátizsák feladat
Bevezetés: példa - fókák etetése

Abacus versenyfeladat 3. osztályosoknak:


A fókák gondozója az alábbi nyolc láda közül választhat, amikor etetni készül
a fókákat. A ládák sorban 3kg; 14kg; 18kg; 22kg; 27kg; 32kg; 36kg és 60kg
tömegű halat tartalmaznak. A gondozó a legkevesebb darabot szeretné
kivinni az etetéshez úgy, hogy pontosan 80kg halat vigyen az állatoknak.
Melyik ládákat vigye ehhez ki?

/Lurkó-logika, Rovatvezető: Sinkáné Papp Mária/


Bevezetés: hátizsák feladat

Az xi változó jelentése, hogy az i. ládát a gondozó kiviszi-e az etetéshez


vagy sem, ezért xi ∈ {0, 1}.

3x1 + 14x2 + 18x3 + 22x4 + 27x5 + 32x6 + 36x7 + 60x8 = 80


x1 , x2 , x3 , x4 , x5 , x6 , x7 , x8 ∈ {0, 1}
min x1 + x2 + x3 + x4 + x5 + x6 + x7 + x8

Hátizsák feladat.
max cT x


aT x ≤ β
x ∈ {0, 1}n

Általában feltesszük, hogy a > 0, β > 0 egészek, és c ≥ 0.


Hátizsák feladat: leszámlálási módszer

Próbáljuk végig az összes lehetséges választást?


Hátizsák feladat: leszámlálási módszer

Próbáljuk végig az összes lehetséges választást? NE


Hátizsák feladat: leszámlálási módszer

Próbáljuk végig az összes lehetséges választást? NE

Miért? Mert exponenciálisan sok van:


ha n tárgyunk (jelen esetben ládánk) van,
akkor 2n lehetőséget kell megvizsgálni.
Hátizsák feladat: leszámlálási módszer

Próbáljuk végig az összes lehetséges választást? NE

Miért? Mert exponenciálisan sok van:


ha n tárgyunk (jelen esetben ládánk) van,
akkor 2n lehetőséget kell megvizsgálni.

Ezt már a szimplex algoritmusnál is láttuk, hogy viszonylag kis n esetén


sem jöhet szóba, pl.:

2100 = 1625 ≫ 1025 = 10.000.000.000.000.000.000.000.000


Hátizsák feladat: relaxált lineáris programozási feladat
LP relaxált: elhagyjuk az egészértékűségi megkötést, azaz

max cT x max cT x
aT x ≤ β ; aT x ≤ β
x ∈ {0, 1}n 0≤x≤e
Hátizsák feladat: relaxált lineáris programozási feladat
LP relaxált: elhagyjuk az egészértékűségi megkötést, azaz

max cT x max cT x
aT x ≤ β ; aT x ≤ β
x ∈ {0, 1}n 0≤x≤e

LP relaxált megoldása:
1 A tárgyakat a relatív hasznosságuk szerint rendezzük sorba, azaz

c1 /a1 ≥ c2 /a2 ≥ · · · ≥ cn /an .

2 Legyen x1 = x2 = · · · = xk−1 = 1 mindaddig, amíg nem sértjük meg a


feltételt:
δ = a1 x1 + · · · + ak−1 xk−1 ≤ β.
Majd xk = (β − δ)/ak és
xk+1 = · · · = xn = 0.
Hátizsák feladat: LP relaxált – példa
max 8x1 + 11x2 + 6x3 + 4x4
5x1 + 7x2 + 4x3 + 3x4 ≤ 14
0 ≤ x1 , x2 , x3 , x4 ≤ 1
A könnyebbség kedvéért a változók itt már a megfelelő sorrendben vannak:
8
5
≥ 11
7
≥ 64 ≥ 34 =⇒ A megoldás: x1 = x2 = 1, x3 = 1/2, x4 = 0.
Hátizsák feladat: LP relaxált – példa
max 8x1 + 11x2 + 6x3 + 4x4
5x1 + 7x2 + 4x3 + 3x4 ≤ 14
0 ≤ x1 , x2 , x3 , x4 ≤ 1
A könnyebbség kedvéért a változók itt már a megfelelő sorrendben vannak:
8
5
≥ 11
7
≥ 64 ≥ 34 =⇒ A megoldás: x1 = x2 = 1, x3 = 1/2, x4 = 0.

Miért optimális ez a megoldás?


Vezessük be a következő változókat: y1 = 5x1 , y2 = 7x2 , y3 = 4x3 , y4 = 3x4 ,
ekkor a feladat:
max 85 y1 + 11 y + 64 y3 + 43 y4
7 2
y1 + y2 + y3 + y4 ≤ 14
0 ≤ y1 ≤ 5
0 ≤ y2 ≤ 7
0 ≤ y3 ≤ 4
0 ≤ y4 ≤ 3
Hátizsák feladat: LP relaxált – példa
max 8x1 + 11x2 + 6x3 + 4x4
5x1 + 7x2 + 4x3 + 3x4 ≤ 14
0 ≤ x1 , x2 , x3 , x4 ≤ 1
A könnyebbség kedvéért a változók itt már a megfelelő sorrendben vannak:
8
5
≥ 11
7
≥ 64 ≥ 34 =⇒ A megoldás: x1 = x2 = 1, x3 = 1/2, x4 = 0.

Miért optimális ez a megoldás?


Vezessük be a következő változókat: y1 = 5x1 , y2 = 7x2 , y3 = 4x3 , y4 = 3x4 ,
ekkor a feladat:
max 85 y1 + 11 y + 64 y3 + 43 y4
7 2
y1 + y2 + y3 + y4 ≤ 14
0 ≤ y1 ≤ 5
0 ≤ y2 ≤ 7
0 ≤ y3 ≤ 4
0 ≤ y4 ≤ 3

Itt minden tárgy súlya azonos, így a legértékesebből veszünk annyit, amennyi
rendelkezésre áll, majd a második legértékesebből, stb., amíg van kapacitásunk.
Jól látszik, hogy az optimális megoldás: y1 = 5, y2 = 7, y3 = 2, y4 = 0, ami
megfelel az eredeti feladatnál meghatározott optimális megoldásnak.
Hátizsák feladat: egészértékű megenegedett megoldás

LP relaxált megoldásának kerekítése: x = (1, 1, 1/2, 0)T


- felfelé kerekítés: nemmegengedett megoldást ad (kapacitás korlát miatt)
- lefelé kerekítés: x = (1, 1, 0, 0)T – megengedett egészértékű megoldás
DE: ez ált. nem optimális megoldás!

LP opt. megoldásának célfüggvényértéke felső korlátot, míg egy megengedett


egészértékű megoldás célfüggvényértéke alsó korlátot ad az eredeti feladat
optimum értékére (OPT):

19 ≤ OPT ≤ 22
Hátizsák feladat: egészértékű megenegedett megoldás

LP relaxált megoldásának kerekítése: x = (1, 1, 1/2, 0)T


- felfelé kerekítés: nemmegengedett megoldást ad (kapacitás korlát miatt)
- lefelé kerekítés: x = (1, 1, 0, 0)T – megengedett egészértékű megoldás
DE: ez ált. nem optimális megoldás!

LP opt. megoldásának célfüggvényértéke felső korlátot, míg egy megengedett


egészértékű megoldás célfüggvényértéke alsó korlátot ad az eredeti feladat
optimum értékére (OPT):

19 ≤ OPT ≤ 22

De hogyan találunk egy optimális egészértékű megoldást?


Hátizsák feladat: korlátozás és szétválasztás

Ha az LP relaxált optimális megoldása nem egész, akkor


az egyetlen nem egész változó szerint kettéosztjuk a feladatot:
xk = 0, ill. xk = 1 feltétel hozzávételével
az újonnan kapott LP feladatokat hasonlóan oldjuk meg, mint az elsőt
ha a kapott célfüggvényérték kisebb, mint a jelenlegi alsó korlátunk,
akkor ezt a feladatot eldobjuk
ha egészértékű megoldást találunk és a célfüggvényértéke nagyobb, mint
a jelenlegi alsó korlát, akkor erre frissítjük azt.

Ezt az eljárást folytatva egy keresési fát (B&B fa) építünk fel.
Korlátozás és szétválasztás: Példa – első lépés

max 8x1 + 11x2 + 6x3 + 4x4 Optimális LP megoldás: x = (1, 1, 1/2, 0)


5x1 + 7x2 + 4x3 + 3x4 ≤ 14 Kerekített egész megoldás: x = (1, 1, 0, 0)
0 ≤ x1 , x2 , x3 , x4 ≤ 1 Optimum értékre alsó korlát: z = 19

x = (1, 1, 1/2, 0)
cT x = 22

x3 = 0 x3 = 1

x = (1, 1, 0, 2/3) x = (1, 5/7, 1, 0)


cT x = 21 + 2/3 cT x = 21 + 6/7
Korlátozás és szétválasztás: Példa – első lépés

max 8x1 + 11x2 + 6x3 + 4x4 Optimális LP megoldás: x = (1, 1, 1/2, 0)


5x1 + 7x2 + 4x3 + 3x4 ≤ 14 Kerekített egész megoldás: x = (1, 1, 0, 0)
0 ≤ x1 , x2 , x3 , x4 ≤ 1 Optimum értékre alsó korlát: z = 19

x = (1, 1, 1/2, 0)
cT x = 22

x3 = 0 x3 = 1

x = (1, 1, 0, 2/3) x = (1, 5/7, 1, 0)


cT x = 21 + 2/3 cT x = 21 + 6/7

Melyik feladatot vágjuk először ketté?


Talán érdemes a nagyobb célfüggvényértékűt, hátha közben az alsó korlát megnő
annyira, hogy a másik feladatot eldobhatjuk.
Korlátozás és szétválasztás: második lépés
max 8x1 + 11x2 + 6x3 + 4x4
5x1 + 7x2 + 4x3 + 3x4 ≤ 14
0 ≤ x1 , x2 , x3 , x4 ≤ 1
x = (1, 1, 1/2, 0)
cT x = 22

x3 = 0 x3 = 1

x = (1, 1, 0, 2/3) x = (1, 5/7, 1, 0)


cT x = 21 + 2/3 cT x = 21 + 6/7

x2 = 0 x2 = 1

x = (1, 0, 1, 1) x = (3/5, 1, 1, 0)
cT x = 18 cT x = 21 + 4/5
Korlátozás és szétválasztás: harmadik lépés
max 8x1 + 11x2 + 6x3 + 4x4
5x1 + 7x2 + 4x3 + 3x4 ≤ 14
0 ≤ x1 , x2 , x3 , x4 ≤ 1
x = (1, 1, 1/2, 0)
cT x = 22

x3 = 0 x3 = 1

x = (1, 1, 0, 2/3) x = (1, 5/7, 1, 0)


cT x = 21 + 2/3 cT x = 21 + 6/7

x2 = 0 x2 = 1

x = (1, 0, 1, 1) x = (3/5, 1, 1, 0)
cT x = 18 cT x = 21 + 4/5

x1 = 0 x1 = 1

x = (0, 1, 1, 1) x = (1, 1, 1, ?)
cT x = 21 nem megengedett
Korlátozás és szétválasztás módszere
Adott: egy egészértékű programozási feladat
1 Megoldjuk az LP relaxáltját.
ha egész a megoldás ; STOP: optimális megoldás
ha tört a megoldás, akkor elkészítünk egy egy csúcsból álló B&B fát,
melynek levele aktív.
2 Kiválasztjuk a B&B fa egy aktív levelét.
Korlátozunk és szétválasztunk ezen a feladaton. Ha az új levél
- nem megengedett feladat, akkor lezárjuk.
- egész megoldást ad, akkor lezárjuk és
ha jobb alsó korlátot ad az optimum értékre, mint a jelenlegi,
akkor erre frissítjük az alsó korlátot.
- tört megoldást ad és az optimum érték kisebb, mint az alsó korlát,
akkor lezárjuk, különben aktív levél lesz.
3 Ha már nincs aktív levelünk ; STOP: a legjobb egész levél adja az
optimális megoldást.

Rossz hír: nagyon sok elágazás lehet a B&B fában.


Jó hír: a gyakorlatban általában nem ez történik. (Példánkban csak 3 volt.)
Példa: fókák etetése (újra)

Térjünk vissza a kiindulási feladatunkhoz:

3x1 + 14x2 + 18x3 + 22x4 + 27x5 + 32x6 + 36x7 + 60x8 = 80


x1 , x2 , x3 , x4 , x5 , x6 , x7 , x8 ∈ {0, 1}
min x1 + x2 + x3 + x4 + x5 + x6 + x7 + x8

Két különbség van az előző példához képest:


minimalizálunk és egyenlőség feltételünk van.

Minimalizálási feladat, ezért a hátizsák feladatot úgy kellene felépíteni, hogy


a
c1 c2 c8
≤ ≤ ... ≤
a1 a2 a8
teljesüljön. Igaz ez az esetünkben?
Példa: fókák etetése (változók átrendezése)

min x1 + x2 + x3 + x4 + x5 + x6 + x7 + x8
60x1 + 36x2 + 32x3 + 27x4 + 22x5 + 18x6 + 14x7 + 3x8 = 80
x1 , x2 , x3 , x4 , x5 , x6 , x7 , x8 ∈ {0, 1}

Folytonos, relaxált LP optimális megoldása:


 
20
x0 = 1, , 0, 0, 0, 0, 0, 0 ,
36

és a célfüggvényértéke
8
X 5
z0 = xi = 1 ,
i=1
9

amelyik alsó korlát a hátizsák feladat (egészértékű lineáris programozási


feladat) optimális megoldására.
Fókák etetése: megengedett megoldás keresése

min x1 + x2 + x3 + x4 + x5 + x6 + x7 + x8
60x1 + 36x2 + 32x3 + 27x4 + 22x5 + 18x6 + 14x7 + 3x8 = 80
x1 , x2 , x3 , x4 , x5 , x6 , x7 , x8 ∈ {0, 1}

 
20
x0 = 1, , 0, 0, 0, 0, 0, 0 , és a kerekített megoldások:
36
x0′ = (1, 0, 0, 0, 0, 0, 0, 0), illetve x0′′ = (1, 1, 0, 0, 0, 0, 0, 0).
Könnyen belátható, hogy sem x0′ , sem pedig x0′′ nem megengedett
megoldásai a feladatnak, mert nem teljesítik az affin lineáris egyenletet.
Tehát egyenlőséges feltétel mellett a kerekítési módszer nem segít abban,
hogy megengedett megoldást állítsunk elő. Ennek a következtében korlátot
(minimalizálási feladat esetén felsőkorlátot) sem tudtunk adni a hátizsák
feladat optimális értékére.
Fókák etetése: felsőkorlát keresése

min x1 + x2 + x3 + x4 + x5 + x6 + x7 + x8
60x1 + 36x2 + 32x3 + 27x4 + 22x5 + 18x6 + 14x7 + 3x8 = 80
x1 , x2 , x3 , x4 , x5 , x6 , x7 , x8 ∈ {0, 1}

Triviális (de nem megengedett) felsőkorlát: 8 (minden ládát kiviszi a


gondozó az etetéshez). Ennél jobb korlátot kapunk, ha a célfüggvény
maximumát meghatározzuk a relaxált LP feladaton:
 
23 23
xf = 0, 0, 0, , 1, 1, 1, 1 és zf = 4
27 27

Tehát a gondozónak 2, 3 vagy 4 ládát kell kivinnie, ha a hátizsák feladatnak


egyáltalán van megoldása.
Az összes lehetséges eset: 154 darab 8-dimenziós bináris vektor
megengedett- ségét kell megvizsgálnunk. Ügyesen ez a szám tovább
csökkenthető. (Ez lenne az elvárt megoldás a gyerekektől az ABACUS
folyóirat szerint.)
Fókák etetése: felsőkorlát keresése

min x1 + x2 + x3 + x4 + x5 + x6 + x7 + x8
60x1 + 36x2 + 32x3 + 27x4 + 22x5 + 18x6 + 14x7 + 3x8 = 80
x1 , x2 , x3 , x4 , x5 , x6 , x7 , x8 ∈ {0, 1}

Tudjuk, hogyha van megoldása a hátizsák feladatnak, akkor

2 ≤ zopt ≤ 4.

Alkalmazzuk a korlátozás és szétválasztás módszerét további


meggondolásokkal együtt.
Első megfigyelés: x1 = 0.
Valóban, ugyanis ha x1 = 1, akkor x2 , x3 , x4 , x5 a kapacitáskorlát miatt 0
kell legyen. De 20 nem állítható elő a 18, 14, 3 számok összegeként.

Tehát a feladat méretét eggyel csökkenthetjük.


Fókák etetése: korlátozás és szétválasztás
A redukált feladat LP relaxációja:
LPr
12
(1, 1,27
, 0, 0, 0, 0)
z = 2.44

x4 = 0 x4 = 1

LP0 LP1
12 17
(1, 1, 0, 22
, 0, 0, 0) (1, 32
, 1, 0, 0, 0, 0)
z = 2.55 z = 2.53

x5 = 0 x5 = 1 x3 = 0 x3 = 1

LP00 LP01 LP10 LP11


12 22 17
(1, 1, 0, 0,
18
, 0, 0) (1, 32
, 0, 1, 0, 0, 0) (1, 0, 1,
22
, 0, 0, 0) ( 21
36
, 1, 1, 0, 0, 0, 0)
z = 2.67 z = 2.69 z = 2.77 z = 2.58
Fókák etetése: 1. iteráció

(36, 32, 27, 22, 18, 14, 3 | 80)


LPr
12
(1, 1,27
, 0, 0, 0, 0)
z = 2.44

x4 = 0 x4 = 1

LP0 LP1
12 17
(1, 1, 0, 22
, 0, 0, 0) (1, 32
, 1, 0, 0, 0, 0)
z = 2.55 z = 2.53

x5 = 0 x5 = 1 x3 = 0 x3 = 1

LP00 LP01 LP10 LP11


12 22 17
(1, 1, 0, 0,18
, 0, 0) (1, 32
, 0, 1, 0, 0, 0) (1, 0, 1,
22
, 0, 0, 0) ( 21
36
, 1, 1, 0, 0, 0, 0)
z = 2.67 z = 2.69 z = 2.77 z = 2.58

Az optimum értéke az LP0 és LP1 feladatoknak nagyobb mint LPr -nek. Jelenleg
2.53 ≤ zopt ≤ 4 és L = {LP0 , LP1 }. Eddig 3 LP feladatot oldottunk meg.
Fókák etetése: 2. iteráció

(36, 32, 27, 22, 18, 14, 3 | 80)


LPr
12
(1, 1,27
, 0, 0, 0, 0)
z = 2.44

x4 = 0 x4 = 1

LP0 LP1
12 17
(1, 1, 0, 22
, 0, 0, 0) (1, 32
, 1, 0, 0, 0, 0)
z = 2.55 z = 2.53

x5 = 0 x5 = 1 x3 = 0 x3 = 1

LP00 LP01 LP10 LP11


12 22 17
(1, 1, 0, 0,18
, 0, 0) (1, 32
, 0, 1, 0, 0, 0) (1, 0, 1,
22
, 0, 0, 0) ( 21
36
, 1, 1, 0, 0, 0, 0)
z = 2.67 z = 2.69 z = 2.77 z = 2.58

helyet
Ekkor 2.55 ≤ zopt ≤ 4 és L = {LP0 , LP10 , LP11 }.
Fókák etetése: 3. iteráció

(36, 32, 27, 22, 18, 14, 3 | 80)


LPr
12
(1, 1,27
, 0, 0, 0, 0)
z = 2.44

x4 = 0 x4 = 1

LP0 LP1
12 17
(1, 1, 0, 22 , 0, 0, 0) (1, 32
, 1, 0, 0, 0, 0)
z = 2.55 z = 2.53

x5 = 0 x5 = 1 x3 = 0 x3 = 1

LP00 LP01 LP10 LP11


12 22 17
(1, 1, 0, 0,18
, 0, 0) (1, 32
, 0, 1, 0, 0, 0) (1, 0, 1,
22
, 0, 0, 0) ( 21
36
, 1, 1, 0, 0, 0, 0)
z = 2.67 z = 2.69 z = 2.77 z = 2.58

helyet
Ekkor 2.58 ≤ zopt ≤ 4 és L = {LP00 , LP01 , LP10 , LP11 }.
Fókák etetése: korlátozás és szétválasztás LP11 esetén

(36, 32, 27, 22, 18, 14, 3 | 80)


LP11
( 21
36
, 1, 1, 0, 0, 0, 0)
z = 2.58

x2 = 0 x2 = 1

LP110
LP111
(0, 1, 1, 21 , 0, 0, 0)
22 nem megeng.
z = 2.95

x5 = 0 x5 = 1

LP1100
LP1101
3
(0, 1, 1, 0, 1, 14 , 0)
nem megeng.
z = 3.21

(0, 1, 1, 0, 1, 0, 1)
Fókák etetése: korlátozás és szétválasztás LP00 esetén

(36, 32, 27, 22, 18, 14, 3 | 80)


LP00
(1, 1, 0, 0, 12
18
, 0, 0)
z = 2.67

x6 = 0 x6 = 1

LP000 LP001
12 26
(1, 1, 0, 0, 0, 14
, 0) (1, 32
, 0, 0, 1, 0, 0)
z = 2.86 z = 2.81

x7 = 0 x7 = 1 x3 = 0 x3 = 1

LP0001 LP0011
LP0000 LP0010
30
(1, , 0, 0, 0, 1, 0) ( 30 , 1, 0, 0, 1, 0, 0)
nem megeng. 32 nem megeng. 36
z = 2.94 z = 2.83

nem megeng. nem megeng.


36, 32, 3 ; 66 36, 14, 3 ; 30
Fókák etetése: korlátozás és szétválasztás LP01 esetén

(36, 32, 27, 22, 18, 14, 3 | 80)


LP01
22
(1, 32
, 0, 1, 0, 0, 0)
z = 2.69

x3 = 0 x3 = 1

LP010 LP011
4
(1, 0, 0, 1, 1, 14
, 0) ( 26
36
, 1, 0, 1, 0, 0, 0)
z = 3.29 z = 2.72

x7 = 0 x7 = 1 x2 = 0 x2 = 1

LP0101 LP0110
LP0100 LP0111
8 8
(1, 0, 0, 1, , 1, 0) (0, 1, 0, 1, 1, 14 , 0)
nem megeng. 18 nem megeng.
z = 3.44 z = 2.83

nem megeng. nem megeng.


36, 18, 3 ; 44 18, 14, 3 ; 26
Fókák etetése: korlátozás és szétválasztás LP10 esetén

(36, 32, 27, 22, 18, 14, 3 | 80)


LP10
17
(1, 0, 1, 22 , 0, 0, 0)
z = 2.77

x5 = 0 x5 = 1

LP100 LP101
17
(1, 0, 1, 0, 18
, 0, 0) ( 31
36
, 0, 1, 1, 0, 0, 0)
z = 2.94 z = 2.86

x6 = 0 x6 = 1 x2 = 0 x2 = 1

LP1001 LP1010
LP1011
(1, 0, 1, 0, 0, 1, 1) 35
( 36 , 0, 1, 0, 1, 0, 0) 13
(0, 0, 1, 1, 1, 14 , 0)
nem megeng.
z = 2.97 z = 3.93

nem megeng. nem megeng.


36, 14, 3 ; 35 18, 14, 3 ; 31
Fókák etetése: megoldás
Két optimális egész megoldás van
(ezeken kívül nincs is megengedett egész megoldás):
Az állatgondozónak a
32, 27, 18 és 3 kg vagy a 36, 27, 14 és 3 kg
súlyú ládákat kell kivinnie.

Összegzés:
Max helyett min – nem okoz gondot.
“=” helyett “≤” – számos nem megengedett egészértékű részfeladat.
Nem tudtunk ágakat levágni az alsó korlát segítségével.
(oka: minden egész megengedett megoldás optimális is)
Megfelelő sorrendben vizsgálva az eseteket, rengeteg részfeladatot meg
se kell néznünk.
Megengedettségi feladat megoldására is alkalmas módszer.
Egészértékű programozás
Dinamikus programozás
Dinamikus programozás – hátizsák feladat
Részfeladatok megoldásán keresztül oldjuk meg.
 
max c1 x1 + · · · + cn xn  c(m, δ) := max c1 x1 + · · · + cm xm 
a1 x1 + · · · + an xn ≤ β ; a1 x1 + · · · + am xm ≤ δ H(m, δ)
x1 , . . . , xn ≥ 0, egész x1 , . . . , xm ≥ 0, egész
 
ahol 1 ≤ m ≤ n és 1 ≤ δ ≤ β.
Dinamikus programozás – hátizsák feladat
Részfeladatok megoldásán keresztül oldjuk meg.
 
max c1 x1 + · · · + cn xn  c(m, δ) := max c1 x1 + · · · + cm xm 
a1 x1 + · · · + an xn ≤ β ; a1 x1 + · · · + am xm ≤ δ H(m, δ)
x1 , . . . , xn ≥ 0, egész x1 , . . . , xm ≥ 0, egész
 
ahol 1 ≤ m ≤ n és 1 ≤ δ ≤ β.

Tétel. Ha (x1∗ , . . . , xm∗ ) optimális megoldása H(m, δ)-nak és xm∗ = 0, akkor



(x1∗ , . . . , xm−1 ) opt. megoldása H(m − 1, δ)-nak és c(m, δ) = c(m − 1, δ).

Bizonyítás. A megengedettség könnyen látható.


Optimalitás: Tfh. létezik H(m − 1, δ)-nak jobb megoldása: (x̃1 , . . . , x̃m−1 ). Ekkor
(x̃1 , . . . , x̃m−1 , 0) a H(m, δ) megengedett megoldása és célfüggvényértéke nagyobb,
mint x∗ megoldásé, ami ellentmondás.
Dinamikus programozás – hátizsák feladat
Részfeladatok megoldásán keresztül oldjuk meg.
 
max c1 x1 + · · · + cn xn  c(m, δ) := max c1 x1 + · · · + cm xm 
a1 x1 + · · · + an xn ≤ β ; a1 x1 + · · · + am xm ≤ δ H(m, δ)
x1 , . . . , xn ≥ 0, egész x1 , . . . , xm ≥ 0, egész
 
ahol 1 ≤ m ≤ n és 1 ≤ δ ≤ β.

Tétel. Ha (x1∗ , . . . , xm∗ ) optimális megoldása H(m, δ)-nak és xm∗ = 0, akkor



(x1∗ , . . . , xm−1 ) opt. megoldása H(m − 1, δ)-nak és c(m, δ) = c(m − 1, δ).

Bizonyítás. A megengedettség könnyen látható.


Optimalitás: Tfh. létezik H(m − 1, δ)-nak jobb megoldása: (x̃1 , . . . , x̃m−1 ). Ekkor
(x̃1 , . . . , x̃m−1 , 0) a H(m, δ) megengedett megoldása és célfüggvényértéke nagyobb,
mint x∗ megoldásé, ami ellentmondás.

Tétel. Ha (x1∗ , . . . , xm∗ ) optimális megoldása H(m, δ)-nak és xm∗ > 0, akkor
(x1∗ , . . . , xm−1

, xm∗ − 1) opt. megoldása H(m, δ − am )-nek és
c(m, δ) = c(m, δ − am ) + cm .

Bizonyítás. Hasonlóan.
Dinamikus programozás – hátizsák feladat folyt.
Tehát
n o
c(m, δ) = max c(m − 1, δ), c(m, δ − am ) + cm
Dinamikus programozás – hátizsák feladat folyt.
Tehát
n o
c(m, δ) = max c(m − 1, δ), c(m, δ − am ) + cm

c(m, δ) táblát oszlopfolytonosan töltjük ki:


m
0

δ mar
ismert
Dinamikus programozás – hátizsák feladat – példa

n o
c(m, δ) = max c(m − 1, δ), c(m, δ − am ) + cm

0 1 2 3
max 3x1 + 4x2 + 9x3 
 0 0 0 0 0
1 0 0 0 0
2x1 + 3x2 + 5x3 ≤ 9
2 0 3↑ 3← 3←
x1 , x2 , x3 ≥ 0, egész

3 0 3↑ 4↑ 4←
4 0 6↑ 6← 6←
5 0 6↑ 7↑ 9↑
Optimális megoldás: 6 0 9↑ 9← 9←↑
7 0 9↑ 10 ↑ 12 ↑
x∗ = (2, 0, 1)T 8 0 12 ↑ 12 ← 13 ↑
cT x∗ = 15. 9 0 12 ↑ 13 ↑ 15 ↑

You might also like