Algorytm rozwiązujący problem optymalnej alokacji zasobów dr hab. Leszek S. Zaremba Profesor w POU, kierownik w Katedrze Metod Ilościowych w Finansach w POU Cezary S. Zaremba Absolwent studiów licencjackich w POU oraz magisterskich w University College London Wprowadzenie W kierowaniu firmą zarząd często staje przed problemem rozdysponowania (alokacji) zasobów firmy (pieniędzy, czasu, powierzchni magazynowej, ładowności samochodów transportowych itp.). Z zagadnieniami tego typu stykają się teŝ indywidualni decydenci, na przykład studenci planujący przygotowanie się do sesji egzaminacyjnej, kiedy to podstawowym zasobem, jakim dysponują, jest czas. Rozdział 1. Optymalna alokacja kapitału finansowego W tym rozdziale zaprezentujemy przykłady zastosowań badań operacyjnych w podejmowaniu decyzji w przedsiębiorstwie. Rozpocznijmy od zdefiniowania klasycznego (standardowego) zagadnienia optymalnej alokacji zasobów, tak jak w przykładzie 5 z [1, s. 960]. Przykład 1. [por.1, s. 960] Pan Finco ma 6000 dolarów do zainwestowania w 3 y, przy czym kwoty d 1, d 2, d 3, jakie chce zainwestować w te y, są wielokrotnością 1000 dolarów. Wszystkie te y będą przynosić zyski lub straty przez tę samą liczbę lat. W tabeli 1 zostały podane wartości NPV (zwane dalej przychodami) dla kaŝdego z tych 3 ów zgodnie ze wzorami: (1) r 1 (d 1 ) = 7d 1 + 2, r 2 (d 2 ) = 3d 1 + 7, r 3 (d 3 ) = 4d 1 + 5 1 2 3 4 5 6 1 9 16 23 30 37 44 2 10 13 16 19 22 25 3 9 13 17 21 25 29 Tabela 1 przy czym funkcja r 1 (d) określa przychody z u 1, r 2 (d) z u 2, a r 3 (d) z u 3. Zgodnie z treścią zadania musi być jeszcze spełniona równość: (2) d 1 + d 2 + d 3 = 6. Zagadnienie, które chce rozwiązać pan Finco, polega więc na maksymalizacji sumy przychodów, co zapisujemy w postaci: (3) max{r 1 (d 1 ) + r 2 (d 2 ) + r 3 (d 3 )} przy zachowaniu warunku (2). Przejdźmy teraz do nieco trudniejszego zadania opisanego w przykładzie 2, który podobnie jak przykład 3, rozwiąŝemy za pomocą programu obliczeniowego pod nazwą Problem 1, specjalnie napisanego na potrzeby tego artykułu. Przykład 2. Pan Finco ma 7000 dolarów do zainwestowania. Postanowił skoncentrować się na maksimum 4 ach spośród 5 dostępnych do realizacji, przy czym ustalił, Ŝe kwota, jaką zainwestuje w którykolwiek z 5 ów będzie wielokrotnością 1000 dolarów. Wszystkie y będą przynosić zyski lub straty przez tę samą liczbę lat. Tabela 2 podaje wartości NPV (zwane dalej przychodami) dla kaŝdego z tych 5 ów w zaleŝności od zainwestowanej w nie kwoty. Zagadnienie, które chce rozwiązać pan Finco, polega na maksymalizacji sumy przychodów ze zrealizowanych ów (minimum 1, maksimum 4 y), na które łącznie moŝe wydać nie więcej niŝ 7000 dolarów. Wielkości, które występują w tabeli, zostały wybrane przypadkowo, ale metoda rozwiązania zaprezentowana w tym artykule moŝe być z powodzeniem zastosowana do innych danych. 1 2 3 4 5 6 7 1 z 6 2015-08-17 20:41
1 1 2 3 5 10 14 24 2 7 8 9 10 11 12 23 3 13 14 15 16 17 18 21 4 6 7 8 9 10 11 20 5 1 2 3 4 5 6 7 Tabela 2. Koszty oraz przychody z 5 ów Jak wynika z tabeli 2, jeŝeli pan Finco zainwestuje 4000 dolarów w 1, to wartość dodana z tego u reprezentowana przez NPV i zwana przez nas przychodem, wyniesie 5000 dolarów. Tak więc do rozlokowania w pozostałe y zostanie 3000 dolarów. Gdyby te 4000 dolarów pan Finco zainwestował w 3, to przychód wyniósłby 16 000 dolarów, a do alokacji w inne y równieŝ pozostałoby 3000 dolarów, np. 1000 w 4 i 2000 w 2, co łącznie dałoby mu 30 000 dolarów. Z kolei przeznaczając cały budŝet tylko na jeden, pan Finco moŝe uzyskać maksymalnie 24 000 dolarów. Rozumując w ten sposób, nie pomylimy się i znajdziemy optymalne rozwiązanie problemu decyzyjnego. Gdy jednak liczba wierszy (ów), podobnie jak liczba kolumn, rośnie, metoda ta staje się coraz bardziej zawodna i trzeba ją zastąpić. W tym celu opracowaliśmy program obliczeniowy Problem 1, napisany w języku Java, który będzie wyświetlać tabelę danych wyjściowych, najlepsze rozwiązanie, drugie najlepsze rozwiązanie oraz kilka dodatkowych informacji. Poszukiwania optymalnej alokacji kapitału podzielimy na 4 fazy. W pierwszej fazie obliczeń inwestujemy całą kwotę 7000 dolarów w jeden ; proszę się teraz zastanowić, którą liczbę z tabeli 2 naleŝy zmienić (moŝna to zrobić na kilka sposobów), aby zainwestowanie całej kwoty 7000 dolarów w jeden rzeczywiście przyniosło największy przychód ze wszystkich moŝliwych sposobów alokacji w 1, 2, 3 lub 4 y. W pierwszej fazie program wybierze zatem największą liczbę z ostatniej kolumny. W naszym przykładzie będzie to liczba 24, odpowiadająca owi 1, co oznacza, Ŝe przychód z u 1 wyniesie 24 000 dolarów. Oznaczymy tę liczbę jako Max1, a drugą największą jako Max2. Przypomnijmy teraz wzór z kombinatoryki i rachunku prawdopodobieństwa, który mówi, Ŝe wszystkich podzbiorów k-elementowych w zbiorze n-elementowym jest: (4) gdzie n! (czytaj: n silnia) oznacza iloczyn kolejnych liczb naturalnych od 1 do n. W drugiej fazie obliczeń rozwaŝamy inwestycję w dowolne 2 y spośród wszystkich (5 w tym przypadku), alokując najpierw 1000 dolarów w jeden oraz 6000 dolarów w drugi, dzięki czemu łączna suma nakładów inwestycyjnych wyniesie 7000 dolarów. Taki wybór dwóch kolumn oznaczymy krótko jako 1-6. Kolejnym wyborem w tej fazie będzie 2-5, następnie 3-4, co jak zobaczymy później, wyczerpuje wszystkie moŝliwości. Program wybiera więc po jednej liczbie z kolumny pierwszej i szóstej, które nie znajdują się w tym samym wierszu, czyli reprezentują róŝne y. Wszystkich sposobów wybrania tych 2 liczb będzie jak wiemy ze wzoru: (4). Jeśli na przykład wybierzemy przychód 13 z kolumny 1 oraz przychód 14 z kolumny 6 i dodamy je do siebie, to otrzymując łącznie 27 000 dolarów, aktualizujemy wartość Max1 oraz Max2. Postępujemy tak przy kaŝdej nowej sumie, a więc na tym etapie 10 razy. Następnie program przechodzi do kolejnego etapu, na którym dokonuje wyboru 2-5, czyli wybiera kolumnę 2 i kolumnę 5. I tym razem wybierze 10 róŝnych par liczb z tych dwóch kolumn, zsumuje te pary i za kaŝdym razem uaktualni wartości liczb Max1 i Max2. Na kolejnym etapie tej samej fazy program obliczeniowy wybiera kolumnę 3 i 4, postępując tak samo jak poprzednio. Na tym kończy się faza druga, poniewaŝ wybór 4-3, podobnie jak wybór 5-2, nie wnosi juŝ nic nowego. Wynika to stąd, Ŝe wybieranie 10 par liczb z kolumn 3 i 4 i sumowanie ich jest tym samym co wybieranie 10 liczb z kolumn 4 i 3 i sumowanie ich. W trzeciej fazie obliczeń program wybiera 3 kolumny nakłady inwestycyjne które łącznie pochłoną 7000 dolarów. Rozpoczyna od alokacji 5-1-1, czyli wybiera 3 liczby po jednej z kolumn piątej, pierwszej i pierwszej, tak aby te liczby odpowiadały 3 róŝnym om. MoŜna to zrobić na: sposobów, za kaŝdym razem sumując te 3 liczby i uaktualniając wartość liczb Max1 i Max2. W kolejnym kroku program przechodzi do kolumn 4-2-1, wybierając na 10 sposobów 3 liczby, sumuje je i uaktualnia Max1 i Max2. Jedną z tych sum będzie 30 jako suma liczb 16 (z czwartej kolumny), 8 (z drugiej kolumny) oraz 6 (z pierwszej kolumny), z czego wynika, Ŝe Max1 30. W kolejnym kroku trzeciej fazy program przechodzi do kolumn 3-3-1 (wybór kolumn 4-1-2 nie 2 z 6 2015-08-17 20:41
3 z 6 2015-08-17 20:41 miałby sensu, poniewaŝ były juŝ rozpatrywane kolumny 4-2-1). Program ponownie wybiera na 10 sposobów 3 liczby z kolumny trzeciej, trzeciej oraz pierwszej, tak aby były z róŝnych wierszy, sumuje je i uaktualnia dwie największe sumy. Pozostaje jeszcze rozpatrzyć w ten sam sposób kolumny 3-2-2, gdyŝ wszystkie inne układy 3 kolumn zostały juŝ rozpatrzone. W czwartej fazie obliczeń program koncentruje się na wyborze czterech kolumn nakładów inwestycyjnych które łącznie pochłoną 7000 dolarów. Rozpoczyna od alokacji 4-1-1-1, potem zajmuje się alokacją 3-2-1-1, następnie 2-2-2-1, co wyczerpuje wszystkie moŝliwości. Rozpoczynając od alokacji 4000, 1000, 1000 i 1000 dolarów w 4 róŝne y spośród 5, wybieramy 4 liczby po jednej z kolumn czwartej, pierwszej, pierwszej i pierwszej, tak aby te liczby odpowiadały 4 róŝnym om (4 róŝnym wierszom). MoŜna to zrobić na: sposobów, za kaŝdym razem sumując te 4 liczby i uaktualniając Max1 oraz Max2. W kolejnych dwóch krokach odpowiadających alokacjom 3-2-1-1 oraz 2-2-2-1 program postępuje analogicznie, kończąc obliczenia. Wyniki końcowe i cząstkowe przeprowadzonych obliczeń uzyskane w Problemie 1 są do obejrzenia w dwóch poniŝszych interfejsach. Program obliczeniowy Problem 1 został napisany przy załoŝeniu, Ŝe kwoty inwestowane w y wzrastają o 1000 dolarów (w omawianym przypadku od 1000 do 7000). Prosty zabieg dopisania kilku kolumn pozwala jednak sprowadzić kaŝdy inny przykład do takiego sformułowania, które daje się rozwiązać za pomocą tego algorytmu. Zilustrujmy to poniŝej. Przykład 3. Treść zagadnienia jest taka sama jak w przykładzie 2, inne są jednak przychody z 5 ów. Pokazuje je tabela 3. 1 3 5 7 9 11 1 1 2 3 5 10 14 2 7 8 9 10 11 12 3 13 14 15 18 17 18 4 6 7 8 9 10 11 5 1 2 3 4 5 6 Tabela 3 Aby zastosować program obliczeniowy Problem 1, zastąpmy tabelę 3 poniŝszą. 1 2 3 4 5 6 7 8 9 10 11
1 1 1 2 2 3 3 5 5 10 10 14 2 7 7 8 8 9 9 10 10 11 11 12 3 13 13 14 14 15 15 18 18 17 17 18 4 6 6 7 7 8 8 9 9 10 10 11 5 1 1 2 2 3 3 4 4 5 5 6 Tabela 4 W pierwszej fazie obliczeń inwestujemy całą kwotę 11 000 dolarów w jeden. Z obliczeń wynika, Ŝe najlepiej zainwestować je w 3 (przychód 18 000 dolarów) i to jest aktualna wartość Max1. W drugiej fazie obliczeń rozwaŝamy inwestycję w dowolne 2 y. Po wykonaniu obliczeń okazuje się, Ŝe najlepiej zainwestować 10 000 dolarów w 2 (przychód 11 000 dolarów) oraz 1000 dolarów w 3 (przychód 13 000 dolarów), co daje łącznie 24 000 dolarów. Uaktualniona wartość Max1 to 24 000 dolarów. W trzeciej fazie obliczeń program wybiera 3 kolumny. Z obliczeń wynika, Ŝe najlepiej zainwestować 9000 dolarów w 1 (przychód 10 000 dolarów), 1000 dolarów w 2 (przychód 7000 dolarów) oraz 1000 dolarów w 3 (przychód 13 000 dolarów). Uaktualniona wartość Max1 wynosi więc 30 000 dolarów. Jest to drugi najlepszy wynik. W czwartej, ostatniej, fazie obliczeń program wybiera 4 kolumny. Po przeprowadzeniu obliczeń dowiadujemy się, Ŝe najlepiej zainwestować 8000 dolarów w 1 (przychód 5000 dolarów), 1000 w 2 (przychód 7000 dolarów), 1000 w 3 (przychód 13 000 dolarów) oraz 1000 w 4 (przychód 6000 dolarów), co daje końcową wartość Max1 = 31 000 dolarów. Jest to najlepszy wynik (najwyŝszy przychód) z alokacji posiadanego kapitału 11 000 dolarów, jaki wskazał program obliczeniowy Problem 1. Rozdział 2. Uogólnione zagadnienie alokacji zasobów Zdefiniujemy teraz (por. [1, s. 964]) uogólnione zagadnienie alokacji zasobów. MoŜna je przedstawić za pomocą wzoru: Redukuje się ono do standardowego zagadnienia alokacji, jeśli wszystkie funkcje g t (d), 1 T są dane wzorami g t (d) = d. Gdy ponadto T = 3, r t (d) dane są wzorami (1), zaś w = 6, otrzymujemy przykład 5 z [1, s. 960]. Zagadnienie (5)-(6) jest na tyle ogólne, Ŝe prezentuje wiele zagadnień decyzyjnych. Opiszemy teraz 6 z nich (przykłady 5-10), z których 4 pochodzą z [1, s. 964]. Przykład 4. ( plecakowy problem knapsack problem). Turysta wybiera się na wycieczkę w góry. Zastanawia się, co włoŝyć do plecaka. Bierze pod uwagę pidŝamy, ręczniki, szczoteczkę do zębów, kanapki z wędliną, kanapki z serem, koszule, itp. Wszystkich rodzajów przedmiotów jest T. KaŜdy ręcznik, 2 ręczniki, kanapka z serem, 3 kanapki z serem itp. generuje pewną uŝyteczność (benifit), a jednocześnie waŝy pewną ilość kilogramów. Turysta uznał, Ŝe maksymalna waga plecaka moŝe wynosić w = 40 kg. Jest to szczególny przypadek uogólnionego problemu optymalnej alokacji zasobów (zasobem jest pojemność plecaka przeliczana na kilogramy), jeśli g t (d) będzie oznaczać wagę przedmiotu t wziętego do plecaka w liczbie d sztuk, a r t (d) określa uŝyteczność wzięcia do plecaka d sztuk przedmiotu rodzaju t. Przykład 5. (przeprowadzka z Białegostoku do Warszawy). Kowalscy przeprowadzają się z Białegostoku do Warszawy. Wynajęcie duŝej cięŝarówki, którą przewieźliby wszystkie meble za jednym razem, jest kosztowne, dlatego przyjęli ofertę kuzyna, który dysponuje nieduŝym 4 z 6 2015-08-17 20:41
5 z 6 2015-08-17 20:41 samochodem transportowym i moŝe przewieźć ładunek w dwóch turach (dziś i za 3 tygodnie) jedynie po kosztach paliwa. Doradź im, które meble i urządzenia kuchenne mają zabrać w pierwszej turze, aby wystarczyły im przez 3 tygodnie, a jednocześnie zmieściły się na cięŝarówce kuzyna. Oznacza to, Ŝe suma objętości przedmiotów, które wezmą w pierwszej turze, nie moŝe przekroczyć pojemności samochodu, czyli 30 m 3. KaŜdemu meblowi i urządzeniu (zostały one ponumerowane od 1 do n), jak równieŝ grupie mebli i urządzeń tego samego rodzaju Kowalscy przyporządkowali określoną uŝyteczność, którą oznaczymy jako r i (d i ), gdzie d i oznacza liczbę mebli czy urządzeń typu i, 1 i n. Będzie to zatem zagadnienie (5)-(6), gdzie g i (d i ) oznacza objętość d i urządzeń typu i. Przykład 6. (optymalne zaplanowanie przygotowania do sesji egzaminacyjnej). Student ma do zdania egzaminy z T przedmiotów. Wie, jak wyniki egzaminów będą zaleŝeć od liczby godzin, które przeznaczy na naukę. Niestety, czas, jaki mu pozostał, nie wystarczy, aby uzyskać maksymalnie wysokie oceny ze wszystkich przedmiotów. Niech r t (d) oznacza stopień (liczony w punktach od 0 do 100), jaki uzyska student, gdy przeznaczy d godzin na przygotowywanie do egzaminu z tego przedmiotu. Jeśli g t (d) = d, a w jest liczbą godzin, jaką dysponuje student (jest to jego zasób), to nierówność (6), czyli w tym przypadku: (7) będzie oznaczać, Ŝe na przygotowywanie do wszystkich egzaminów student ma najwyŝej w godzin. Warunek (5) oznacza natomiast, Ŝe chodzi o maksymalizację sumy ocen ze wszystkich egzaminów, czyli o maksymalizację liczby (8) reprezentującą średnią ocenę ze wszystkich egzaminów. Przykład 7. Sprzedawców produktu D, którzy są zasobem firmy ABC, naleŝy przydzielić (alokacja) do T regionów. Znamy zarówno koszty g t (x t ) wysłania x t sprzedawców do regionu t, jak i wielkość sprzedaŝy r t (x t ), jaką tam uzyskają. Chodzi więc o maksymalizację przychodów ze sprzedaŝy przy zachowaniu ograniczenia gdzie w jest budŝetem firmy ABC na dany rok. Przykład 8. Władzom powiatu podlega T jednostek straŝy poŝarnej działających w regionach t, gdzie 1 t T. NaleŜy ustalić, ile wozów straŝackich (oznaczmy tę liczbę jako x t ) powinna posiadać jednostka w regionie t, aby w całym powiecie maksymalizować liczbę poŝarów w ciągu tygodnia, do których wóz straŝacki wyrusza w czasie krótszym niŝ 1 minuta od podniesienia alarmu, jeŝeli wiemy, Ŝe ta liczba w rejonie t wynosi r t (x t ). Władze powiatu muszą uwzględnić fakt, Ŝe tygodniowy koszt utrzymania x t wozów straŝackich w rejonie t wynosi g t (x t ). Chodzi więc o maksymalizację przy zachowaniu ograniczenia gdzie w jest budŝetem. Ponownie zatem mamy do czynienia z zagadnieniem typu (5)-(6). Przykład 9. Pan Michał chce dobrze zainwestować środki w wysokości 10 000 dolarów. RozwaŜa kilka moŝliwości inwestycyjnych. Doradź mu, jakie pakiety akcji poszczególnych spółek giełdowych powinien kupić (pakiet = 100 akcji), aby w optymalny sposób dokonać alokacji kapitału.
Koszt nabycia 100 akcji Oczekiwany zysk Spółka A 3000 dolarów 500 dolarów Spółka B 4000 dolarów 700 dolarów Spółka C 5000 dolarów 800 dolarów Tabela 5. MoŜliwości inwestycyjne oraz oczekiwany zysk Chodzi o taki wybór liczby pakietów (d 1 pakietów akcji spółki A, d 2 pakietów akcji spółki B oraz d 3 pakietów akcji spółki C), aby maksymalizować oczekiwane zyski z kupna akcji spółek A, B, C. Tabela 5 podaje zyski z zakupu jednego pakietu akcji. Widzimy, Ŝe dla spółki A oczekiwany zysk z zakupu jednego pakietu akcji wynosi r 1 (1) = 500, dla spółki B równy jest r 2 (1) = 700, a w przypadku spółki C r 3 (1) = 800. PoniewaŜ zyski są proporcjonalne do liczby zakupionych pakietów akcji, zachodzą równości: (9) r 1 (d) = d r 1 (1), r 2 (d) = d r 2 (1), r 3 (d) = d r 3 (1), gdzie d oznacza liczbę pakietów akcji. Pojawia się zatem następujący problem optymalizacyjny: (10) max{r 1 (d 1 ) + r 2 (d 2 ) + r 3 (d 3 )}, gdy spełnione są ograniczenia budŝetowe (11) g 1 (d 1 ) + g 2 (d 2 ) + g 3 (d 3 ) 10 000. Oznacza to, Ŝe koszty nabycia d 1 pakietów akcji spółki A, d 2 pakietów akcji spółki B oraz d 3 pakietów akcji spółki C nie mogą przewyŝszać kwoty 10 000 dolarów. W tym przykładzie koszty g 1 (d), g 2 (d), g 3 (d) spełniają warunek (9), to znaczy są proporcjonalne do liczby zakupionych pakietów akcji, dzięki czemu (10)-(11) moŝemy zapisać w postaci: (12) max{500d 1 + 700d 2 + 800d 3 }, gdy (13) 3000d 1 + 4000d 2 + 5000d 3 10 000. Rozwiązanie W tym prostym przykładzie odpowiedź moŝna zgadnąć. Widać, Ŝe zmaksymalizujemy oczekiwany zysk, gdy d 1 = 2, d 2 = 1, a d 3 = 0, uzyskując 17 000 dolarów = 2 500 + 1 700 + 0 800. Zachęcamy państwa do samodzielnego wymyślenia podobnych przykładów. Literatura 1. Guzik B., Ekonometria i badania operacyjne, Wydawnictwo Akademii Ekonomicznej w Poznaniu, Poznań, 1999. 2. Ignasiak E., Badania operacyjne, PWE, Warszawa, 1997. 3.Winston W., Operations Research: Applications and Algorithms, PWS-Kent Publishing Company, 1991. 6 z 6 2015-08-17 20:41