Programazio lineal

Wikipedia(e)tik
Hona jo: nabigazioa, Bilatu

Matematikan, programazio lineala helburu-funtzio lineal bat eta murrizketa linealak (berdintzazkoak zein desberdintzazkoak) dituen optimizazio-ebazkizunak aztertu eta optimo edo hobezina, hau da, helburuko funtzioa optimizatzen duten aldagaien balioak, aurkitzeko teknika-multzoa da. Ikerketa operatiboaren barnean kokatzen den teknika-multzoa da eta aplikazio anitz ditu, hala nola baliabideen esleipenean (eskura dagoen baliabide bakoitzetik zer kopuru hartu behar den etekina maximizatu eta kostua minimizatzeko), dieta-diseinuan (zein elikagai hautatu behar diren kostu txikienarekin, mineral eta bestelako gaien beharrak betez aldi berean), logistikan (garraio-kostuak minimizatzeko enpresa bateko lantegiek zenbat ekoiztu behar duten, lantegien ahalmena eta merkatuen eskariak asetzeko eta joko-teorian (jokalariek burutu beharreko estrategiak itxarondako etekina maximoa izan dadin).

Adibide bat[aldatu | aldatu iturburu kodea]

Lantegi batek x eta y produktuak ekoizten ditu A eta B makinak erabiliz. x produktuak ematen duen etekina unitate bakoitzeko 5€ da. y produktuak, berriz, 8€ko etekina ematen du unitate bakoitzeko. A makinak ordubeteko epea behar du x produktuaren unitate bat ekoizteko eta 2 ordu y unitate baterako. B makinak 4 eta 6 ordu behar ditu hurrenez hurren x eta y unitateak ekoizteko. A makinan 100 orduko epea dago bi produktuak ekoizteko eta 300 orduko epea B makinan. Zenbat unitate ekoiztu behar dira x eta y produktuetatik etekina maximoa izan dadin?

Adierazpen aljebraikoa[aldatu | aldatu iturburu kodea]

Programazio linealaren ebazkizunak era aljebraikoaz adierazi ohi dira, batetik maximizatu edo minimizatu beharreko z(x)\, helburuko funtzioa eta bestetik murrizketak definituz. Ohikoa da murrizketetan aldagaiak ez-negatiboak izan behar direla ezartzea. Arestiko adibideari dagokion adierazpen aljebraiko eta matriziala hauek dira:



   max\ \  z(\mathbf{x})=5x+8y


murrizketa hauekin



\begin{align}
   x+2y \leq 100,\\
   4x+6y \leq 300,\\
   x \leq 0,\  y \leq 0.
\end{align}
max \ \ \begin{bmatrix} 5 & 8 \end{bmatrix} \begin{bmatrix} x \\ y \end{bmatrix}


murrizketa hauekin


\begin{bmatrix} 1 & 2 \\ 4 & 6  \end{bmatrix} \begin{bmatrix} x \\ y \end{bmatrix} \le \begin{bmatrix} 100 \\ 300  \end{bmatrix}, \, \begin{bmatrix} x \\ y \end{bmatrix} \ge 0.


Era orokorrean, honela adierazten programazio linealeko ebazkizun bat:



   max\ \ z(\mathbf{x})=\mathbf{c}^{T}\mathbf{x}


murrizketa hauekin



\begin{align}
   \mathbf{A}\mathbf{x}\leqslant \mathbf{b},\\
   \mathbf{x}\geqslant 0,
\end{align}

Ebazpen grafikoa[aldatu | aldatu iturburu kodea]

Helburuko funtzioa optimizatu behar duten aldagaiak bi direnean, ebazkizunak modu grafikoan azal eta ebatz daiteke. Lehenengo pausoa murrizketa bakoitzak mugatzen duen eremua finkatzea da. Horretarako, desberdintza bakoitzari dagokion berdintza-ekuazioa irudikatu (murrizketak linealak direnez, zuzenak osatu beharko dira) eta desberdintza betetzen den aldea eman behar da. Ezberdintzek mugatzen dituzten eremuak bateratuz, murrizketa guztiak batera betetzen dituzten puntuen multzoa edo eskualde egingarria lortzen da. Murrizketak linealak direnez, eskualde egingarria multzo konbexu bat da, mugatua (politopo bat izenekoa) edo mugarik gabea. Programazio linealaren ebazkizunaren soluzioa eskualde egingarrian kokatzen da.

Ondoren, helburuko funtzioa irudikatzen da, edozein baliorako. Horrela, zuzen bat lortuko da. Zuzen hauekiko paraleloak helburuko funtzioa ematen dute funtzioaren balio ezberdinetarako. Horrela, helburuko funtzio batetik paraleloak osatuz ebazkizunak eskatzen duen norabidean (max edo min egin behar den), helburuko funtzioaren balioa maximizatu edo minimizatu egiten duen muturreko balioa edo balioak lortuko dira. Balio hauek eskualde egingarriko erpin (soluzio bakarra) edo ertz batean (soluzio anitz) izango dira. Eskualde egingarria ugarik gabea edo infinitua denean, gerta liteke soluzioa ere infinitua izatea (zehatzago, helburuko funtzioa maximizatu edo minimizatu egiten duten aldagaien balioak infinitu izatea).

Zuzen paraleloen norabidea bat dator helburuko funtzioaren koefizienteen bektorearen norabidearekin.

Eskualde egingarria politopo bat denean, soluzioa eskualdeko erpin guztietan helburuko funtzioa kalkulatuz eman daiteke. Helburuko funtzioaren balio handiena ematen duen puntua izango da soluzioa. Bi erpinek helburuko funtzioaren balio bera ematen dutenean, bi erpinak eta beraiek lotzen duten ertz osoko puntuak izango dira soluzio.

Zuzen gorriz eta urdinez, murrizketa-desberdintzei dagokien zuzenak irudikatu dira. Murrizketa-desberdintzei dagozkien aldeak beherantz daude (beherantz dagoen (x=0,y=0) puntuan, 4x+4y<300 eta x+2y<100 betetzen direlako. Bi murrizketen ebaketaz bi murrizketak batera betetzen dituzten puntuen multzoa edo eskualde egingarria (horiz) lortzen da. Ondoren, helburuko funtzioa (5x+8y) irudikatzen da, lehendabizi 250 baliorako, esaterako. Helburu funtzioaren zuzenaren paraleloak marrazten badira, helburuko funtzioaren balio handiagoak lortzen direla ikus daiteke. Eskualde egingarrian (murrizketak betetzen dituzten puntuen multzoan, alegia), helburuko funtzioa (x=50,y=25) puntuan maximizatzen da. Puntu horixe izango da programazio linealaren soluzio-puntua. Bertan z=5×50+8×25=450€ko etekina lortzen da. Ikus daitekeenez, helburuko funtzioari dagokion paraleloen norabidea bat dator helburuko funtzioko koefizienteen (5,8) bektorearen norabidearekin (edo, aiseago ikusteko, (50, 80) bektorearekin norabidearekin). Soluzioa politopoko erpinetarako helburuko funtzioak hartzen dituen balioak kalkulatuz ere eman daiteke soluzioa. Kasu honetan , erpinek helburuko funtzioan ematen dituzten balioak hauek dira: (x=0,y=0)→z=0, (x=0,y=50)→z=400, (x=50,y=25)→z=450, (x=75,y=0)→z=375. Beraz, soluzioa (x=50,y=25) puntuan dago.

Simplex metodoa[aldatu | aldatu iturburu kodea]

Programazio linealerako algoritmo orokor bat, aldagai kopuru guztietarako erabil daitekeena, simplex metodoa da. 1947 urtean garatua, geroztik bertsio anitz izan dituen algoritmoa izan da, baina guztietan jarraitzen diren oinarrizko pausoak hauek dira:

  • Hobezin edo optimoaren bilaketa eskualde egingarriko erpin batetik abiatzen da.
  • Ondoko erpin baterako mugimenduak helburuko funtzioaren balioa gehitzen duen egiaztatu behar da.
    • Ondoko erpin batera aldatuz helburuko funtzioaren balioa gehitzen ez bada, erpin hori optimo lokala da (ondoko guztiek baino emaitza hobea ematen baitu) eta eskualde egingarriaren konbexutasuna dela eta, hobezin globala ere badela esan daiteke. Bilaketa hemen bukatzen da.
    • Ondoko erpin batera aldatuz, helburuko funtzioaren balio hobea lortzen bada, erpina aldatu eta balizko soluzio berria berriz ere aztertzen da, helburuko funtzioaren balioa ondoko erpin batera aldatuz gehitu daitekeen egiaztatuz.

Ebazkizun primala eta duala[aldatu | aldatu iturburu kodea]

Programazio linealeko primal deritzon ebazkizun batetik, bere modu kanonikoan, beste ebazkizun dual bat erator daiteke:

Ebazkizun primala Ebazkizun duala
\begin{align}
max\ \  c^Tx;\\
Ax \leq b,\\
x \geq 0
\end{align}
\begin{align}
min \ \ b^T\lambda;\\
A^T\lambda \geq c,\\
\lambda \geq 0
\end{align}

Ebazkizun primal baten dualaren duala bat dator ebazkizun primalarekin. Aldi berean, ebazkizun primal eta dualaren soluzioak ere loturik daude: soluzio mugatua badu batak, besteak ere hala izango du eta helburuko funtzioen balio optimoak berdinak izango dira; batak soluzio mugagabea badu, besteak ez du soluzio egingarririk izango. Lasaiera osagarriaren teoremaren arabera gainera:

  • ebazkizun batean aldagaiaren balio optimoa positiboa bada, beste ebazkizunean dagokion murrizketa saturatu edo betea da;
  • ebazkizun batean murrizketa bat saturatzen ez bada, beste ebazkizunean dagokion aldagaiaren balio hobezina 0 da.

Kanpo loturak[aldatu | aldatu iturburu kodea]

Commonsen badira fitxategi gehiago, gai hau dutenak: Programazio lineal Aldatu lotura Wikidatan