A szimplex algoritmus, más néven szimplex módszer a lineáris programok optimumának megtalálására szolgáló, egyben annak létezését is vizsgáló módszer. Használják linearizált nemlineáris programok megoldására is. Műveletideje akár exponenciális is lehet, mivel csúcsról csúcsra jár, és egy konvex poliédernek exponenciálisan sok csúcsa lehet. Erre példa a kocka.
Bizonyítható vele az az állítás is, hogy ha az , rendszernek akkor és csak akkor van olyan megoldása, amelyben A x pozitív változóinak megfelelő oszlopai lineárisan függetlenek, ha nincs olyan y, hogy , , és A-nak van rang(A,b)-1 független oszlopa, amire y merőleges. Röviden, vagy a primál, vagy a duál feladatnak van bázismegoldása. Általánosabb alakra is kiterjeszthető; ha például vannak egyenlőségek is, akkor az egyenlőségeket leíró P mátrixból annyi oszlopot teszünk a bázisba, amennyit csak lehet. A továbbiakban ezek az oszlopok nem mozognak.
A szimplex algoritmus (vagy szimplex módszer) egy olyan matematikai eljárás, amelyet a lineáris programozásban használnak optimalizálási feladatok megoldására. A módszert George Dantzig fejlesztette ki 1947-ben, és a lineáris egyenletek vagy egyenlőtlenségek közötti maximális vagy minimális érték keresésére szolgál. A szimplex algoritmus célja, hogy megtalálja a legjobb (optimális) megoldást a lineáris programozási problémákhoz.
A szimplex módszer a lineáris programozás keretében működik, amely a következő általános formát öleli fel:
A cél a célfüggvény optimalizálása a kölcsönösen korlátozó feltételek mellett.
A szimplex algoritmus a következő lépésekben működik:
Előnyök: - A szimplex algoritmus gyorsan és hatékonyan találja meg a lineáris programozás optimális megoldását. - Jól alkalmazható nagyobb problémák esetén, ahol a lineáris egyenletek és egyenlőtlenségek komplexek.
Hátrányok: - Bár a szimplex algoritmus általában gyors, egyes esetekben, különösen degenerált problémáknál, az algoritmus lelassulhat vagy hosszú iterációkat igényelhet. - Az optimális megoldás keresése nem mindig garantált, ha a probléma nem jól van felépítve.
A szimplex algoritmust széles körben használják a gazdaságban és az iparban különböző optimalizálási problémák megoldására, például: - Gazdasági Modellezés: A vállalatok termelési és erőforrás-allokációs problémáit oldják meg. - Logisztika: Szállítási és raktározási problémák, mint a költségek minimalizálása. - Pénzügyi Kockázatkezelés: Portfóliók optimalizálása, kockázatkezelési stratégiák kidolgozása.
A következő lineáris programozási problémát szeretnénk megoldani:
Maximalizáljuk:
Korlátozó feltételek:
from scipy.optimize import linprog
# Célfüggvény koefficiensei
# Mivel a SciPy minimizálja a célfüggvényt, az optimalizálás miatt a maximalizálásnál a változókat negatívra kell venni
c = # Maximális Z = 3x1 + 2x2, ezért a negatív értékek
# Korlátozó egyenlőtlenségek
A = , # x1 + x2 <= 4
] # 2x1 + x2 <= 5
b = # A jobb oldali értékek: 4 és 5
# Változók nemnegativitásának biztosítása
x0_bounds = (0, None)
x1_bounds = (0, None)
# Szimplex algoritmus alkalmazása
result = linprog(c, A_ub=A, b_ub=b, bounds=, method='simplex')
# Eredmény kiírása
print("Optimalizált célfüggvény értéke (max Z):", -result.fun) # Ne felejtsük el visszaalakítani a maximalizálásra
print("Optimális megoldás (x1, x2):", result.x)
A kód futtatásával az optimalizált célfüggvényt és a változók optimális értékeit kapjuk. A példában az optimalizált célfüggvény értéke és az optimális értékek kerülnek visszaadásra.
Optimalizált célfüggvény értéke (max Z): 13.0 Optimális megoldás (x1, x2):
Ez azt jelenti, hogy a maximális akkor érhető el, amikor és .