A szimplex módszer a lineáris programozás optimalizálási problémájának megoldására szolgáló algoritmus egy konvex poliéder csúcsainak többdimenziós térben történő felsorolásával.
A módszer lényege: olyan alapmegoldások felépítése, amelyeken a lineáris funkcionális monoton csökken, egészen addig a helyzetig, amikor a lokális optimalitás szükséges feltételei teljesülnek.
L. V. Kantorovich "A termelés szervezésének és tervezésének matematikai módszerei" (1939) című munkájában először fogalmazták meg a matematika egy új ágának alapelveit, amely később lineáris programozás néven vált ismertté. [egy]
Történelmileg a lineáris programozás általános problémáját először 1947-ben vetette fel George Bernard Dantzig , Marshall Wood és munkatársaik az Egyesült Államok Légierejének Minisztériumában. Ez a csoport akkoriban a matematikai és kapcsolódó módszerek katonai és tervezési problémák megoldásának lehetőségét vizsgálta. Később a Légierőnél Project SCOOP néven kutatócsoportot szerveztek ezen ötletek kidolgozására. A lineáris programozási probléma első sikeres megoldását SEAC számítógépen 1952 januárjában hajtották végre [2] .
A lineáris programozás problémája az, hogy egy többdimenziós téren adott lineáris megszorítások mellett szükség van néhány lineáris függvény maximalizálására vagy minimalizálására .
Vegyük észre, hogy a változókra vonatkozó lineáris egyenlőtlenségek mindegyike egy félteret határol a megfelelő lineáris térben. Ennek eredményeként minden egyenlőtlenség korlátoz néhány (esetleg végtelen) konvex poliédert, amelyet poliéder komplexumnak is neveznek . A W ( x ) = c egyenlet , ahol W ( x ) egy maximalizált (vagy minimalizált) lineáris függvény, egy L(c) hipersíkot generál . A c -től való függés párhuzamos hipersíkok családját generálja. Ekkor az extremális probléma a következő megfogalmazást kapja: meg kell találni a legnagyobb c -t úgy, hogy az L(c) hipersík legalább egy pontban metszi a poliédert. Figyeljük meg, hogy egy optimális hipersík és egy poliéder metszéspontja legalább egy csúcsot tartalmaz, és több is lesz, ha a metszés élt vagy k - dimenziós lapot tartalmaz. Ezért a funkcionális maximuma a poliéder csúcsaiban kereshető. A szimplex módszer elve az, hogy a poliéder egyik csúcsát választjuk, ami után megkezdődik a mozgás az élei mentén a csúcstól a csúcsig a funkcionális érték növelésének irányába. Ha az él mentén az aktuális csúcsból egy másik csúcsba, ahol a funkcionális magasabb értéke nem lehetséges, úgy tekintjük, hogy megtaláltuk c optimális értékét .
A szimplex módszerrel végzett számítási sorrend két fő fázisra osztható :
Sőt, bizonyos esetekben a kezdeti megoldás kézenfekvő, vagy annak meghatározása nem igényel bonyolult számításokat, például amikor az összes megszorítást „kisebb vagy egyenlő” alakú egyenlőtlenségek reprezentálják (akkor a nulla vektor mindenképpen megvalósítható megoldás , bár nagy valószínűséggel messze nem a legoptimálisabb) . Ilyen problémák esetén a szimplex módszer első fázisa teljesen elhagyható. A szimplex módszer egyfázisúra és kétfázisúra oszlik .
Tekintsük a következő lineáris programozási problémát :
Tegyük fel most ezt a problémát egy ekvivalens továbbfejlesztett formában. Z -t kell maximalizálni , ahol:
Itt x az eredeti lineáris funkcionális változói, x s új változók, amelyek úgy egészítik ki a régieket, hogy az egyenlőtlenség egyenlőséggé alakul, c az eredeti lineáris funkcionális együtthatói, Z a maximalizálandó változó. A félterek és a metszéspontban a megvalósítható megoldások halmazát reprezentáló poliédert alkotnak. A változók és az egyenletek számának különbsége adja meg a szabadsági fokok számát. Leegyszerűsítve, ha egy poliéder csúcsát vesszük figyelembe, akkor ez azoknak az éleknek a száma, amelyek mentén tovább tudunk haladni. Ezután ehhez a számú változóhoz 0 értéket rendelhetünk, és "nem alapvetőnek" nevezhetjük őket . Ebben az esetben a fennmaradó változók kiszámítása egyedileg történik, és "alap" -nak nevezik őket . Ezeknek a változóknak ugyanazt a halmazát nevezzük bázisnak . Az eredményül kapott pont a nem alapváltozóknak megfelelő hipersíkok metszéspontjában lévő csúcs lesz. Annak érdekében, hogy megtaláljuk az ún. a kezdeti elfogadható megoldást (a csúcsot, ahonnan elindulunk), minden x kezdőváltozóhoz 0 értéket rendelünk , és nem alapváltozónak tekintjük, az újakat pedig alapvetőnek. Ebben az esetben a kezdeti elfogadható megoldás kiszámítása egyedileg történik: .
Most bemutatjuk az algoritmus lépéseit. Minden lépésben megváltoztatjuk az alapvektorok és a nem alapvektorok halmazait (mozogunk az élek mentén), és a mátrix így fog kinézni:
ahol az alapváltozóknak megfelelő vektor együtthatói (a változók 0-nak felelnek meg), az alapváltozóknak megfelelő oszlopok vannak . A fennmaradó oszlopok által alkotott mátrixot jelöli . Hogy a mátrixnak miért lesz ilyen alakja, azt az algoritmus lépéseinek leírásában magyarázzuk meg.
Első lépés .
Kiválasztjuk a kezdeti érvényes értéket, ahogy fentebb jeleztük. Első lépésben az identitásmátrixot, mivel az alapváltozók a . ugyanazon okokból nullvektor.
Második lépés
Mutassuk meg, hogy a kifejezésben csak a nem alapváltozók rendelkeznek nullától eltérő együtthatóval. Vegyük észre, hogy a kifejezésből az alapváltozók egyértelműen nem alapvető változókkal vannak kifejezve, mivel az alapváltozók száma megegyezik az egyenletek számával. Legyenek alapvető és nem alapvető változók egy adott iterációnál. Az egyenlet átírható így . Szorozzuk meg a bal oldalon: . Így az alapváltozókat nem alapváltozókkal fejeztük ki , az egyenlőség bal oldalával ekvivalens kifejezésben pedig minden alapváltozó egységegyütthatós. Ha tehát az egyenlőséghez egyenlőséget adunk , akkor a kapott egyenlőségben minden alapváltozó nulla együtthatós lesz - minden x alakú alapváltozó le lesz redukálva, és az x s formájú alapváltozók nem fognak szerepelni a kifejezésben .
Válasszunk egy élt, amely mentén haladunk. Mivel Z -t szeretnénk maximalizálni , olyan változót kell választani, amely a leginkább csökkenti a kifejezést
.
Ehhez olyan változót választunk, amelynek modulusában a legnagyobb a negatív együtthatója [3] . Ha nincsenek ilyen változók, vagyis ennek a kifejezésnek minden együtthatója nem negatív, akkor elérkeztünk a kívánt csúcshoz, és megtaláltuk az optimális megoldást. Ellenkező esetben elkezdjük növelni ezt a nem alapváltozót, vagyis a neki megfelelő él mentén haladunk. Nevezzük ezt a változót bemenetnek .
Harmadik lépés
Most meg kell értenünk, hogy a bemeneti változó növekedésével melyik alapváltozó lesz először nulla. Ehhez elegendő figyelembe venni a rendszert:
A nem alapváltozók fix értékeinél a rendszer egyedileg megoldható az alapváltozók tekintetében, így meg tudjuk határozni, hogy az alapváltozók közül melyik éri el először a nullát a bemenet növekedésével. Nevezzük ezt a változót kimenetnek . Ez azt jelenti, hogy új csúcsot értünk el. Most cseréljük fel a bejövő és a kimenő változókat - a bejövő "belép" az alapba, a kimenő pedig "elhagyja" a nem alapváltozókat. Most átírjuk a B mátrixot és a c B vektort az új alap- és nem-alapváltozós halmazoknak megfelelően, majd visszatérünk a második lépéshez. x''
Mivel a csúcsok száma véges, az algoritmus egy napon véget ér. A talált csúcs lesz az optimális megoldás.
Ha egy lineáris programozási probléma esetén nem minden kényszert reprezentál a „≤” típusú egyenlőtlenség, akkor a nulla vektor nem mindig lesz érvényes megoldás. A szimplex módszer minden iterációja azonban átmenet az egyik csúcsból a másikba, és ha nem ismert csúcs, akkor az algoritmus egyáltalán nem indítható el.
A kezdeti csúcs megtalálásának folyamata nem sokban különbözik az egyfázisú szimplex módszertől, de végül nehezebb lehet, mint a további optimalizálás.
Az összes feladatmegkötés a következő szabályok szerint módosul:
Ennek megfelelően számos további és segédváltozó jön létre. Kezdetben további változókat választanak ki "+1" együtthatóval és minden segédváltozót. Figyelem: az a megoldás, amelynek ez az alap megfelel, nem elfogadható.
A kiegészítő és a segédváltozók közötti különbségekAnnak ellenére, hogy mind a kiegészítő, mind a segédváltozókat mesterségesen hozzák létre, és a kezdeti alap létrehozására használják, értékük a megoldásban nagyon eltérő:
Ez azt jelenti, hogy a kiegészítő változó nullától eltérő értéke jelezheti (de nem szabad), hogy a megoldás nem optimális . A segédváltozó nullától eltérő értéke azt jelzi, hogy a megoldás érvénytelen .
A feltétel módosítása után egy segédcélfüggvény jön létre . Ha a segédváltozók , ként lettek kijelölve , akkor a segédfüggvényt a következőképpen definiáljuk
Ezt követően a szokásos szimplex módszert hajtjuk végre a segédcélfüggvény tekintetében. Mivel minden segédváltozó növeli az értékét , ezért az algoritmus során egyenként levezetjük a bázisból, és minden átmenet után az új megoldás közelebb kerül a megvalósítható megoldások halmazához.
Ha megtaláljuk a segédcélfüggvény optimális értékét, két helyzet adódhat:
A második esetben van egy elfogadható alapunk, vagy más szóval egy kezdeti elfogadható megoldásunk. A további optimalizálás az eredeti célfüggvény figyelembevételével is elvégezhető, a segédváltozókra figyelmen kívül hagyva. Ez a megoldás második fázisa.
A módosított módszerben a mátrix
nem számítják újra, csak a mátrix tárolása és újraszámítása történik . Az algoritmus többi része hasonló a fent leírtakhoz.
1. Számítson ki kettős változókat
2. Optimalitás ellenőrzése. -re konvertálódik .
Az ellenőrzés az összes oszlopra vonatkozó számításból áll . A bázisba < 0 értékű oszlop is beírható.
Gyakran válassza ki a minimális értéket, de ehhez az összes oszlopot ismételnie kell.
Gyakrabban válasszon egy adott értéknél kisebb értéket
Ha ilyen oszlop nem található, akkor a maximálisan talált abszolút értéket veszi a talált értéknek, és a megfelelő oszlop kerül be a bázisba.
3. A kimenet meghatározása.
Legyen a változónak megfelelő beviteli oszlop Az alapterv a Növelés rendszer megoldása .
Szorozd meg a bal oldalon -val , azaz .
Itt van az alapterv, a beviteli oszlop bővítése az alap szempontjából.
Keresse meg azt a maximális értéket , amelynél az összes érték nem negatív. Ha tetszőleges nagyot lehet venni, akkor a megoldás korlátlan. Ellenkező esetben az egyik elem nullára kerül. Az alapból levezetjük a megfelelő oszlopot.
4. Referencia (alap)terv újraszámítása.
Új referenciatervet számolunk a már megadott képlet alapján a talált értékkel .
5. Átszámoljuk az inverzt a bázisra .
Legyen a kimeneti oszlop.
A B mátrixot úgy ábrázolhatjuk
ahol az alapmátrix a kimeneti oszlop nélkül.
Az oszlop megváltoztatása után az alapmátrix így fog kinézni
Olyan mátrixot kell találnunk
=> => =>
Ahol
Megjegyzés.
A mátrix újraszámítása felhalmozza a kerekítési hibákat. A nagy hibák elkerülése érdekében a mátrixot időről időre teljesen újraszámítják. Ezt a folyamatot "ismétlésnek" nevezik.
A multiplikatív változatban a mátrix nem tárolódik, csak a faktorok tárolódnak
A gazdasági problémák megoldása során a kényszermátrix gyakran ritka , ebben az esetben a szorzó opció további előnyökkel jár - a szorzókat tömörített formában tárolhatja (ne tároljon nullákat).
A mátrix LU dekompozíciója felhasználható a kerekítési hibák felhalmozódásának elkerülésére .
Az "egyenlőtlenség" típusú korlátozások túlnyomó számával a változó alapú módszer használható . [négy]
A módszer azon alapul, hogy a bázismátrixot úgy lehet ábrázolni, mint
Az inverze megvan a formája
Viszonylag kis mátrixméretek esetén előfordulhat, hogy a mátrix többi része nem tárolható.
Ez a megközelítés több tízmillió korlátozási sorozattal is megoldhat problémákat (például a játékelméletből).
A kettős módszer megvalósításához az együtthatók mátrixának transzponálásával a feladattól a minimumig kell eljutni a maximumig (vagy fordítva). A feladattól a minimum felé haladva a célfüggvény a következő formában jelenik meg:
korlátozások alatt
.
A dualitástétel . Ha a kettős feladatpárok közül az egyiknek van optimális terve, akkor a másiknak van megoldása, és ezen feladatok lineáris függvényeinek szélsőértékei egyenlők.
Ha az egyik feladat lineáris függvénye nem korlátozott, akkor a másiknak nincs megoldása.
A szimplex módszer meglepően hatékony a gyakorlatban, de 1972-ben Klee és Minty [5] hozott egy példát, amelyben a szimplex módszer a szimplex összes csúcsán iterált, ami a legrosszabb esetben a módszer exponenciális konvergenciáját mutatja. Azóta a módszer minden változatára találtak olyan példát, amelyen a módszer rendkívül rosszul viselkedett.
A gyakorlati alkalmazásokban a módszer hatékonyságának megfigyelése és elemzése a hatékonyság mérésének más módszereinek kidolgozását eredményezte.
A szimplex módszer átlagos polinomiális konvergenciával rendelkezik, az értékek eloszlásának széles választékával a véletlen mátrixokban. [6] [7]
A számítási hatékonyságot általában két paraméter segítségével becsülik meg:
A numerikus kísérletek eredményeként a következő eredményeket kaptuk.
A korlátozások száma jobban befolyásolja a számítási hatékonyságot, mint a változók száma, ezért a lineáris programozási feladatok megfogalmazásakor törekedni kell a korlátozások számának csökkentésére, még ha a változók számának növelésével is.
A szimplex módszer egyik legidőigényesebb eljárása az alapba bevitt oszlop keresése. A jobb konvergencia érdekében úgy tűnik, hogy ki kell választania a legjobb reziduális változót, de ehhez teljes vizsgálatra van szükség, azaz meg kell szoroznia a kettős változók oszlopát (ezt néha árnyékáraknak is nevezik) a mátrix összes oszlopával. [8] . Ez a megközelítés jól működik kis problémák esetén, amelyeket manuálisan oldanak meg. Ezen túlmenően a maximális maradék modulusz megválasztására vonatkozó szabály szigorú betartása szuboptimálisnak bizonyulhat az extrémum megszerzéséhez szükséges iterációk teljes számát tekintve. A maximális erősítés egy iterációnál a célfüggvény értékének lassú csökkenéséhez vezethet a következő lépésekben, és ezáltal lelassítja a probléma megoldásának folyamatát [9] .
Nagy kényszermátrixok esetén a bemeneti változó keresése sok időt vesz igénybe, és gyakran megpróbálják elkerülni a mátrix összes oszlopának áttekintését, amelyhez a következő módszerek használhatók:
Gát . Amint a változó eltérése kellően eltér a nullától (meghalad egy bizonyos értéket, amelyet akadálynak nevezünk), a változó bekerül a bázisba. Ha az összes maradék kisebbnek bizonyult, mint a gát, akkor a legkisebb maradékot tartalmazó változót választjuk bemenetként, míg magát az akadályt valamilyen szabály szerint csökkentjük (például a legkisebb maradék fele). Az akadályt gyakran használják a következő technikával. Hasonló megközelítést ír le Murtaugh könyve, lásd a 3.6.2. fejezetet. A könyv részleges értékelése [10] . Ciklus nézet . A bemeneti változó keresése az előző iteráció során bevezetett változó utáni pozícióból indul. Csoportkiválasztás (Murtaugh könyvében ezt a technikát többszörös kiértékelésnek nevezik . Lásd 3.6.3. Többszörös kiértékelés [11] .) Egy bemeneti változó keresésekor nem egy változót választunk ki, hanem több jelöltet. A következő iterációknál a megtekintés csak a kiválasztott jelöltek között történik, míg a jelölt törölhető a listáról. A mérleg célja . A változókhoz súlyokat rendelnek. Lásd a 3.6.4 fejezetet: Murtafa DEVEX pontozási módszere [12] . Keresse meg Goldfarb és Reed legmeredekebb bordáját . Lásd Murtaugh könyvének [13] 3.6.5 legmeredekebb élbecslési módszere című részét .Más trükkök is lehetségesek, például a Zadeh-szabály .
![]() | |
---|---|
Bibliográfiai katalógusokban |
Optimalizálási módszerek | |
---|---|
Egydimenziós |
|
Nulla sorrend | |
Első rendelés | |
másodrendű | |
Sztochasztikus | |
Lineáris programozási módszerek | |
Nemlineáris programozási módszerek |