Cím: Lineáris programozás II.
Szerző(k):  Prékopa András 
Füzet: 1979/május, 193 - 202. oldal  PDF  |  MathML 
Témakör(ök): Szakmai cikkek

A szöveg csak Firefox böngészőben jelenik meg helyesen. Használja a fenti PDF file-ra mutató link-et a letöltésre.

II. rész

 

Az előző részben ismertettünk néhány feladatot a lineáris programozás köréből. Továbbá vázoltuk a Dantzig-féle megoldási módszert. Most a szendvicses példa (lásd I. rész 147. oldal) megoldását mutatjuk be. Az eredeti feladat négy egyenlőtlenséges feltételéhez segédváltozókat vezetünk be úgy, hogy a négy feltétel mindegyikében egyenlőség álljon fenn. Az új feladat a következő:
 

maximalizálandó(x1+x2+0x3+0x4+0x5+0x6),feltéve, hogy2x1+x2+x3=50,(6)2x1+3x2+x4=80,3x1+x5=60,2x2+x6=40,
x10,x20,x30,x40,x50,x60.

E feladatnak nyilván akkor és csak akkor van megengedett megoldása és véges optimuma, ha az eredeti feladatnak, és az optimumértékek (a célfüggvények értékei az optimális megoldásokon) egyenlők. Segédváltozóinknak "fizikai'' jelentést is tulajdoníthatunk. Ezek megadják a megmaradó vaj, sonka, franciasaláta és sajt mennyiségét. Segédváltozóink még abban is segítenek bennünket, hogy máris van egy kifejezett változó rendszerünk.
A (6) feladatot előbb az (5) feladatnak megfelelő alakra hozzuk:
 

maximalizálandó0-(-x1-x2+0x3+0x4+0x5+0x6)=z,feltéve, hogy50-(2x1+x2+x3)=0,(7)80-(2x1+3x2+x4)=0,60-(3x1+x5)=0,40-(2x2+x6)=0,
x10,x20,x30,x40,x50,x60.
Az ehhez tartozó tábla, majd a megoldási módszer alkalmazása révén adódó további táblák a következők:
x1x2x3x4x5x6z  0  -1  -1n0nM0MM0MM0Mx350211000x480230100x560   3
   
00010
x640020001

 
1. tábla

 

x1x2x3x4x5x6z  20  0  -1n0nM0MM1/3MM0Mx3100   1
10-2/30
x4400301-2/30x1201  0001/30x640020001

 
2. tábla

 

x1x2x3x4x5x6z  30  0  0M1M0M-1/3M0Mx2100110-2/30x41000-31   4/3
0
x1201  0001/30x62000-204/31

 
3. tábla

 

x1x2x3x4x5x6z  65/2M0MM0M1/41/4M0MM0Mx21501-1/21/200x515/200-9/43/410x135/2103/4-1/400x610001    -1    01
 
4. tábla

 

Az optimális megoldás a következő: x1=17.5, x2=15, x3=0, x4=0, x5=7.5, x6=10. Eszerint a vajat és a sonkát teljesen felhasználjuk, franciasalátából marad 7.5 dkg, sajtból pedig 10 dkg.
Vegyük észre, hogy az egymást követő táblák tetején mindig az összes változó szerepel ugyanabban a sorrendben, míg a bal oldalon a bejövő változó mindig a kimenő változó helyére kerül, a többi változó azonban helyben marad.
 

A lexikográfikus módszer
 

Az előző szakaszban tárgyalt megoldási módszer esetében nincs garanciánk arra, hogy véges sok lépéssel eljutunk az 1. vagy a 2. tételnek megfelelő állapothoz. Ismeretesek olyan példák, melyekben néhány lépés után visszajutunk ugyanazokhoz a bázisváltozókhoz, amelyekből kiindultunk. Azt mondjuk, hogy ekkor az eljárás ciklizál. A későbbiekben ismertetni fogjuk Beale [1] példáját, amely megmutatja, hogy a ciklizálás lehetséges, előbb azonban a ciklizálás elkerülésére vonatkozó módszert tárgyaljuk. Mint a bevezetőben említettük, a módszer lényegében Charnes-tól származik, ám annak egy elegánsabb változata.
A ciklizálásra akkor kerülhet sor, amikor a kimenő változó meghatározása nem egyértelmű, mert a megalkotott hányadosok minimuma több sor esetében is fellép. Ilyen esetben a következő táblában a bal oldalon álló oszlopban legalább egy zérus keletkezik. Az ezt követő táblában a bal felső sarokban álló elem biztosan változatlan marad és ha ez sorozatosan előfordul, fennáll a ciklizálás veszélye.
Mielőtt a módszert ismertetnénk, bevezetjük a lexikográfikusan pozitív (L-pozitív) rendezett szám n-es fogalmát. Minthogy n értéke a tárgyalás során mindig ismert lesz és a rendezett szám n-eseink egymás mellé egy sorban elhelyezett számokból állnak majd, elég lesz egyszerűen csak L-pozitív sorokról beszélni. Egy sort akkor nevezünk L-pozitívnak, ha az elemek között van zérustól különböző, és balról jobbra haladva az első nem zérus elem pozitív. Ilyen pl. az alábbi, öt elemből alkotott sor:
(0,0,2,-10,0),
viszont nem ilyen az alábbi:
(-2,100,0,1,4).
Ha két egyenlő számú elemből alkotott sor esetében az elsőből a másodikat elemenként levonva L-pozitív sort kapunk, akkor azt mondjuk, hogy az első lexikográfikusan nagyobb, mint a második. Például a
(-2,3,1,4,5)
sor lexikográfikusan nagyobb, mint az alábbi
(-2,2,8,5,-4),
ugyanis az elemenként vett különbség a
(0,1,-7,-1,9)
L-pozitív sort eredményezi.
Egy kifejezett alakú lineáris programozási feladathoz tartozó táblát lexikográfikusan pozitívnak (L-pozitívnak) nevezünk, ha annak második és ez alatti összes többi sora L-pozitív. Ebben a cikkben az eddig felírt valamennyi tábla L-pozitív.
A ciklizálás elkerülésére vonatkozó ún. lexikográfikus szabály (L-szabály) a bejövő változó ismeretében mindig egyértelműen dönt a bal szélső kimenő változó felől. A bejövő változóra vonatkozó szabály változatlan, tetszés szerint választhatunk egy negatív elemet a felső sorban, a bal szélső elemtől eltekintve. A kiválasztott elemnek megfelelő változó bejön. Ezután a táblában a most kiválasztott elem alatti pozitív (zérus nem lehet!) elemekkel rendre elosztjuk azokat a sorokat, amelyekben ezek a pozitív elemek állnak (vigyázzunk, a teljes sorokat kell osztani, a bal szélső elemek most nem hagyhatók el!), majd vesszük az így kapott sorok közül azt, amelyik a lexikográfikusan legkisebb. Az ennek a sornak megfelelő változó fog kimenni, ebben áll az L-szabály.
Az L-szabállyal kapcsolatban megemlítjük, hogy véges sok különböző, de ugyanannyi elemből álló sor között mindig van egy és csakis egy lexikográfikusan legkisebb, ami azt jelenti, hogy ezt a továbbiak akármelyikéből elemenként levonva, mindig L-pozitív sort kapunk. Ennek az állításnak a belátását az olvasóra bízzuk. A mi vizsgálatainkban csakis olyan tábla fordul elő, amelynek a második és ez alatti sorai páronként nem arányosak, ugyanis ha xi kifejezett változó, akkor abban a sorban, amely xi mellett van, található egy 1-es olyan helyen, hogy annak oszlopában minden egyéb elem zérussal egyenlő.
Az L-szabály alkalmazásakor megkívánjuk, hogy L-pozitív táblából induljunk ki. Ez könnyen elérhető, ha változóinkat átszámozzuk oly módon, hogy a bázisváltozók az elsők legyenek, tehát m számú bázisváltozó esetén éppen x1,...,xm legyenek azok. Ez esetben ugyanis a bal oldalon a bázisváltozók melletti számok közül ha egyesek zérussal egyenlők is, soraikban az első nem zérus elem (+1)-gyel lesz egyenlő, tehát a tábla L-pozitív lesz.
Könnyen belátható, hogy ha L-pozitív táblából indulunk ki és a kimenő változó meghatározására mindig az L-szabályt alkalmazzuk, akkor minden további tábla L-pozitív lesz, a legfelső sor pedig állandóan lexikográfikusan növekszik. Ezt nemsokára Beale példáján szemléltetjük, ahonnan az állítás általános érvénye világosan látszik majd. Most csupán leszögezzük, hogy a legfelső sor állandó L-növekedése miatt egyetlen bázisváltozó-rendszer sem térhet vissza (mert akkor a legfelső sor is visszatérne, ám egy sor nem lehet egyenlő egy nála lexikográfikusan nagyobb sorral), ahonnan következik, hogy véges sok lépés után az eljárás véget ér, vagy az 1., vagy a 2. tételnek megfelelő állapot elérésével. Ezt az eredményt tételszerűen is megfogalmazzuk az alábbi módon:
3. tétel. A lexikográfikus módszer véges sok lépéssel véget ér.
Most pedig bemutatjuk Beale példáját. Előbb a lexikográfikus módszert alkalmazzuk, hogy lássunk erre vonatkozó példát. Azután pedig megmutatjuk, hogy az eljárás ciklizálhat, amennyiben csupán az előző szakaszban ismertetett módszert alkalmazzuk. A lineáris programozási feladat (az általunk megkívánt alakban) a következő:
 

maximalizálandó0-(0x1+0x2+0x3-3/4x4+20x5-1/2x6+6x7)=z,feltéve, hogy0-(x1+1/4x4-8x5-x6+9x7)=0,0-(x2+1/2x4-12x5-1/2x6+3x7)=0,1-(x3+x6)=0,
x10,x20,x30,x40,x50,x60,x70.
Az ehhez a feladathoz tartozó tábla a következő:
 x1x2x3x4x5x6x7zn0n  000-3/420-1/26x101001/4-8-19x20010   1/2
-12-1/23
x310010    0  10

 
1. tábla
 

A felső sorban (-3/4)-et kiválasztva, alatta két helyen találunk pozitív számot, ezek: 1/4 és 1/2. Azt a sort, amelyikben 1/4 áll, végigosztjuk 1/4-del, azt a sort pedig, amelyikben 1/2 áll, végigosztjuk 1/2-del. Ilyenformán az alábbi sorokat kapjuk:
(0,4,0,0,1,-32,-4,36),(0,0,2,0,1,-24,-1,6).(8)
Minthogy a két sor közül az alsó lexikográfikusan kisebb, ezért x2 megy ki. Helyébe x4 jön be.
Lássuk most egy kicsit részletesebben, hogy miért növekszik a felső sor lexikográfikusan és miért lesz L-pozitív az új tábla? Az új felső sort úgy kapjuk meg, hogy a mostani felső sorból levonjuk x2 sorának a (-3/4)/(1/2) számmal elemenként vett szorzatát, azaz hozzáadjuk a felső sorhoz x2 sorának 3/2-szeresét. Minthogy x2 sora L-pozitív, ebből azonnal adódik, hogy a felső sort ezáltal lexikográfikusan megnöveltük.
A lexikográfikus növekedés abból adódik, hogy a negatív -3/4 áll a felső sorban a sarokelem felett. Ha a sarokelem oszlopában máshol negatív szám állna, akkor az új táblában ugyanezen megfontolás alapján a megfelelő sor lexikográfikusan megnőne, tehát az új táblában ez a sor L-pozitív maradna. Ez az eset most nem fordul elő, csak a teljesség kedvéért említjük.
Ha a sarokelem oszlopában valamelyik szám 0, akkor az a sor, amelyikben ez a 0 áll, nem változik. Eszerint ez a sor is L-pozitív marad. Esetünkben ilyen az x3 változó sora.
Az új táblázatban x4 sora oly módon kapható meg a régi táblabeli x2-höz tartozó sorból, hogy ezt 1/2-vel végigosztjuk. Az új sor tehát L-pozitív.
Végül ami x1 sorát illeti az új táblában, ez éppen az L-szabály alkalmazása miatt lesz L-pozitív. Ugyanis x1 új sora egyenlő az alábbival:
(0,1,0,0,1/4,-8,-1,9)-
 
(1/4)/(1/2)(0, 0, 1, 0, 1/2, -12, -1/2, 3)=
 
=(0, 1, 0, 0, 1/4, -8, -1, 9)-
 
-(1/2)(0, 0, 1, 0, 1/2, -12, -1/2, 3),
 


ez pedig L-pozitív, minthogy (8)-ban a felső és az alsó sor különbsége L-pozitív. (Amikor valamely sor zárójele elé egy számot írunk, ez azt jelenti, hogy a sor minden eleme ezzel a számmal végigszorzandó.) Ezek után a másik tábla a következő:
x1x2x3x4x5x6x7zn0nn0n3/2n0nn0n2-5/421/2x101-1/200-2-3/415/2x4002    01-24-1    6x3100    100   1
    
0

 
2. tábla
 

Vegyük észre, hogy a felső sor lexikográfikusan nagyobb, mint az 1. tábla felső sora. A 2. táblában az L-szabály nem jut szerephez, mert egyedül x6 jöhet be és egyedül x3 mehet ki. A harmadik és egyben optimális megoldást szolgáltató tábla így alakul:
x1 x2x3x4x5x6x7z5/4n0n3/25/4n0n2n0n21/2x13/41-1/23/40-2015/2x4102    1    1-2406x6100    1    0010
 
3. tábla
 


Az optimális megoldás tehát a következő: x1=3/4, x2=0, x3=0, x4=1, x5=0, x6=1, x7=0.
 

A ciklizálás lehetőségét az alábbi táblák sorozata mutatja:
x1x2x3x4x5x6x7zn0nn0nn0nn0n-3/420-1/26x10100   1/4
-8-19
x200101/2-12-1/23x310010    0  10

 
1. tábla
 

 x1x2x3x4x5x6  x7zn0n3n0nn0nn0n-4-7/233x404001-32-4    36x20-2100   4
3/2-15
x31001001    0

 
2. tábla
 

x1x2x3x4x5x6x7zn0n  11n0nn0nn0n-2    18    x40-128010   8
    
-84    
x50-1/21/40013/8 -15/4x31  001001     0    

 
3. tábla
 

x1  x2x3  x4x5x6x7zn0n-2  3n0n  1/4n0nn0n-3      x60-3/2  10  1/801-21/2   x50  1/16-1/80-3/6410   3/16
x31  3/2-11-1/80021/2   

 
4. tábla
 

x1  x2x3  x4x5x6x7zn0n-1  1n0n-1/2  16n0nn0nx60   2
-60-5/2  5610
x70   1/3-2/30-1/4  16/301x31-2   61   5/2-5600

 
5. tábla
 

x1  x2x3   x4 x5   x6x7zn0nn0n-2n0n-7/4 44   1/2n0nx101-30-5/4 28   1/20x700   1/3
0   1/6-4-1/61
x310   01   0   0   10

 
6. tábla
 

x1  x2x3   x4 x5   x6x7zn0nn0nn0nn0n-3/420-1/26x10100  1/4-8-19x20010  1/2-12-1/23x31001  0   0  10
 
7. tábla
 

 Nemrég napvilágot látott egy új szabály a ciklizálás elkerülésére, az angol Bland [2] dolgozatában. Eszerint ciklizálás akkor sem fordul elő, ha mind a bejövő, mind a kimenő változót az arra alkalmasak közül úgy választjuk, hogy indexük a lehető legkisebb legyen. Bland tárgyalásmódját nem ismertetjük, mert egyrészt bonyolultabb a miénknél, másrészt további előismereteket tételez fel
 

Induló bázisváltozók keresése
 

A szendvicskészítés példájában könnyű volt induló bázisváltozókat találni. A bevezetett segédváltozók megfeleltek e célra. Nem mindig van ilyen könnyű dolgunk. Ha a (6) feladatban a jobb oldalon akár csak egy szám is negatív volna, máris bajban volnánk, hiszen kikötöttük, hogy a nem bázisváltozókat zérussal egyenlővé téve, a bázisváltozók számára adódó értékek nemnegatívak legyenek.
 Az induló bázisváltozók keresésének általános módszere az ún. kétfázisú módszer. Olyan feladatból indulunk ki, amelyben a változók nemnegativitási feltételein kívül minden további feltétel egyenlőséges. Ilyen pl. az alábbi feladat:
 

maximalizálandó(x1+3x2+4x3+5x4)feltéve, hogy(x1+2x2+3x3+2x4=7(9)4x1+6x2+2x3+2x4=10,
x10,x20,x30,x40.

A kétfázisú módszer első fázisában önkényesen bevezetünk minden egyenlőséges feltételhez a bal oldalon egy további változót, ezeket mesterséges változóknak nevezzük. Ezután előírjuk, hogy ezek is nemnegatívak legyenek és megfogalmazzuk azt a feladatot, amely a mesterséges változók összegének minimalizálásában áll, vagy ami ugyanaz, maximalizálandó a mesterséges változók összegének (-1)-szerese. A fenti feladat esetében ily módon a következőkre jutunk:
 

maximalizálandó(-x5-x6),feltéve, hogyx1+2x2+3x3+2x4+x5=7(10)4x1+6x2+2x3+x4+x6=10,
x10,x20,x30,x40,x50,x60,
ahol x5 és x6 a mesterséges változók. E feladat megoldása:
 

x1 x2 x3 x4x5x6z-17  -5-8-5-300x57  123210x610  4   6
2101

 
1. tábla
 

x1x2x3x4 x5x6z-11/3  1/30-7/3-5/304/3x511/3  -1/30   7/3
5/31-1/3
x25/3  2/311/31/601/6

 
2. tábla
 

x1x2x3   x4 x5    x6z  00    00   01    1     x311/7  -1/701   5/73/7-1/7  x28/75/7 10-1/14-1/73/14
 
3. tábla
 

Optimális megoldáshoz és egyben új bázisváltozókhoz érkeztünk. A 3. tábla alapján a feladat egyenlőséges feltételeinek új, a korábbiakhoz egyenértékű alakja a következő:
11/7-(-1/7x1+x3+5/7x4+3/7x5-1/7x6)=0,(11)8/7-(5/7x1+x2-1/14x4-1/7x5+3/14x6)=0.
Ha itt x5 és x6 helyébe zérót helyettesítünk, akkor a (9) feladat egyenlőséges feltételével egyenértékű feltételeket kapunk, melyek kifejezettek az x2, x3 változókra nézve. Ezzel az első fázis véget ér, következik a második fázis. Ez abban áll, hogy a (11) feltételekből ily módon nyert feltételekhez hozzávesszük a nemnegativitási feltételeket, továbbá az eredeti célfüggvényt, és megoldjuk a feladatot. A második fázis feladatának alakja tehát:
 

maximalizálandó68/7-(4/7x1+0x2+0x3-33/14x4)=zfeltéve, hogy11/7-(-1/7x1+x3+5/7x4)=0,8/7-(5/7x1+x2-1/14x4)=0,
x10,x20,x30,x40.
A második fázis egy lépésben befejeződik, az optimális megoldás:
x1=0,x2=13/10,x3=0,x4=11/5.

Az eredeti változókat a mesterséges változókkal szemben "fizikai változóknak'' is szokás nevezni.
A kétfázisú módszerrel kapcsolatban még a következőket fontos tudni.
Ha az első fázis befejeződik és az optimumérték 0-tól különbözőnek adódik, akkor ez azt jelenti, hogy az eredeti feladatnak nincs megengedett megoldása.
Ha az első fázis végén az optimumérték 0-val egyenlő, de marad mesterséges változó a bázisváltozók között, akkor az utolsó táblában a bal oldali oszlopban a mesterséges változók melletti számok szükségszerűen 0-val egyenlők. Ilyenkor először is a bázison kívüli mesterséges változókat a feladatból egyszerűen elhagyjuk. A bázisban bennmaradt mesterséges változókat pedig megpróbáljuk egymás után fizikai változókra kicserélni. A csere után ezeket a mesterséges változókat is egyszerűen elhagyjuk majd. Ha pl. az első fázis végén a bázison kívüli x6, x7, x8 mesterséges változók elhagyása után az alábbi feltételekre jutottunk:
2x1+3x2+x3=6,-x1+5x2+x4=8,4x1-9x2+x5=9,x1-4x2+x9=0,
 

ahol x9 a bázisban bennmaradt mesterséges változó, akkor a legalsó sor segítségével elimináljuk pl. x1-et a felső három sorból. Ezáltal x9 kimegy a bázisból, x1 pedig bejön. Ilyen csere csak akkor nem volna lehetséges, ha az utolsó sorban x1 és x2 együtthatói zéróval lennének egyenlők. Képzeljük el, hogy ez következett be. Ekkor azt a konzekvenciát vonjuk le, hogy az eredeti, mesterséges változókkal még el nem látott feladatban az utolsó feltétel az első három feltétel alkalmas konstansszorosainak összegeként áll elő, vagyis az utolsó feltétel felesleges. Általában, ha az xr mesterséges változó nem távolítható el a bázisból egy fizikai változó behozatalával, akkor az eredeti feladatban felesleges az a feltétel, amelyhez az xr-et vezettük be. Az első fázis végén tehát a felesleges egyenlőségeket is felfedezzük.