Edukira joan

Simplex algoritmo

Wikipedia, Entziklopedia askea

Matematikan, simplex algoritmoa programazio linealeko ebazkizunak aztertu eta ebazteko metodo bat da. Programazio linealeko metodoak helburuko funtzio linealak, murrizketa linealekin batera, hobereneratzeko erabiltzen dira. Hobezina edo optimoa 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:

murrizketa hauekin

murrizketa hauekin

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:


1. taula
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.

2. taula
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 0-(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.


3. taula
cB B basea cj Konstanteak Ratioak
5 8 0 0
x1 x2 x3 x4
8 x2 0 1 4/6 -1/9 33.33 -
5 x1 1 0 -3/9 2/9 33.33 -
cj-zj 5-0×8-5×1=5 8-1×8-0×0=0 0-(4/6)×8-(-3/9)×5=-66/18 0- (-1/9)×8-(2/9)×5=-2/9 Z=433.33


x1 eta x2 aldagaiak basean daudelarik, aldagai guztien ekarpenak negatiboak edo 0 direnez, ez da ezer irabazten aldagai berriak sartzean. Beraz, soluzio optimora heldu da: x1=33.33 eta x2=33.33, horrela helburuko funtzioan 5x1+8x2=433.33 lortuz.