A Solver az Excel egyik legtöbbet használt bővítménye, tehát eredetileg csak passzív része a programnak. Így, ha használni szeretnénk, előbb be kell töltenünk. Ennek lépéseiről - sőt a funkció használatáról is, az itteninél bővebben - remek leírás olvasható a Microsoft honlapján.
A funkció nagyon hasonlít az előbb tárgyalt célérték-kereséshez, hiszen ugyanolyan típusú problémák megoldására való, csak éppen több beállítási lehetőséggel rendelkezik. Így minden célérték-kereséssel megoldható probléma megoldható Solverrel is, egyes esetekben viszont csak a Solver nyújt segítséget.
Nézzük, mely szempontok alapján egyezik meg a két funkció:
A következő képernyőkép az eszköz használatát mutatja be, megjelölve az előbb is említett paramétereket. Habár ez nem teljesen szakszerű, az összhang megőrzése érdekében maradnék a célérték-keresésnél megszokott kifejezéseknél. A mellékelt feladatmegoldásoknál is ugyanezt a színezést használom, hogy könnyebb legyen összevetni azokat a leírással (persze kék színezést ne keressen senki). Gyakran előfordul, hogy a módosuló cellákra korlátozás is vonatkozik, ezért döntöttem úgy, hogy a narancssárga színt kitöltésre, a pirosat betűszínezésre használom, lehetőséget biztosítva így egy cella két színnel történő megjelölésére.
Nézzük meg azt is, miben különbözik a Solver a célérték-kereséstől:
Látható, hogy a Solver használatának megértése nem is olyan nagy lépés a célértékkeresés ismerete mellett. Még sincs egyszerű dolgunk: a feltételek megfogalmazása, és annak olyan formába öntése, amit a Solver is megért, gyakran nem kis feladat. A funkció rutinszerű használatának képessége rengeteg gyakorlást, kreativitást igényel!
Nézzünk meg előbb egy egyszerűbb, majd egy nehezebb példát!
35. példa: Szendvicsek
A feladat így szól: "Meghívtuk tizennégy ismerősünket vendégségbe. Kétféle szendvicset tudunk csinálni:
Kenyérből bármennyi a rendelkezésünkre áll, de a többi alapanyagból csak korlátozottan: 120dkg vaj, 100dkg sonka, 200dkg sajt, 20db tojás.
Az ilyen feladatoknál mindig az a legnehezebb, hogy kitaláljuk, milyen formában rögzítsük az adatokat, hogy aztán könnyedén megfogalmazhassuk a feltételeket. Szerencsére most nincs nehéz dolgunk, ráadásul a négy feladat erőteljesen hasonlít is egymásra, így elég egyszer kitalálnunk az elrendezést, és aztán munkalapmásolással előkészíteni a helyet mindegyik feladat megoldására.
Az a) feladat megoldása következik.
Az ábra sokatmondó: C12-be szeretnénk kiszámolni, maximum hány szendvics készíthető el. Ehhez D3 és E3 értékeit kell próbálgatni, miközben figyelünk arra, hogy ne lépjük túl a G5:G8-ban rögzített maximális mennyiségeket, és ne adjunk meg életszerűtlen adatokat.
Célcella: | $C$12 |
Célérték: | Max |
Módosuló cellák: | $D$3:$E$3 |
Korlátozások: | $D$3:$E$3 = egész |
| $F$5:$F$8 <= $G$5:$G$8 |
Ne feledjük, a Solver alapértelmezetten nem tartozik a programhoz, így amíg nem töltjük be, nem fogjuk a fülön találni!
Az eredményt gyorsan megkapjuk: 50db szendvics készíthető ennyi alapanyagból. Ennél jóval többet is megtudhatunk, ha a megoldás megtalálásakor nem csupán elfogadjuk azt, hanem kérünk egy jelentést is:
Így egy generált munkalapon olvashatjuk a megoldás megtalálásának körülményeit, többek közt azzal a fontos információval, hogy nem a sonka és a sajt mennyisége a korlátozó.
Következzék a b) feladat megoldása!
Most nem a mennyiség optimalizálása a cél, hanem a bevételé, ez kerül F9-be. Ezt leszámítva azonban ugyanúgy kell megoldani a feladatot, mint előbb.
Célcella: | $F$9 |
Célérték: | Max |
Módosuló cellák: | $D$3:$E$3 |
Korlátozások: | $D$3:$E$3 = egész |
| $F$5:$F$8 <= $G$5:$G$8 |
A c)-ben egy kicsit már más jellegű a feladat, mint amilyen az előbbi volt. Egyrészről most minimális értéket keresünk, másrészről pedig egy új feltétel is adódik: mindenkinek jusson legalább egy szendvics.
Célcella: | $F$9 |
Célérték: | Min |
Módosuló cellák: | $D$3:$E$3 |
Korlátozások: | $D$3:$E$3 = egész |
| $F$5:$F$8 <= $G$5:$G$8 |
| $C$12 >= $C$11 |
Valójában még egy dologra is figyelni kellene: ne lehessen negatív számú szendvicset megadni. Mivel a bevétel minimalizálásáról van szó, ennek figyelembe vétele nélkül a megoldás a következő lenne: -43db sonkás szendvics, 57db sajtos szendvics és így 47Ft bevétel, ami nyilván nem egy életszerű megoldás. Az ok, amiért mégsem kell külön kikötni a szendvicsek számának nem negatív voltát, az egy kis jelölőnégyzet a Solver ablakában, ami alapértelmezetten ki van pipálva: "nem korlátozott változók nem negatívvá tétele".
A d) feladatban csupán az az újdonság, hogy a cél most nem valamiféle minimum- vagy maximum-optimalizálás, hanem egy konkrét érték általi visszafejtés. Igazából egy ugyanolyan visszakeresésről van szó, mint amit célérték-keresésnél is szoktunk csinálni, csak éppen az eddigi feltételek megtartása mellett:
Célcella: | $F$9 |
Célérték: | 1301 |
Módosuló cellák: | $D$3:$E$3 |
Korlátozások: | $D$3:$E$3 = egész |
| $F$5:$F$8 <= $G$5:$G$8 |
Láttuk, hogy mekkora segítség lehet számunkra ez az eszköz, és azt is, hogy a táblázat elrendezésének kitalálását követően már egyszerű dolgunk van. Ennél bonyolultabb feladatoknál azonban jó résen lenni, és olykor esetleg felülbírálni a program működését, mert az sok esetben nem elég determinisztikus. A következő példa ezt mutatja be.
36. példa: Nemes 2008-2009 3. forduló, 5 (Regionális forduló)
Egy verseny regionális fordulójának beosztását kell elkészíteni, az utazási költség minimalizálása mellett.
Adott:
Kell:
Mindezt tehát úgy kell megadni, hogy "ne szegjük meg a szabályokat", és az összes útiköltség a lehető legkevesebb legyen.
A feladat semmit nem ír arról, hogy ehhez a Solvert kellene használni, így aki nem ismeri ezt a lehetőséget, nagy valószínűséggel neki sem tud fogni a feladatnak. Sok esetben lehetne kézzel is próbálgatni, ennél a konkrét példánál azonban 413 lehetőséget kellene megvizsgálni a férőhelyek figyelembevétele, illetve a költség minimalizálása szempontjából, amire nem hinném, hogy bárki szívesen vállalkozik (arról nem is beszélve, hogy még ha meg is találná a jó megoldást, akkor se sok pontot kapna a feladatra).
Elsőként importálni kell az adatokat, és valamilyen formában elrendezni őket a munkalapon. Utána át kell gondolni, milyen feltételeknek is kell megfelelni:
Ezt követően arra van szükség, hogy a táblázat elrendezésével, képletek használatával ezeket olyan formában fogalmazzuk meg, amit "a Solver is megért". Ne feledjük, hogy csak a következő típusú feltételek adhatóak meg:
Most jön egy kis okoskodás: "hogyan lehetne az előbb felsorolt feltételekkel megfogalmazni az a)-ban és b)-ben leírtakat?". Ezt kitalálni nem egyszerű. A következő képen a táblázat egy olyan elrendezése található, mely lehetővé teszi a feltételek megfogalmazását a következőképpen:
A keresés jó ideig is eltarthat, majd nagy eséllyel a következő ablakot kapjuk:
Az egész megoldások tűrését valóban célszerű nullára állítani, különben lehetséges, hogy egészek helyett csak egészekhez közeli értékekkel tölti fel a program a módosuló cellákat.
Habár javult a helyzet, és jobb megoldást kaptunk, mint előbb, még ez sem az igazi. Ha azonban még egyszer lefuttatjuk, jó eséllyel megkapjuk végre az optimális beosztást, mellyel az utazási költség mindössze 10530Ft lesz:
Az eddigi tortúrából egyértelműen megállapíthatjuk, hogy ez a feladat túl nagy falat a Solvernek, hiszen már elsőre meg kellett volna találnia a megoldást. Tapasztalataim szerint az Excel bizonyos verziói akár még arra is hajlamosak, hogy egyáltalán nem adnak megoldást (hacsak nem adunk meg kézzel "pár" kezdő értéket, megkönnyítve ezzel a dolgát). Sőt, olykor az is előfordulhat, hogy hiába állítjuk az egészoptimalitást 0%-ra, mégsem egészeket kapunk.
Ugyanezt a feladatot a LibreOffice Calcja kifogástalanul megoldja. A Solver funkciót teljes egészében megvalósító Megoldó pillanatok alatt megtalálja az optimális beosztást, amennyiben a LibreOffice lineáris megoldóprogramot választjuk a beállításokban (nem ez az alapértelmezett). Ebben az esetben ezért érdemesebb lehet ezt használni.
Az xls mellett megtalálható a feladat Calcban készült megoldása is.
Készült az "Országos koordinációval a pedagógusképzés megújításáért” című TÁMOP-4.1.2.B.2-13/1-2013-0007 pályázat keretében. |
A tananyag az ELTESCORM keretrendszerrel készült