Simplex algoritmo
Matematikan, simplex algoritmoa programazio linealeko ebazkizunak aztertu eta ebazteko metodo bat da. Programazio linealeko metodoak helburuko funtzio linealak, murrizketa linealekin batera, hobereneratzo erabiltzen dira. Hobezina murrizketek osatzen duten eskualde egingarriko eremuan aurkitu behar denez, simplex metodoak erpin hauetan zehar egiten du soluzioaren bilaketa, ondoko erpin batera aldatzeak helburu funtzioaren balioren hobekuntza dakarren egiaztatuz. Erpinaren aldaketak soluzio hobea ekartzen ez badu, aztertzen ari den erpina hobezina izango da. Simplex metodoa George Dantzig matematikariak garatu zuen 1947 urtean.
Ebazkizuna
Programazio linealeko ebazkizun bat helburuko funtzio bat, zenbait aldagairen mendean, eta aldagai horiek har ditzaketen balioei buruz murrizketa linealak, ezberdintza moduan adierazita. Ohikoak aldagaiei buruzko ez-negatibotasun baldintzak. Murrizketek aldagaiek har ditzaketen balioez osaturiko eskualde egingarri bat definitzen dute. Helburuko funtzioa hoberenatu (maximotu edo minimotu) egiten duten aldagaien balioak edo hobezina eskualde egingarriko erpin batean kokatzen da eskualde egingarria politopo konbexu bat osatzen duenean. Eskualde egingarria bornatua ez denean, baliteke hobezina mugatua ez izatea.
Orohar, horrela planteatzen da ebazkizuna:
- murrizketa hauekin
Simplex algoritmoa garatzeko, alegiazko aldagai izenekoak sortzen dira, zuzenean esanahirik ez dutenak, horiek gehitu edo kenduta murrizketak ezartzen dituzten ezberdintzak berdintza bihurtzeko. Adibidez:
Ebazkizunak minimotzea eskatzen duenean, maximotze-ebazkizun bihurtzen da modu honetan:
Adibidea
Minimotze ebazkizuna baten bihurketa eta alegiazko aldagaien sorrera adibide honetan ikus daitezke:
|
|
Algoritmoa
Simplex algoritmoa taulaz taula garatu ohi da, taula bakoitzean balizko soluzio baten balorazio egin eta taula batetik bestera aldagai bat atera eta beste aldagai bat sartuz. Taula bateko balizko soluzioan parte hartzen duten aldagaien aldagai basiko deritze.
Adibide gisa, programazio linealeko ebazkizun hau planteatzen da:
- murrizketa hauekin
- .
Alegiazko aldagaiak sortuz:
- murrizketa hauekin
Abiapuntu gisa, eskualde egingarriko edozein erpin har daiteke. Kalkulu gehigarririk ez egiteko, eskualde egingarrian izaten den (x1=0, x2=0) puntutik has daiteke. Lehenengo taula honela eratzen da:
cB | B basea | cj | Konstanteak | Ratioak | |||
---|---|---|---|---|---|---|---|
5 | 8 | 0 | 0 | ||||
x1 | x2 | x3 | x4 | ||||
0 | x3 | 1 | 2 | 1 | 0 | 100 | 100/2=50 |
0 | x4 | 6 | 3 | 0 | 1 | 300 | 300/3=100 |
cj-zj | 5-1×0-4×0=5 | 8-6×0-3×0=8 | 0-1×0-0×0=0 | 0-0×0-0×0=0 | Z=0 |
Taulan murrizketa adina lerro osatzen dira. Lehenengo cB zutabean, aldagai basikoek helburuko funtzioan dituzten koefizienteak jartzen dira. Koefiziente hauek aldagai guztiak agertzen diren lerroaren gainean ere agertzen dira lagungarri gisa. Bigarren zutabean aldagai basikoak (baloratzen ari den soluzioan agertzen diren aldagaiak) agertzen dira. Ondorengo zutabeetan, murrizketetako koefizienteak agertzen dira aldagai guztietarako. Balio hauek guztiak jarri ondoren, basikoak ez diren aldagaietan sartu beharrekoa zein den erabaki behar da.
Horretarako, aldagai guztiek unitate gehigarri bakoitzeko helburuko funtzioa dakartzaten ekarpenak (cj-zj) kalkulatu behar dira, taulan erakutsi bezala, azken lerroan. Ekarpen positibo handiena dakarrena sartzen da basean. Beraz, lehenengo taula honetan x2 aldagaia sartu behar da basean.
Hurrengo pausoan, basetik zein aldagai atera behar den erabaki behar da. Horretarako, ratioak izeneko azken zutabea eratu behar da. Zutabe hau konstanteen zutabea zati, murrizketa-matrizean, basera sartu behar den aldagaiaren koefizienteen zutabea eginez kalkulatzen da. Kasu honetan, x2 aldagaia sartu behar denez, murrizketa-matrizeko bigarren zutabeko koefizienteak hartzen dira (2 eta 3). Ratio txikiena duen aldagaia atera behar da, murrizketa-matrizeko koefizientea positiboa den guztietan: kasu honetan, x3 baztertu behar da.
Jarraian bigarren taula osatu behar da. Horretarako pibote-eragiketa izenekoa garatu behar da. Pibotea sartu behar den aldagaiaren zutabean eta atera behar den aldagaiaren errenkadan dagoen zenbakia da. Pibote hori 1 bihurtu behar da eta bere zutabeko beste balio guztiak 0 bihurtu behar dira. Bihurketa hauek Gauss-Jordan algoritmoa erabiliz egiten dira: pibotea 1 bihurtzeko bere lerroko koefizienete guztiak, konstanteak barne, pibotearen balioaz zatitu behar dira; bere zutabeko elementu guztiak 0 bihurtzeko, pibotaren lerroa konstante batez biderkatu eta beste lerroak gehitu behar dira.
cB | B basea | cj | Konstanteak | Ratioak | |||
---|---|---|---|---|---|---|---|
5 | 8 | 0 | 0 | ||||
x1 | x2 | x3 | x4 | ||||
8 | x2 | 1/2 | 1 | 1/2 | 0 | 50 | 50/(1/2)=100 |
0 | x4 | 9/2 | 0 | -3/2 | 1 | 150 | 150/(9/2)=22.22 |
cj-zj | 5-(1/2)×8-(9/2)×0=1 | 8-1×8-0×0=0 | 5-(1/2)×8-(-3/2)×0=-4 | 0-0×8-1×0=0 | Z=400 |
Bigarren taula osaturik, x4 aldagaia atera eta x1 aldagaia sartu behar da.