SOLVER, AZ MS EXCEL OPTIMALIZÁLÓ ESZKÖZE A nagyméretű, sok változót és korlátozó feltételt tartalmazó lineáris programozási (vagy egyéb optimalizálási feladatok) megoldása reménytelen kézi számolás útján. Számos olyan szoftver létezik azonban, melyeket optimalizálási feladatok hatékony megoldására fejlesztettek ki. A továbbiakban a Microsoft Excel táblázatkezelő bővítményeként betölthető Solver program alkalmazását és lehetőségeit tekintjük át. A Solver segítségével általános optimalizálási feladatokat is megoldhatunk, tehát a korlátozó feltételeknek és a célfüggvénynek nem kell szükségképpen lineárisnak lennie. Így a korábbi fejezetekben vizsgált LP feladatok mellett a hiperbolikus programozási valamint egyéb nemlineáris optimalizálási feladatok megoldására is alkalmazhatjuk a szoftvert. A Solvert első használata előtt be kell töltenünk. Ezt általában az Excel beállításai menüben (mely az Office gombra való kattintás után érhető el) a Bővítmények kategória kiválasztása után végezhetjük el. Ha szükséges, kérjünk segítséget az aktuális Excel-verzió súgójától. Sikeres betöltés után a Solver ikonja megjelenik az Adatok menüpont Elemzés nevű csoportjában. Adatok megadása, beállítások A Solver indítása előtt egy Excel munkalapon rögzítenünk kell a megoldani kívánt feladathoz tartozó adatokat. Ehhez először ki kell jelölnünk a döntési változók helyét, célszerűen egy összefüggő cellatartomány formájában. (Például 10 változó esetén 10 egymás melletti, vagy 10 egymás alatti cellát érdemes választani, hogy később egyszerűbben tudjunk hivatkozni ezekre a változókra.) A Solver a döntési változókat tartalmazó cellákat módosuló celláknak nevezi, mivel ezek tartalma a megoldás során folyamatosan változik. Ezután egy újabb összefüggő cellatartomány celláiba adjuk meg a korlátozó feltételek baloldalán álló képleteket, úgy, hogy a képletekben szereplő változókra az előzetesen kijelölt cellájuk segítségével hivatkozunk (így a képlet írásakor a cellára való kattintással is beírható az adott változó). A célfüggvény számára egy külön cellát foglalunk le, ez lesz a Solver terminológiájában a célcella. A célcellába előzetesen beírjuk a célfüggvény egyenletét (a változókra ismét celláik segítségével hivatkozunk), a megoldás végén ez a cella az optimum értékét fogja tartalmazni.
Az elmondottak illusztrálása rögzítsük egy Excel munkalapon az alábbi LP-feladat adatait: 7x 1 +9x 2 +5x 3 max x 1 +x 2 +2x 3 5 2x 1 +x 2 +3x 3 11 2x 1 +3x 2 +2x 3 12 x 1, x 2, x 3 0 A feladat három döntési változójának jelöljük ki az egymás alatti A1, A2, A3 cellákat. A három korlátozó feltétel a B1, B2, B3 cellába kerül. A célfüggvény képletét a C1 cellába írjuk. (Mind a feltételek, mind a célfüggvény képletét =-jellel kezdtük.) A beírás után a cellák 0 értéket mutatnak, hiszen kezdetben a módosuló cellák értéke is 0, ha az értékek helyett a képleteket szeretnénk látni (mint az ábrán), akkor kapcsoljunk át erre a lehetőségre a Képletek menüpontban.
Indítsuk el a Solvert az Adatok menüpont Elemzés csoportjából! A megjelenő Solver paraméterek párbeszédablak kitöltésével fejezzük be a feladat definiálását. A Célcella mezőbe a célfüggvényt tartalmazó cella címét kell megadnunk (esetünkben ez a C1 hivatkozás). A Legyen sorban tudjuk kiválasztani, hogy a célfüggvény mely szélsőértékét szeretnénk meghatározni, esetleg arra vagyunk kíváncsiak, hogy egy konkrét értéket hol vesz fel. A Módosuló cellákhoz a döntési változókat tartalmazó tartományt jelöljük ki. A Korlátozó feltételek ablakban adjuk meg a feltételek jobboldalát és a feltételekben szereplő relációkat. Ehhez a Hozzáadás opcióval egyenként vegyük fel az adott feltétel baloldalát tartalmazó cellahivatkozást, a legördülő menüből adjuk meg a megfelelő relációt, és Korlátozó feltételként a jobboldalon álló konstans értékét. Példánkban a művelet befejeztével az alábbi ablak látható: A Solver paraméterek párbeszédablak kitöltése után a Beállítás gombra kattintva a legfontosabb teendőnk a Lineáris modell feltételezése felirat négyzetének megjelölése, mivel lineáris programozási feladatot szeretnénk megoldani. Ezenkívül ikszeljük be a Nemnegatív feltételezése jelölőnégyzetet is, amivel a döntési változókra vonatkozó nemnegativitási feltételeket rögzítjük. Fontos: A döntési változókra vonatkozó feltételeket (ha vannak) a Solver paraméterek panel Korlátozó feltételek ablakában is megadhatjuk, és mindenképpen itt kell megadnunk azokat, ha nem minden változóra a 0 feltétel vonatkozik. A Solver beállítások ablakban a megoldás során használt paraméterek alapértelmezett értékét láthatjuk, ezek átállítására egyelőre nincs szükség. Érdekes lehet még a Kijelzés lépésenként opció beállítása, ilyenkor a megoldás részeredményeit is megmutatja a szoftver. Mivel a Solver az LP-feladatok megoldását a szimplex
módszerrel végzi, a lépésenkénti eredmények kijelzése megfelel egy út bejárásának a lehetséges megoldások által meghatározott konvex poliéder csúcspontjain keresztül. A feladat megoldása Miután megadtuk a feladat alapadatait és elvégeztük a Solver beállítását, elkezdhetjük a megoldás keresését. Ezt a műveletet a Solver paraméterek párbeszédablak Megoldás gombjával kezdeményezhetjük. Ha sikerült megoldást találni, azt a Solver eredmények nevű ablak felbukkanása jelzi: Itt jelöljük be A kiszámított értékekkel opciót, hogy a munkalapon leolvashassuk a feladat megoldását. A jobboldali Jelentések ablakban jelöljük meg az összes lehetőséget, hogy a továbbiakban tanulmányozhassuk a Solver által készített összefoglalókat a feladat megoldásáról.
Egyidejűleg az eredeti munkalapon (ha a képletek kijelzéséről visszaváltunk az értékek mutatására) a feladat változóinak és képleteinek kijelölt cellákban megjelenik az optimális megoldás számszerű értéke: Az A oszlop cellái adják az optimális megoldás koordinátáit: x 1 =3, x 2 =2,x 3 =0. A B oszlopban a feltételek értéke olvasható, ha az optimális megoldás koordinátáit helyettesítjük be a képletekbe. A C1 célcella mutatja az optimum értékét: zmax=39.
A SOLVER jelentései Az Eredmény jelentés (a másik két jelentéssel együtt) az Excel munkalapjaként jelenik meg. Ez a jelentés megadja a feladat megoldását a Módosuló cellák és a Célcella mezők Végérték oszlopában. Az Eredeti érték oszlopban 0 áll, mivel nem adtunk meg kezdőértéket a változókhoz. A kezdőérték megadása akkor fontos, ha van valamilyen elképzelésünk a megoldás értékéről, és így esetleg kevesebb iterációval jut megoldásra a Solver. A korlátozó feltételek egyenlőséggel való teljesülését az Éppen szóval jelzi a jelentés, egyébként a Bőven kifejezést használja, és az Eltérés oszlopban megadja, hogy mennyi hiányzik az egyenlőség teljesüléséhez. A példánkban ez azt jelenti, hogy a második erőforrás esetén kihasználatlan kapacitással kell számolnunk.
Az Érzékenység jelentés két részből áll. A Módosuló cellák című táblázat adja meg a célfüggvény együtthatóira vonatkozó érzékenységvizsgálatot, míg a Korlátozó feltételek címszó alatt a jobboldali konstansok érzékenység-vizsgálatának eredményét találjuk. Mindkét esetben a Megengedhető növekedés és csökkenés oszlopokban a változás megengedhető mértékét adja meg a Solver, azaz az előadáson λ-val jelölt paraméterre vonatkozó határokat. Az 1E+30 jelölés a végtelent jelenti. A táblázatból a korlátozó feltételekhez tartozó árnyékárak értéke is kiderül, amely értékek megadják az adott feltétel jobb oldalának egységnyi növekedésére jutó célfüggvényváltozást.
A Határok jelentés a módosuló cellák változói által felvehető legkisebb illetve legnagyobb értékeket adja meg, úgy, hogy közben a többi változó értéke rögzített és teljesíti a feltételeket. A Céleredmény a célfüggvény által felvett érték a változócella alsó illetve felső határértékénél. Például az első döntési változó legkisebb értéke 0, és ha a megoldás többi koordinátája változatlan értékű, akkor a célfüggvény értéke 18. A szállítási feladat megoldása Solverrel A szállítási feladat egy speciális lineáris programozási probléma, melyet a disztribúciós módszerrel oldottunk meg. A Solverrel történő megoldáshoz a feladatot standard LPfeladat formájában kell felírnunk, n*m döntési változóval, ahol n a termelők, m pedig a fogyasztók számát jelöli. A megoldás menetét az előadáson már megoldott feladaton mutatjuk be. Három építkezés betonszükségletét három betonkeverő üzem látja el. Az építkezések napi igénye rendre 30, 40, 40 tonna beton, a betonkeverő telepek napi kapacitása pedig 60, 50 és 20 tonna. Adott még egy táblázat, mely egy tonna beton szállítási költségét mutatja az egyes telephelyekről az egyes építkezésekre, ezeket az adatokat majd a következő Excel munkalapon láthatjuk. Milyen szállítási terv esetén érhető el minimális összköltség, ha kikötjük, hogy a B1 és B3 üzem teljes kapacitással dolgozik? A feladat 9 döntési változójának egy 3*3-as cellatartományban foglalunk helyet az Excel munkalapon. Egy ugyanekkora táblázatban rögzítjük a szállítási költségeket, és feltüntetjük az egyes betonkeverő telepek kapacitásait, valamint az építkezések igényeit. A feladatban nem teljesül a kereslet-kínálat egyensúlya, de a gépi megoldáshoz nem szükséges fiktív építkezés felvétele. A helyzetet a korlátozó
feltételekben álló relációk beállításával fogjuk kezelni, és hasonlóan járunk el a feladatban szereplő kikötéssel kapcsolatban is. Az Excel munkalap a kezdeti adatok felvétele után: A döntési változóknak kijelölt hely a B7:D9 tartomány. Az egyes sorok és oszlopok összegeit kiszámoljuk a tartomány szélein, ezek az összegek alkotják a korlátozó feltételek baloldalait. A célfüggvény értékét az F11 cellában az Excel szorzatösszeg függvényével számoljuk ki, hiszen a minimális szállítási költség éppen a költségmátrix és a döntési változók mátrixának elemenkénti szorzataként áll elő. A Solver paraméterek panelt a következőképpen töltjük ki: A szélsőérték jellegét minimumnak állítottuk be.
Az építkezések igényeit ki tudjuk elégíteni, ezért egyenlőséggel fogalmazzuk meg az igényekre vonatkozó feltételt, méghozzá egyszerre mind a hármat, vektorok közötti egyenlőséget kérve az első korlátozó feltételben. Szintén egyenlőséget írunk elő az első és harmadik betonkeverő telep vonatkozásában, mert ezeknél kikötöttük a teljes kapacitással való üzemelést. A második telep esetében feltételt írunk elő, ez az üzem fog a fiktív építkezésre szállítani (vagyis nem termel teljes kapacitással). A Solver beállítások ablakban jelöljük be a Lineáris modell és Nemnegatív feltételezése opciókat, és kérjük a feladat megoldását. A Solver jelzi, hogy megoldást talált, és munkalapon a következő eredmény jelenik meg: Innen leolvashatjuk a feladat optimális megoldását: a B1 telepről 30-30 tonna betont kell szállítani az E1 illetve E3 építkezésekre, ugyancsak 30 tonnát a B2 telepről az E2 építkezésre, végül 10-10 tonnát a B3 telepről az E2 illetve E3 építkezésekre. A szállítások összköltsége 670, összhangban a korábban kiszámolt megoldással. Megjegyzés: Mivel a hozzárendelési feladat egy speciális szállítási feladat, ezért a fentiekhez hasonló módon a hozzárendelési feladatot is megoldhatjuk Solverrel. A különbség csak annyi, hogy a kapacitások és igények vektorát egyesekkel kell feltölteni, a feladat változóit pedig binárisnak kell választani
Hiperbolikus programozási feladat megoldása A hiperbolikus programozási feladat célfüggvénye egy tört, tehát nemlineáris függvény. A Solvert eddig csak lineáris programozási feladatok esetén alkalmaztuk, de általános optimalizáló szoftverről lévén szó, nemlineáris problémák megoldására is képes. A hiperbolikus programozási feladatok megoldásának menetét az alábbi példán keresztül mutatjuk be: (7x1+5x2+2x3 1)/(x1+x2+x3+5) max x1+3x3 15 2x1 x2 10 x2 2x3=20 x1,x2,x3 0 A korábban megoldott normál feladattal megegyezően három döntési változó és három feltétel szerepel a feladatban, ezért a munkalapon ugyanúgy helyezzük el a cellákat, mint a már megoldott feladatban:
A paraméterek megadása: A beállításoknál vegyük figyelembe, hogy ezúttal nincs szükség a lineáris modell feltételezésre. A Solver a nemlineáris problémák megoldására a GRG (Generalized Reduced Gradient) módszert használja. A panel alsó részén található három rádiógombot hagyhatjuk az alapértelmezett értéken, a kisebb méretű problémák esetén megfelelnek az adott beállítások. Ezenkívül még bejelöltük a Nemnegatív feltételezése lehetőséget, mivel korábban nem adtunk meg a változókra vonatkozó korlátot.
A paraméterek megadása és a beállítások után kattintsuk a Megoldás gombra. A feladat optimális megoldását ezúttal az Eredmény jelentésből olvassuk ki: A jelentés alapján a feladat optimális megoldása: x 1 =15, x 2 =20, x 3 =0, zmax=5.1