Copyright (C) 2009 Gergely Mádi-Nagy.
Permission is granted to copy, distribute
and/or modify this document
under the terms of the GNU Free Documentation
License, Version 1.3
or any later version published by the Free Software Foundation;
with the Invariant Sections being title and author, no Front-Cover Texts, and no Back-Cover Texts.
A copy of the license is included in the
section entitled "GNU
Free Documentation License".
NLP feladatok megoldása az Excel Solver
segítségével
Szerző: Mádi-Nagy Gergely (BME Diff.egyenletek Tsz., ELTE TTK Operációkutatási Tsz.)
Az Excel Solver a
nemlineáris programozási feladatok megoldására általánosított redukált gradiens módszert (GRG) használ. Ennek
részletes technikai leírása megtalálható az alábbiakban:
L.S.
Lasdon, A. Waren, A. Jain and M. Ratner. Design and Testing of a Generalized
Reduced Gradient Code for Nonlinear Programming. ACM Transactions on Mathematical
Software 4:1 (1978), pp.
34-50.
L.S.
Lasdon and S. Smith. Solving Sparse Nonlinear Programs Using GRG. ORSA Journal on Computing 4:1 (1992), pp. 2-15.
Forrás:
http://www.solver.com
A
megoldás pontos menetéhez tekintsük az alábbi, kvadratikus programozási
feladatot. Forrás: http://www.cs.elte.hu/~margo/jegyzet/opkut/progmat-opkut-pdf.pdf
(5.1.1 feladat).
x2+3xy+y2-2xz-4yz+x-3y
-> min
x+y+z ≤ 10
2x-y ≥ 0
x, y, z ≥ 0
A
könnyebb áttekinthetőség kedvéért magát a példát is beraktam az Excel
táblába, bár ez a megoldáshoz nem szükséges:
Ezután
a változók értékeit tartalmazó cellák helyét adom meg, mely esetünkben
$B$9;$C$9;$D$9 lesz. Ezen cellák értékeit
változtatja majd meg a solver a megoldás során. Adhatunk kezdőértékeket
is (pl. 0-kat), ez nem befolyásolja a megoldás menetét, viszont javítja az
áttekinthetőséget.
A
$C$12 cellába kerül a célfüggvény értéke, melyet a $B$9;$C$9;$D$9 cellákban
szereplő változó értékek függvényeként írtunk fel (a $C$11 képlet
szerint):
Hasonló módon a $B$15 ill.
$B$16 cellákba beírom az első illetve a második korlátozó feltétel
baloldalát a $B$9;$C$9;$D$9 cellákban szereplő változó értékek
függvényeként. Az alábbi ábrán épp a második feltétel képlete látszik:
Az
„Eszközök” menüben rákattintunk a Solverre. Ha nem találjuk, akkor
valószínű nincs feltelepítve, ekkor a függelékben szereplő telepítési
útmutatás szerint járjunk el.
Az
alábbi ablakot kapjuk:
A célcellának beállítjuk a
célfüggvény értékét megadó $C$12 cellát. A feladat típusát átállítjuk Min-re. A
Módosuló cellák a változók értékeit tartalmazó $B$9;$C$9;$D$9 cellák lesznek:
A
korlátozó feltételek hozzáadásánál meg kell jelölni a feltétel baloldalának
illetve jobboldalának megfelelő cellát, illetve a két oldal közti
relációt. Az első feltétel:
A második feltétel:
A
feltételek bevitele után ezt látjuk:
Mielőtt a feladatot
megoldanánk, a „Beállítás” segítségével válasszuk ki a számunkra
legmegfelelőbb megoldó algoritmust. A „Beállítás” gomb megnyomásával az
alábbi ablakot kapjuk:
A feladat harmadik korlátozó
feltétele miatt a nemnegativitást majd fel kell tennünk, de bővebb
magyarázatot inkább a GCG (általánosított redukált gradiens) módszer
paraméterei kívánnak.
Közelítés:
Az iránymenti keresés során a
bázisváltozók értékeinek becslése.
·
Érintő: az
értéket az érintő lineáris függvényeként írjuk fel
·
Kvadratikus:
az értéket kvadratikusan extrapoláljuk.
Differenciák:
A parciális deriváltak
osztott differenciákkal való közelítése.
·
Haladó: ezt
használjuk, ha a korlátozó feltételek függvényértékei nem változnak túl
gyorsan. Általában ez a helyzet.
·
Centrális:
akkor van rá szükség, ha a korlátozó feltételek függvényei túl gyorsan változnak.
Bár több számolást igényel, de segíthet azokban az esetekben, amikor a Solver
azt üzeni, hogy nem tud tovább javítani a megoldáson.
Keresés:
A keresési irányt meghatározó
módszer kiválasztása.
·
Newton: kvázi-Newton
módszert használ, mely általában több memóriát, de kevesebb lépésszámot
igények, mint a konjugált gradiens módszer.
·
Konjugált: konjugált
gradiens módszert használ, mely kevesebbb memóriát használ, de általában több
lépésre van szüksége egy adott pontosság eléréséhez. Ajánlott pl. nagyobb
problémák esetén, ahol számít a felhasznált memória.
Ennek megfelelően mi az
alábbi beállításokkal dolgozunk:
Ezek
után megnyomhatjuk a „Megoldás” gombot (a Solver paraméterek ablakban).
Látható,
hogy a munkalapon a megfelelő cellákban máris az optimális megoldáshoz
tartozó értékek jelentek meg. Ha a megoldás részletesebb elemzésére is
kíváncsiak vagyunk, akkor a „Solver eredmények” ablakban jelöljük be a
számunkra érdekes témák jelentéseit. Esetünkben az összes lehetőséget
bejelöltem:
Az
„OK” gomb megnyomása után a Solver három munkalapot generál. Az
eredményjelentés az alábbi adatokat mutatja:
Microsoft
Excel 11.0 Eredmény jelentés |
|
|
|
|||
Munkalap:
[NLPSolver.xls]Munka1 |
|
|
|
|
||
Készült:
2009.01.09. 11:07:49 |
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Célcella
(Min) |
|
|
|
|
||
|
Cella |
Név |
Eredeti
érték |
Végérték |
|
|
|
$C$12 |
f=
x^2+3xy+y^2-2xz-4yz+x-3y |
0 |
-67,22560976 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Módosuló
cellák |
|
|
|
|
||
|
Cella |
Név |
Eredeti
érték |
Végérték |
|
|
|
$B$9 |
x |
0 |
1,280487802 |
|
|
|
$C$9 |
y |
0 |
2,560975605 |
|
|
|
$D$9 |
z |
0 |
6,158536593 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Korlátozó
feltételek |
|
|
|
|
||
|
Cella |
Név |
Cellaérték |
Képlet |
Status |
Eltérés |
|
$B$15 |
x+y+z
≤ 10, Bal oldal |
10 |
$B$15<=$D$15 |
Éppen |
0 |
|
$B$16 |
2x-y
≥ 0, Bal oldal |
0 |
$B$16>=$D$16 |
Éppen |
0 |
Megjegyzést
csak a „Korlátozó feltételek” „Status” és „Eltérés” sorai érdemelnek. Az
„Eltérés” az optimális megoldáshoz tartozó baloldal és a jobboldal közti
eltérés(változó) értékét mutatja. A „Status” egyenlőtlenségek esetén akkor
„Éppen”, ha a baloldal eléri a jobboldalt, tehát ha az adott korlátozó feltétel
határán vagyunk. Egyéb esetekben a „Status” „Bőven”.
Tekintsük
az „Érzékenységjelentés” munkalapot:
Microsoft
Excel 11.0 Érzékenység jelentés |
|
|||
Munkalap:
[NLPSolver.xls]Munka1 |
|
|||
Készült:
2009.01.09. 11:07:50 |
|
|
||
|
|
|
|
|
|
|
|
|
|
Módosuló
cellák |
|
|
||
|
|
|
|
Redukált |
|
Cella |
Név |
Végérték |
gradiens |
|
$B$9 |
x |
1,280487802 |
0 |
|
$C$9 |
y |
2,560975605 |
0 |
|
$D$9 |
z |
6,158536593 |
0 |
|
|
|
|
|
Korlátozó
feltételek |
|
|
||
|
|
|
|
Lagrange |
|
Cella |
Név |
Végérték |
multiplikátor |
|
$B$15 |
x+y+z
≤ 10, Bal oldal |
10 |
-12,80487561 |
|
$B$16 |
2x-y
≥ 0, Bal oldal |
0 |
5,865853071 |
A
redukált gradiens nemnulla változókhoz tartozó komponensei optimális esetben
nullák kell, hogy legyenek. A Lagrange multiplikátorok a feladat Lagrange
duálja optimális megoldásvektora megfelelő koordinátáinak (-1)-szeresét
mutatják.
Végül
nézzük a „Határok jelentés”-t:
Microsoft
Excel 11.0 Határok jelentés |
|
|
|
|
|||||
Munkalap:
[NLPSolver.xls]Határok jelentés 1 |
|
|
|
|
|||||
Készült:
2009.01.09. 11:07:50 |
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Cél |
|
|
|
|
|
|
|
|
Cella |
Név |
Végérték |
|
|
|
|
|
|
|
$C$12 |
f=
x^2… |
-67,22560976 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Módosuló |
|
|
Alsó |
Cél |
|
Felső |
Cél |
|
Cella |
Név |
Végérték |
|
határ |
eredmény |
|
határ |
eredmény |
|
$B$9 |
x |
1,280487802 |
|
1,28048782 |
-67,22560976 |
|
1,28048782 |
-67,22560976 |
|
$C$9 |
y |
2,560975605 |
|
0 |
-12,85172516 |
|
2,56097565 |
-67,22560976 |
|
$D$9 |
z |
6,158536593 |
|
0 |
11,63370012 |
|
6,15853653 |
-67,22560976 |
Ez esetben az
„Alsó/Felső határ” és a megfelelő „Cél(függvény) eredmény” a
következőkre utal. Az adott optimális megoldásból kiindulva, egy-egy
változót milyen határok közt tudunk elmozdítani úgy, hogy a korlátozó
feltételek továbbra is teljesüljenek, és a határokon felvett változóértékek
mellett mekkora a célfüggvény értéke.
Függelék a Solver telepítéséhez
Szokásos
telepítés esetén az Excel nem rakja fel a Solvert a számítógépünkre, ezért
szükség lehet ennek a pótlólagos hozzáadására. Ekkor a teendőink a
következők.
Rakjuk
be az Office telepítőlemezt, majd índítsuk el a Setup programot (ha ez
automatikusan nem történne meg). A megjelenő ablakban
válasszuk a „Szolgáltatások
telepítése/eltávolítása” pontot, majd menjünk tovább. Itt a „Solver” mellet
levő ikont állítsuk a „Sajátgépről fut” vagy „Minden sajátgépről
fut” állapotra:
Majd
a „Közös Office szolgáltatások”-on belül aktivizáljuk a a „Visual Basic for
Applications” szolgáltatást is:
Ezután
a „Frissítés” gomb megnyomásával befejezhetjük a telepítést.