Aki már jó ideje gyűri a táblázatkezelők családjának legismertebb tagját, az Excelt, az biztosan találkozott már azzal az igénnyel vagy kéréssel, hogy egy meghatározott számsorozatból egy bizonyos végösszeget kiadó számokat kellett megadnia.
Az ilyen problémáknak több megoldási módszere is létezik, ezek közül a leginkább alkalmazott az valamilyen custom VBA-s megoldás, de az Excel újabb verzióinak már van erre beépített megoldása is a Solver személyében.
A Solver Add-Int egyszerűen, az Excel Options alatt tudjuk bekapcsolni:
Értelemszerűen az Options alatt az Add-Ins almenüre kattintunk.
Majd a felugró ablakban, ha a Solver még nem aktív, akkor a Manage Excel Add-Ins menü melletti Go gombra kattintva megjelenő Add-Ins ablakban tudjuk bekapcsolni. Ha ez megvan, akkor a Data fülön megjelenő új, Analysis szekcióban meg is találjuk a gombját:
Ha ezzel megvagyunk, már nézhetjük is a konkrét feladványt:
Elég egyértelmű mi a célunk, meghatározni azon számokat az oszlopban, amelyek a célszámunkat fogják pontosan visszaadni. A példa alapvetően egyszerű és nagyon gyorsan ki is található, mely számok adják ki az 1033-as végösszeget, de most nem ez a lényeg.
A Solveres megoldáshoz most két segédoszlopot fogok létrehozni, az egyiket Szorzó néven, a másikat Számok2 néven.
Utóbbi elég egyszerű tartalommal bír, a Számok oszlopban található számok és a Szorzó oszlopban található szorzók szorzata szerepel itt. A Szorzó oszlopban egyesek szerepelnek, a végeredmény meghatározásához van erre szükségünk, a Solver ugyanis ezen szorzókat fogja egyesnek meghagyni vagy átírni nullára, attól függően, hogy melyik számra lesz szükség a célszám meghatározásához.
A végeredmény eléréséhez még két segédcella kell majd nekünk:
A Teljes összeg értelemszerűen a Számok2 oszlop teljes szummáját mutatja, a Különbség pedig a Célszám és a Teljes összeg különbsége - a Solvert fogjuk megkérni arra, hogy a Különbséget vigye le pontosan nullára, azaz határozza meg azon számok halmazát, amelyek kiadják célszámunkat.
Most szépen kattintsunk a Solver funkcióra a Data fülön.
Ezt az ablakot kell kitöltenünk ahhoz, hogy a Solver megadja nekünk a megoldást.
Set Objective mezőbe írjuk, hogy melyik cellának akarunk célértéket megadni, jelen esetben ez most a Különbség cellánk, azaz G6 lesz.
Mit szeretnénk ettől a cellától? Hogy nulla legyen.
Hogy hozza ki a Solver ezt az eredményt? Értelemszerűen a "változó" celláink módosításával, azaz a Szorzó oszlopot adjuk be a By Changing Variable Cells mezőbe:
Ezután már csak ezen "változó" celláink értékeinek kell határokat szabnunk, tehát a Solvert terelgetnünk kell, hogy csak 0 vagy 1 értékeket használjon a Szorzó oszlopban.
Ezt három feltétellel fogjuk elérni, egyrészt definiáljuk, hogy a Szorzó oszlopban vagy 0 vagy annál nagyobb érték kell, hogy szerepeljen, azt is meghatározzuk, hogy csak 1 vagy annál kisebb érték lehet ezen cellákban és végül kikötjük, hogy csak egész szám kerülhet ide - azaz konkrétan 0 és 1 maradt a Solver számára. Ez így néz ki a Solver ablakában:
Ezután pedig már csak a Solve gombra kell kattintanunk és láss csodát, meg is van, hogy mely számokra van szükségünk az 1033-hoz:
És ehhez nem volt szükségünk VBA-tudásra, szimplán csak bekapcsoltuk a Solver Add-Int, ami ráadásul ennél sokkal-sokkal többre képes. De erről majd később.
Simplex LP megoldási metódus egy lineáris programozási feladat szimplex módszerrel történő megoldását jelenti, ezt használjuk akkor, ha elég egyértelmű a célunk és változóink.