Cím: Lineáris programozás
Szerző(k):  Prékopa András 
Füzet: 1998/január, 1 - 16. 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.

A lineáris programozás egy alkalmazott matematikai tudományág, amely a geometriára, az algebrára, a kombinatorikára, a numerikus módszerekre, a függvénytanra és a számítástechnikára támaszkodik. Egzakt matematikai megfogalmazása a következő.

 
 
A lineáris programozás feladata
 
 

Lineáris egyenlőtlenségekből és lineáris egyenlőségekből álló feltételeknek eleget tevő x1, ..., xn rendezett szám n-esek közül ki kell választanunk olyan rendezett szám n-est, amelyre egy előírt lineáris (első fokú) függvény a lehető legnagyobb, illetve a lehető legkisebb értéket veszi fel. Előfordulhat, hogy feltételeink ellentmondásosak, továbbá az is, hogy van ugyan a feltételeknek eleget tevő rendezett szám n-es, ám nincs véges nagyságú szélsőérték. E két esetben a gyakorlati feladatot rosszul fogalmaztuk meg. Ez a tény az esetek nagy részében nem dönthető el ránézéssel, hanem csak a megoldási módszer alkalmazása során tűnik ki. Ezért a feltételek összeférhetőségének és a véges szélsőérték létezésének az eldöntését is a lineáris programozás feladatához soroljuk.
 
 
Néhány lineáris programozásra vezető gyakorlati feladat
 
 

 
Szendvicskészítés. Egy társasági összejövetelre szendvicseket készítünk, mégpedig két fajtát. Ezek egy-egy darabja az alábbi összetételű:
 
 I. fajta   II. fajta  2 dkg vaj  1 dkg vaj  2 dkg sonka  3 dkg sonka  3 dkg franciasaláta  2 dkg sajt  1 szelet kenyér  1 szelet kenyér  
 

Kenyér van otthon bőven, ám a további összetevők mennyisége már korlátozott. Rendelkezésünkre áll:
 
50 dkg vaj 80 dkg sonka 60 dkg franciasaláta 40 dkg sajt 
 

Célunk az, hogy a lehető legtöbb szendvicset készítsük. Ha x1, illetve x2 jelöli az egyes szendvicsfajtákból készítendő mennyiséget, akkor feladatunk a következő:
(x1+x2),maximalizálandó2x1+3x250,feltéte, hogy2x1+3x280,3x1+3x260,2x240,x10,x20.

A feladat megoldását grafikusan a következő módon végezhetjük el. Az 1. ábrán a vonalkázott sokszög jelenti a sík azon pontjainak összességét, amelyek eleget tesznek a feladat feltételeinek. Ezek közül a legnagyobb x1+x2 összeget szolgáltató pontot a következő módon választhatjuk ki: egy egyenlőszárú derékszögű háromszög alakú vonalzót végigcsúsztatunk egy másik vonalzón, amely az x1 tengellyel egybeesik ‐ a 2. ábrának megfelelő módon ‐, majd megállunk akkor, amikor a vonalzó átfogójának és a vonalkázott sokszögnek még van közös pontja, de a vonalzó akármilyen kis továbbhaladása esetén ilyen közös pont már nincs. Esetünkben ez az eljárás egyetlen pontot eredményez, amely a
2x1+2x2=50,2x1+3x2=80
egyenesek metszéspontja. Innen adódik, hogy a legnagyobb x1+x2 összeget akkor kapjuk, amikor*A programozási nyelvekben elterjedt szokás szerint a számok tizedestört felírásában tizedespontot és nem tizedesvesszőt használunk. x1=17.5 és x2=15.
Az eredeti gyakorlati feladat megoldását csak közelítőleg kaptuk meg, hiszen 17.5 nem egész szám, fél szendvicset pedig nem készítünk. Van módszerünk arra is, hogy az x1, x2 ismeretlenekkel kapcsolatos fenti feltételeken kívül még ezekre az egész értékűség követelményét is előírva, megoldjuk a feladatot. Ezzel a bonyolultabb kérdéssel e helyen nem foglalkozunk. Megjegyezzük, hogy az egész értékűség természetesen nem minden lineáris programozási feladatban jogos követelmény, és még ha jogos is, elhanyagolhatjuk, ha nem tartjuk lényegesnek a meghatározandó darabszámok ily módon adódó csökkenését vagy túllépését.
Ha az eredeti feladattal kapcsolatban az egész értékűséget megkívánjuk, akkor ‐ amint az az előbbi grafikus módszerrel könnyen adódik ‐ három, ugyanazt a maximumot szolgáltató megoldást nyerünk. Ezek a következők:
x1=18,x1=17,x1=16,x2=14,x2=15,x2=16.

Optimális termelési terv készítése. Egy teherautókat gyártó vállalat egyéves termelési tervet készít. Meg kell határozni, hogy ötféle autótípus mindegyikéből mennyit gyártsanak egy év folyamán. A gyárnak van két nagyobb üzemegysége: a karosszériaüzem és a motorüzem, továbbá öt kisebb szerelőcsarnoka, mindegyik autótípus számára egy-egy. A karosszéria- és a motorüzem egy időben csak egy-egy autótípushoz gyárt karosszériát, illetve motort; be kell osztani tehát, hogy az egy év időt hogyan használják fel az öt autótípus számára. A szerelőcsarnokok egymás munkáit nem tudják átvállalni.
Ha a karosszériaüzem csak egy autótípushoz gyártana karosszériát, akkor 10 000 db legyártásához rendre 1, 1.4, 2, 0.8 és 2.2 évre volna szükség.
Ha a motorüzem csak egy autótípushoz gyártana motort, akkor 15 000 db legyártásához rendre 1, 1.6, 3, 1 és 2.6 évre volna szüksége.
Az öt szerelőcsarnok kapacitása évente 7500, 5000, 1000, 9000, illetve 3000 autó összeszerelése.
Végül megadjuk, hogy az egyes autótípusok egy-egy darabjának eladása révén a gyár tiszta haszna száz dolláros egységekben kifejezve 35, 45, 50, 30, illetve 40 egység.
Nem törődve azzal, hogy az autók száma csak egész szám lehet, feladatunkat az alábbi módon fogalmazzuk meg:
maximalizálandó(35x1+45x2+50x3+30x4+40x5),feltéve, hogyx1+1.4x2+2x3+0.8x4+2.2x510000x1+1.6x2+3x3+x4+2.6x515000x17000x25000x31000x49000x53000x10,x20,x30,x40,x50.

 
 
A lineárás programozási feladat megoldása
 
 

A lineáris programozási feladat megoldására mind a mai napig a Dantzig által 1951-ben közölt módszert alkalmazzák leginkább*A cikk első, 1979-es megjelenése óta természetesen több más módszert is kidolgoztak, de ezek ismertetésére itt nem térünk ki.. Ennek egy egyszerű variánsát fogjuk ismertetni.
A feladat feltételeinek eleget tevő x1, ..., xn rendezett szám n-eseket megengedett megoldásoknak nevezzük. A továbbiakban feltesszük, hogy feladatunk olyan alakú, hogy csupán az x10, ..., xn0 feltételekben áll egyenlőtlenség, az egyéb feltételekben pedig egyenlőség, közelebbről: lineáris egyenlőség. A szendvicses feladat numerikus megoldása előtt majd példát mutatunk arra, hogy mi módon lehet a feladatot a most említett, ún. kanonikus (egységesített) alakra hozni, ha az eredetileg nem volt ilyen. Még azt is feltesszük, hogy az egyenlőséges feltételek ún. kifejezett alakúak bizonyos ,,változókra'' nézve, amin azt értjük, hogy mindegyik egyenlőséges feltételben van olyan változó, amely a többiekben nem szerepel (másképpen kifejezve: a többiekben zéró együtthatóval szerepel). Ilyen pl. az alábbi feltételrendszer:
10-x1-3x4+2x5=0,15-x2-4x4+x5=0,16-x3+3x4-6x5=0,(1)
amely kifejezett az x1,  x2,  x3 változókra nézve. A kifejezett változókat más néven bázisváltozóknak is nevezzük. Még azt is feltesszük, hogy ha a bázisváltozóktól különböző többi változó helyébe zérót helyettesítünk, akkor az egyenlőségekből a bázisváltozók számára automatikusan adódó értékek nemnegatívak. A fenti példában pontosan ez a helyzet, ugyanis x4 és x5 helyébe zérót téve, az x1=10, x2=15, x3=16 adódik.
Ha a kanonikus alakú feladat eredetileg nem ilyen, akkor is ilyen alakúra hozható, feltéve, hogy egyáltalán van megengedett megoldáa, amint azt a későbbiekben megmutatjuk.
Most egy olyan feladattal foglalkozunk, amelyben maximumot keresünk. A minimum-feladat erre visszavezethető, ha a minimalizálandó kifejezést (-1)-gyel megszorozzuk. A maximalizálandó kifejezést célfüggvénynek, a legnagyobb célfüggvényértéket adó megengedett megoldást ‐ ha ilyen egyáltalán van ‐ optimális megoldásnak nevezzük. Általában, ha egy halmaz minden eleméhez egyértelműen hozzárendelünk egy számot, akkor ezt a hozzárendelést függvénynek nevezzük. Most a feltételek által meghatározott x1, ..., xn rendezett szám n-esek mindegyikéhez rendelünk hozzá egy-egy számot, ily módon alkotjuk meg a célfüggvényt. Például az (1) és az alábbi
x10,x20,x30,x40,x50(2)
nemnegativitási feltételeknek eleget tevő x1, x2, x3, x4, x5 rendezett számötösökön értelmezhetjük az alábbi célfüggvényt:
z=-6x1-x2+5x3-25x4+37x5.(3)
Az (1) egyenlőségekből az x1, x2, x3 változók számára adódó kifejezéseket (3) jobb oldalán a megfelelő helyekre behelyettesítve a célfüggvényre olyan alak adódik, amelyben x1, x2, x3 már nem (vagy ha úgy tetszik, zéró együtthatóval) szerepel, mégpedig:
z=5+7x4-6x5.(4)
Azt a feladatot, amelyben a (4) célfüggvény maximalizálandó az (1) és a (2) feltételek mellett, az alábbi alakban írjuk fel:
maximalizálandó5-(0x1+0x2+0x3-7x4+6x5)=z,feltéve, hogy10-(x1+3x4-2x5)=0,(5)15-(x2+4x4-x5)=0,16-(x3-2x4+6x5)=0,x10,x20,x30,x40,x50.

A feladatot a konstansok és az együtthatók alábbi táblázatából egyértelműen rekonstruálhatjuk:
 z   5   0   0   0   -7   6  x1   10   1         3   -2  x2   15      1      4   -1  x3   16         1   -2   6 
1. tábla
 

A táblában a zérók kiírása vagy elhagyása tetszés szerint történhet. A tábla bal oldalon a kifejezett változókat és a célfüggvény függő változóját írjuk fel, a tábla tetején pedig felsoroljuk valamennyi változót. Most két tételt említünk meg, amelyeket a lineáris programozási feladat megoldásakor használunk fel.
 
1. tétel. Ha a tábla felső sorában álló számok ‐ az elsőt nem számítva ‐ mind nemnegatívak, akkor a kifejezett változókat a mellettük álló konstansokkal, a többi változót 0-val egyenlővé téve, a feladat optimális megoldását nyerjük.
A tétel igaz voltát az (5) feladat egy módosítottján szemléltetjük. A módosítás abban áll, hogy az x4 együtthatóját a célfüggvényben megváltoztatjuk, -7 helyett 7-et írunk a zárójelen belül, miáltal az új célfüggvény a következő lesz:
z=5-7x4-6x5.
Minthogy x40, x50, azonnal adódik, hogy z5; és a z=5 célfüggvényértéket valóban megkapjuk, ha x4=x5=0, továbbá x1=10, x2=15, x3=16.
 
2. tétel. Ha a tábla felső sorában ‐ az első számot nem számítva ‐ van olyan negatív szám, hogy az alatta álló számok mind nempozitívak, akkor a célfüggvény nem korlátos felülről, azaz akármilyen nagy számnál nagyobb értéket felvesz alkalmas megengedett megoldás esetén.
Ezt a tételt is az (5) feladat egy módosítottján szemléltetjük. A módosítás most abban áll, hogy az első és a második egyenlőséges feltételben a zárójelen belül x4 együtthatóját 3 helyett (-3)-ra, illetve 4 helyett (-4)-re változtatjuk. Az így nyert feladatban választunk egy tetszőleges x1, x2, x3, x4, x5 megengedett megoldást; x4-et növelve, az egyenlőségek érvényben tarthatók az x1, x2, x3 bázisváltozók értékeinek alkalmas megválasztásával, miközben a nem bázisváltozók értékét nem változtatjuk (most az x5 tartozik ebbe a kategóriába). Eközben a célfüggvény értéke minden határon túl nő, vagyis tényleg nem korlátos felülről.
A fenti két tételben két különböző típusú tábláról van szó. Van egy harmadik típus is, amelyben a felső sorban ‐ az első számot kihagyva ‐ van negatív szám, és az alatta álló számok között van legalább egy pozitív. Mindegyik tábla a három kategória valamelyikébe tartozik. Az (5) feladathoz tartozó 1. tábla a harmadik csoportba tartozik.
Ekkor eljárásunk a következő: a bázisváltozók valamelyikét megszüntetjük mint bázisváltozót, helyette egy olyan változó, mely eddig nem volt bázisváltozó, azzá válik. Az új bázisváltozó céljára minden olyan változó megfelel, amelynek a célfüggvényben a kerek zárójelen belüli együtthatója negatív. Ezek közül tetszőlegesen kiválasztunk egyet bejövő változó gyanánt; ám a kimenő változó meghatározása már nem tetszőleges. Ezt úgy kell megválasztanunk, hogy a célfüggvényben szereplő konstans lehetőleg növekedjék, de legalábbis ne csökkenjen, a feltételek konstansai pedig maradjanak nemnegatívak az új bázisváltozk esetében. Mindkét célt elérjük, ha vesszük azokat az egyenlőséges feltételeket, amelyekben a bejövő változó ‐ zárójelen belüli ‐ együtthatója pozitív, majd meghatározzuk mindegyik ilyen egyenlőségen belül a konstans tag és a bejövő változó együtthatójának a hányadosát és amelyik egyenlőség esetében ez a hányados a legkisebb, annak a bázisváltozója lesz a kimenő változó. Ezek után az előbbi módon kiválasztott egyenlőséges feltételt a bejövő változó együtthatójával végigosztjuk, majd a célfüggvényből és a többi egyenlőséges feltételből ugyanezt a változót kiküszöböljük az új bázisváltozóhoz tartozó egyenlőséges feltétel alkalmas konstansszorosainak hozzáadásával. Megjegyzendő, hogy az új feltételek a régiekkel egyenértékűek, a célfüggvény pedig semmit nem változik értékében, csak alakjában, hiszen csupán zérót adtunk hozzá.
Bár a fentiek alapján nagyjából világos, hogy hogyan nyerjük az új táblát a régiből, a teljesség kedvéért ezt a szabályt röviden összefoglaljuk. Ha az xk változó bejön a bázisba, xj pedig kimegy a bázisból, akkor:
az új táblában xk sorát úgy nyerjük, hogy a régi táblában az xj-nek megfelelő sort végigosztjuk azzal az elemével, amelyik az xk oszlopában áll;
az új tábla minden egyéb sorát úgy származtatjuk, hogy a neki megfelelő, régi táblabeli sor xk oszlopában álló elemével az új tábla xk-nak megfelelő sorát elemenként végigszorozzuk, majd az így kapott sort elemenként levonjuk a régi táblabeli sorból.
Alkalmazzuk a fent leírt lépést az (5) feladatra. Csak egy negatív szám van a tábla felső sorában az utolsó öt pozícióban, ez x4-hez tartozik, tehát x4 bejön. Minthogy
min(10/3,15/4)=10/3
és a minimumot az első egyenlőséges feltételben kapjuk, ezért x1 a kimenő bázisváltozó. Az új feladatot szükségtelen kiírni, elég az új tábla megadására szorítkozni, ez pedig a következő:
 z   85/3   7/3   0   0   0   4/3  x4   10/3   1/3   0   0   1   -2/3  x2   5/3   -4/3   1   0   0   5/3  x3   68/3   2/3   0   1   0   14/3 
2. tábla
 


Minthogy a felső sor utolsó öt pozíciójában minden szám nemnegatív, optimális megoldáshoz jutottunk, amely a következő:
x1=x5=0,x4=10/3.x2=5/3,x3=68/3.
Ezt a módszert nevezik Dantzig módszerének.
Ha Dantzig módszerének végrehajtása során a tábla bal felső sarkában álló szám állandóan növekszik, akkor soha nem térhet vissza a bázisváltozók egy olyan összessége, amely korábban már szerepelt. A kifejezett változók ugyanis a teljes táblát és így a bal felső sarokban álló elemet is egyértelműen meghatározzák. Minthogy pedig csak véges sok különböző módon lehet a kifejezett változókat kiválasztani, az eljárásnak véges sok lépés után be kell fejeződnie, vagy az 1. vagy a 2. tételnek megfelelő tábla elérésével. Ha a 2. tételnek megfelelő táblához jutunk, akkor nyilván rosszul fogalmaztuk meg az eredeti gyakorlati feladatot, ahhoz kell tehát visszatérnünk.
Most a szendvicskészítés példájának 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:
 z   0   -1   -1   0   0   0   0  x3   50   2   1   1   0   0   0  x4   80   2   3   0   1   0   0  x5   60   3   0   0   0   1   0  x6   40   0   2   0   0   0   1 
1. tábla

 z   20   0   -1   0   0   1/3   0  x3   10   0   1   1   0   -2/3   0  x4   40   0   3   0   1   -2/3   0  x1   20   1   0   0   0   1/3   0  x6   40   0   2   0   0   0   1 
2. tábla

 z   30   0   0   1   0   -1/3   0  x2   10   0   1   1   0   -2/3   0  x4   10   0   0   -3   1   4/3   0  x1   20   1   0   0   0   1/3   0  x6   20   0   0   -2   0   4/3   1 
3. tábla

 z   65/2   0   0   1/4   1/4   0   0  x2   15   0   1   -1/2   1/2   0   0  x5   15/2   0   0   -9/4   3/4   1   0  x1   35/2   1   0   3/4   -1/4   0   0  x6   10   0   0   1   -1   0   1 
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 az 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 lexikografikus 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, amelyekben 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. 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 lexikografikusan 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ő lexikografikusan nagyobb, mint a második. Például a
(-2,3,1,4,5)
sor lexikografikusan 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 lexikografikusan 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. lexikografikus 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 lexikografikusan legkisebb. Az ennek a sornak megfelelő változó fog kimenni, ezt nevezzük L-szabálynak.
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 lexikografikusan 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 lexikografikusan 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 lexikografikusan 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 lexikografikus módszer véges sok lépéssel véget ér.
Most pedig bemutatjuk Beale példáját. Előbb a lexikografikus 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ő:
 z   0   0   0   0   -3/4   20   -1/2   6  x1   0   1   0   0   1/4   -8   -1   9  x2   0   0   1   0   1/2   -12   -1/2   3  x3   1   0   0   1   0   0   1   0 
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ó lexikografikusan 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 lexikografikusan, é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 lexikografikusan megnöveltük.
A lexikografikus 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 lexikografikusan 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ában x4 sora oly módon kapható meg a régi táblabeli x2-höz tartozó sorból, hogy ezt 1/2-del 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ásodik tábla a következő:
 z   0   0   3/2   0   0   2   -5/4   21/2  x1   0   1   -1/2   0   0   -2   -3/4   15/2  x4   0   0   2   0   1   -24   -1   6  x3   1   0   0   1   0   0   1   0 
2. tábla
 


Vegyük észre, hogy a felső sor lexikografikusan 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 az optimális megoldást szolgáltató tábla így alakul:
 z   5/4   0   3/2   5/4   0   2   0   21/2  x1   3/4   1   -1/2   3/4   0   -2   0   15/2  x4   1   0   2   1   1   -24   0   6  x6   1   0   0   1   0   0   1   0 
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:
 z   0   0   0   0   -3/4   20   -1/2   6  x1   0   1   0   0   1/4   -8   -1   9  x2   0   0   1   0   1/2   -12   -1/2   3  x3   1   0   0   1   0   0   1   0 
1. tábla

 z   0   3   0   0   0   -4   -7/2   33  x4   0   4   0   0   1   -32   -4   36  x2   0   -2   1   0   0   4   3/2   -15  x3   1   0   0   1   0   0   1   0 
2. tábla

 z   0   1   1   0   0   0   -2   18  x4   0   -12   8   0   1   0   8   -84  x5   0   -1/2   1/4   0   0   1   3/8   -15/4  x3   1   0   0   1   0   0   1   0 
3. tábla

 z   0   -2   3   0   1/4   0   0   -3  x6   0   -3/2   1   0   1/8   0   1   -21/2  x5   0   1/16   -1/8   0   -3/64   1   0   3/16  x3   1   3/2   -1   1   -1/8   0   0   21/2 
4. tábla

 z   0   -1   1   0   -1/2   16   0   0  x6   0   2   -6   0   -5/2   56   1   0  x7   0   1/3   -2/3   0   -1/4   16/3   0   1  x3   1   -2   6   1   5/2   -56   0   0 
5. tábla

 z   0   0   -2   0   -7/4   44   1/2   0  x1   0   1   -3   0   -5/4   28   1/2   0  x7   0   0   1/3   0   1/6   -4   -1/6   1  x3   1   0   0   1   0   0   1   0 
6. tábla

 z   0   0   0   0   -3/4   20   -1/2   6  x1   0   1   0   0   1/4   -8   -1   9  x2   0   0   1   0   1/2   -12   -1/2   3  x3   1   0   0   1   0   0   1   0 
7. tábla

 
 
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, hogyx1+2x2+3x3+2x4=7,(9)4x1+6x2+2x3+x4=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:
 z   -17   -5   -8   -5   -3   0   0  x5   7   1   2   3   2   1   0  x6   10   4   6   2   1   0   1 
1. tábla

 z   -11/3   1/3   0   -7/3   -5/3   0   4/3  x5   11/3   -1/3   0   7/3   5/3   1   -1/3  x2   5/3   2/3   1   1/3   1/6   0   1/6 
2. tábla

 z   0   0   0   0   0   1   1  x3   11/7   -1/7   0   1   5/7   3/7   -1/7  x2   8/7   5/7   1   0   -1/14   -1/7   3/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ábbiakkal egyenértékű alakja a következő:
(11)11/7-(-1/7x1+x3+5/7x4+3/7x5-1/7x6)=0,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, amelyek 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.
Prékopa András

 

 

*1

*2