Professional Documents
Culture Documents
Előadás
Előadás
12. előadás
E.-Nagy Marianna
Operációkutatás és Aktuáriustudományok Tanszék
max c T x
Ax ≤ b
x ≥0
x ∈ Zn
x ∈ Z2⊕
0 1 2 3 4 5
0 1 2 3 4 5
0 1 2 3 4 5
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
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
Hátizsák feladat.
max cT x
aT x ≤ β
x ∈ {0, 1}n
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
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
19 ≤ OPT ≤ 22
Hátizsák feladat: egészértékű megenegedett megoldás
19 ≤ OPT ≤ 22
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
x = (1, 1, 1/2, 0)
cT x = 22
x3 = 0 x3 = 1
x = (1, 1, 1/2, 0)
cT x = 22
x3 = 0 x3 = 1
x3 = 0 x3 = 1
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
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.
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}
és a célfüggvényértéke
8
X 5
z0 = xi = 1 ,
i=1
9
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}
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}
2 ≤ zopt ≤ 4.
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
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
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ó
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
helyet
Ekkor 2.55 ≤ zopt ≤ 4 és L = {LP0 , LP10 , LP11 }.
Fókák etetése: 3. iteráció
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
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
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
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
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
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
Ö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
∗
, 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
δ 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 ↑