Rozwiązywanie problemów z użyciem Solvera programu Excel Podstawowe czynności: aktywować dodatek Solver oraz ustawić w jego opcjach maksymalny czas trwania algorytmów na sensowną wartość (np. 30 sekund). Przy rozwiązywaniu zadań z użyciem Solvera należy określić: komórkę celu, rodzaj optymalizacji (w naszym przypadku zawsze minimalizacja), komórki decyzyjne (zmieniane przez algorytm), ograniczenia, metodę (LP, nieliniowa, ewolucyjna). Zadanie 1. Minimum funkcji kwadratowej. Zaczniemy od prostego przykładu znalezienia dla funkcji kwadratowego wartości x dla której funkcja przyjmuje wartość minimalną. Ogólnie funkcja kwadratowa dana jest wzorem: f(x) = Ax 2 + Bx + C Problem minimalizacji modelujemy tworząc 5 komórek w Excelu. Komórki A, B i C przechowują wartości współczynników, zaś komórka X przechowuje wartość zmiennej. Dodatkowa komórka W powinna posiadać formułę, która oblicza wartość funkcji na podstawie wartości komórek A, B, C oraz X. Załóżmy teraz, że mamy konkretną postać funkcji z wartościami parametrów A = 7, B = 9 oraz C = 13. Przechodzimy do dodatku Solvera i wybieramy następujące ustawienia: komórka celu W, typ minimalizacja, komórki decyzyjne komórka X, metoda nieliniowa GRG, ograniczenia: brak (zostawić puste). Po uzyskaniu rozwiązania zmienić współczynnik A na 7 i spróbować ponownie. Zadanie 2. Problem transportowy. Dane w tym problemie przyjmują następującą postać: D1 D2 D3 S1 K1,1 K2,1 K3,1 S2 K1,2 K2,2 K3,2
S oznacza liczbę sztuk dobra (podaż) dostawców 1 i 2, zaś D oznacza zapotrzebowanie (popyt) odbiorców 1, 2 i 3. Kx,y oznacza koszt transportu jednostkowego dobra pomiędzy dostawcą x a odbiorcą y. Rozpatrujemy problem zrównoważony, więc wartości popytu i podaży należy dobrać tak, aby S1+S2 = D1 + D2 + D3. Komórkami decyzyjnymi będzie kolejna tabela T rozmiaru 2x3, Tx,y symbolizuje liczbę sztuk transportowanych od dostawcy x do odbiorcy y. Celem jest minimalizacja sumy kosztów transportu, gdzie koszt dla każdej pary dostawca/odbiorca polega na wymnożeniu jednostkowego kosztu przez liczbę transportowanych dóbr. W tym celu tworzymy trzecią tabele W o rozmiarze 2x3. Element Wx,y = Kx,y * Tx,y. Następnie w kolejnej komórce C wpisujemy formułę obliczającą sumę elementów tabeli W. C jest naszą wartością funkcji celu. Oprócz tego tworzymy 2 komórki, oznaczmy je przez A1 i A2, w których będzie suma poszczególnych wierszy tabeli T. Analogicznie tworzymy 3 komórki B1 do B3, które przechowują sumę poszczególnych kolumn tabeli T. Tych 5 komórek posłuży do zapewnienia, że dostawcy wysyłają wszystkie swoje towary, a odbiorcy otrzymują tyle ile wynosi ich zapotrzebowanie. W tym przypadku ustawienia dla Solvera są następujące: komórka celu C, typ minimalizacja, komórki decyzyjne tabela T, metoda LP, ograniczenia: wartości w zakresie tabeli T są całkowite (relacja "int"), wartości w tabeli T są nieujemne (można to uzyskać formalnym ograniczeniem >= 0 lub zaznaczając odpowiednią opcję pod polem ograniczeń), wartość S1 = A1, S2 = A2, D1 = B1, D2 = B2, D3 = B3.
Zadanie 3. Problem równoważenia obciążeń. W problemie dane jest 8 zadań i 3 maszyny: T1 T2 T3 T4 T5 T6 T7 T8 S1 L1,1 L2,1 L3,1............... S2 L1,2 L2,2.................. S3 L1,3..................... Wartości od T1 do T8 to czasy wykonywania zadań. Wartości S1 do S3 to (nie)sprawności maszyn. Czas wykonywania zadania x przez maszynę y jest iloczynem Tx * Sy, czyli im wyższa (nie)sprawność tym dłużej zadanie jest wykonywane. Wartości S1 do S3 są, jak wszystkie inne, całkowitoliczbowe. Wartości Lx,y (tabela L) będą służyć do przedstawienia na której maszynie wykonywane jest zadanie x. To znaczy, że w każdej kolumnie tabeli L musi być dokładnie jedna wartość 1 i dokładnie dwie wartości 0. Poniżej znajduje się przykładowa zawartość tabeli L: 0 1 0 1 1 0 0 1 0 0 1 0 0 0 1 0 1 0 0 0 0 1 0 0 Przygotowujemy teraz drugą tabelę rozmiaru 8x3 (taki sam jak dla tabeli L), którą nazwiemy K. Wartości w tej tabeli liczone są według wzoru (przydatne będzie posługiwanie się adresami bezwzględnymi komórek): Kx,y = Lx,y * Tx * Sy Następnie liczymy 3 wartości M1, M2 i M3 jako suma poszczególnych wierszy tabeli K. Wartością celu jest komórka C = max( M1, M2, M3 ). Komórką celu jest więc C, komórkami decyzyjnymi jest tabela L. Ograniczenia są zaś następujące: wartości w tabeli L są binarne (relacja "bin"). Ewentualnie można użyć relacji całkowitoliczbowej ("int"), w każdej kolumnie tabeli L znajduje się dokładnie jedna jedynka. W tym celu można stworzyć 8 wartości D1 do D8 pod tabelą L, gdzie Dx oznacza sumę kolumny y tabeli L i podać Solverowi osiem ograniczeń postaci Dy = 1.
analogicznie można napisać 2 ograniczenia A = 1 oraz B = 1, gdzie A i B to odpowiednio minimum i maksimum z komórek D1 do D8 (ta wersja nie jest pewna). Jako metodę wybieramy metodę nieliniową. Wartości T1 do T8 oraz S1 do S3 powinny być losowe (funkcja LOS.ZAKR). Zadanie 4. Problem przepływowy. Dane to tabela D rozmiaru 6x3, gdzie Dx,y oznacza czas wykonywania zadania x na maszynie y. W problemie każde zadanie musi być wykonane na każdej maszynie w zadanej kolejności (najpierw na maszynie 1, potem na 2, potem na 3). Wartości w tej tabeli powinny być losowe. Tworzymy teraz tabelę P rozmiaru 6x1, która będzie zawierała kolejność (permutację) zadań. Mamy 6 zadań, numerowanych od 1 do 6, więc przykładowa zawartość tej tabeli to: 5, 3, 1, 4, 2, 6. Tworzymy tabelę T rozmiaru 7x4, która będzie przechowywała czas zakończenia danej operacji. Do pierwszego wiersza i pierwszej kolumny tabeli wpisujemy zera i tabela przyjmuje postać: 0 0 0 0 0 0 0 0 T1,1 T2,1 T3,1......... 0 T1,2 T2,2............ 0 T1,3............... Wartości w tabeli T definiujemy następująco: Tx,y = Zx,y + maksimum( Tx-1,y, Tx,y-1 ) Tx-1,y oznacza poprzednik technologiczny tzn. nie możemy wykonać zadania x na maszynie y wcześniej niż zakończy się na niej wykonywać zadanie x-1. Dla x = 1 poprzednikiem technologicznym jest 0 (stąd zerowa kolumna tabeli T). Tx,y-1 oznacza poprzednik maszynowy tzn. nie może wykonać zadania x na maszynie y wcześniej niż zakończy się jego wykonywanie na maszynie y-1. Dla y = 1 poprzednikiem technologicznym jest 0 (stad zerowy wiersz tabeli T). Największym problemem jest znalezienie formuły dla wartości Zx,y, która oznacza czas wykonania x-tego zadania w permutacji P na maszynie y. Jeśli więc x wynosi 2, a wartości w tabeli P to 6, 5, 4, 3, 2, 1, to chodzi nam o wartość D5,y a nie D2,y!
Do policzenia tego posłużą funkcje ADR.POSR, ZNAK oraz operator sklejania &. Wywołanie funkcji ADR.POSR(A5) oznacza wartość komórki A5, tak jakbyśmy użyli po prostu A5. Możemy jednak z użyciem tej funkcji napisać: ADR.POSR(A&5) Operator & sklei tekst (wynik) "A" z wynikiem "5", co da "A5", zaś funkcja ADR.POSR odwoła się wtedy do komórki A5. Z kolei funkcja: ZNAK(65) da w wyniku literę "A", zaś ZNAK(65+1) da literę "B". Jeśli więc w komórce Q5 jest wartość 1, a my użyjemy: ZNAK(65+Q5) To otrzymamy wartość "B". Jeśli w Q5 była wartość 2, to otrzymamy "C" itd. Możemy więc teraz obliczyć Zx,y używając formuły zbliżonej do: ADR.POSR( ZNAK( 65 + x + u, & y + v ) Wartości u i v są różne w zależności od miejsca umieszczenia tabeli D. Następnie tworzymy komórkę C o wartości takiej jak prawa dolna komórka tabeli T (czyli T6,3). Parametry dla Solvera: komórka celu C, komórki decyzyjne tabela P, metoda: ewolucyjna, ograniczenia: tabela P ma wartości całkowitoliczbowe (relacja "bin"), wartości w tabeli P są różne (relacja "dif" lub "alldifferent"), A = 1, gdzie A to komórka zawierająca minimum dla tabeli P, B = 6, gdzie B to komórka zawierająca maksimum dla tabeli P.