Podręcznik
Wersja podręcznika: 1.0
Data publikacji: 01.01.2022 r.
Wykłady
W1…WN, odpowiadające w sumie ok. 10-12 godz. standardowego wykładu
1. Klasy problemów i pakiety optymalizujące
1.2. Modele najważniejszych klas problemów
Różnorodność problemów dyskretnych jest w zasadzie nieskończona. Wynika ona m.in. z niezwykle szerokiej gamy dziedzin, w której problemy optymalizacji dyskretnej mają zastosowanie. Jednocześnie, na najbardziej ogólnym poziomie problemy te łączy podobny cel: zwiększenie efektywności przy zachowaniu wymagań i ograniczeń na zasoby. Co więcej, często okazuje się, że problemy z różnych dziedzin wykorzystują podobne zestawy zmiennych decyzyjnych i ograniczeń, czyli dzielą podobną strukturę. Pomocne jest zatem przestudiowanie reprezentatywnych przykładów, które mogą służyć jako paradygmaty podczas modelowania i rozwiązywania innych problemów o podobnej strukturze.
Przypomnijmy przy tym, że w przypadku rozwiązywania problemów dyskretnych gotowymi solwerami duże znaczenie może mieć sformułowanie modelu, w szczególności nierzadkie są przypadki niepotrzebnie złożonego sformułowania, wprowadzającego np. nieliniowości do modelu. Tym samym, zapoznanie się z klasycznymi problemami pomoże wypracować dobre praktyki tworzenia modeli optymalizacyjnych programowania matematycznego.
Klasy problemów
Wiele problemów dyskretnych może być przedstawianych jako zadania wyznaczania przepływów w sieci, należą do nich klasyczne problemy grafowe, takie jak:
- Najkrótsze i najtańsze ścieżki, przepływy w grafach,
- Cykl komiwojażera: Traveling Salesperson Problem (TSP),
- Przydziały i skojarzenia: Assignment Problem,
- Minimalne drzewo rozpinające: Minimum spanning tree.
W tym rozdziale przedstawiamy jedynie kilka wybranych, klasycznych problemów alokacji zasobów.
Problem plecakowy: Knapsack problem
Problem plecakowy/ zadanie załadunku polega na jak najlepszym wykorzystaniu zasobu (plecaka), w którym należy upakować jak najwięcej przedmiotów.
Oznaczenia:
\(i\in N\) zbiór typów przedmiotów o wartości \(w_i\) i wielkości \(a_i\),
\(p\) pojemność plecaka (zasobu)
\(x_i\) zmienna decyzyjna ile przedmiotów typu \(i\) zapakować.
Funkcja celu: \(\max\sum_i w_i x_i\)
Ograniczenia dotyczą dostępności zasobu, oraz przedmiotów:
\(
\begin{matrix}
&&\sum_i a_i x_i\leq p,\\
&& x_i \subset C,\; \forall i\end{matrix} \)
Warianty problemu plecakowego
Problem typu plecakowego ma szerokie zastosowania w różnych dziedzinach, np. do tej kategorii zaliczamy problemy inwestycyjne i zadania alokacjai budżetu. Dodatkowe uwarunkowania prowadzą do wariantów podstawowego problemu, wyróżniamy np.:
- 0-1 Knapsack - tylko po jednej sztuce każdego towaru jest dostępne,
- Bounded knapsack - dostępna jest ograniczona liczba sztuk każdego towaru,
- Change-making - pojemność plecaka musi być w pełni wykorzystana (czyli ograniczenia na zasób w postaci równości),
- Multiple Knapsack - wiele różnych plecaków, inaczej problemy typu bin-packing, które dalej mogą być rozważane wraz z ograniczeniami kolejnościowymi, oknami czasowymi, itd.
Problem bin-packing
Problemy pakowania (i rozkroju, czyli w wariancie Cutting stock problem) najczęściej skupiają się na wykorzystaniu jak najmniejszej liczby zasobów.
Oznaczenia:
\(p_j\) pojemność pojemnika \(j\in M\),
\(x_{ij}\) zmienna decyzyjna ile przedmiotów typu \(i\) zapakować do pojemnika \(j\),
\(y_{j}\) zmienna decyzyjna czy wykorzystać pojemnik \(j\).
Funkcja celu: \(\min\sum_j y_j\)
Ograniczenia:
\( \begin{matrix} &&\sum_i a_i x_{ij}\leq p_jy_j\;\;\;\forall j\in M,\\ && \sum_jx_{ij}=1\;\forall i\in N\\ && x_{ij} \subset C,\; \forall i,j\end{matrix} \)
Dodatkowe ograniczenie zapewnia, że każdy przedmiot \(i\) zostanie zapakowany do 1 pojemnika.Przydział zadań do procesorów/dostawców do odbiorców
Szeroka klasa problemów przydziału może być postrzegana jako wariant bin-packingu. W problemie takim zasoby \(j\in M\) to np. maszyny, dostawcy, itp. Natomiast zbiór \(i\in N\) reprezentuje zbiór zdań do realizacji/obsłużenia.
Oznaczenia:
- \(a_{i}\) jest zapotrzebowaniem zadania \(i\), w wersji \(a_{ij}\) zróżnicowanym ze względu na zasoby, np. odpowiada czasowi wykonania zadania \(i\) na maszynie \(j\),
- \(f_{ij}\) jest kosztem wykonania zadania \(i\) na maszynie \(j\).
Funkcja celu minimalizuje koszty: \(\min\sum_{ij}f_{ij} x_{ij}\)
Przy ograniczeniach jak w zadaniu bin-packingu, przy czym o ile w zadaniu nie ma kosztów stałych powiązanych z wykorzystaniem maszyny to nie podrzebujemy zmiennej binarnej \(y_j\):
\( \begin{matrix} &&\sum_{ij} a_{ij} x_{ij}\leq p_j\;\;\;\forall j\in M,\\ && \sum_jx_{ij}=1\;\forall i\in N\\ && x_{ij} \subset \{0,1\},\; \forall i,j\end{matrix} \)
Problemy lokalizacyjne/dystrybucyjne
Klasycznym rozszerzenime problemu przydziału zadań do procesorów jest dodatkowe uwzględnie stałego kosztu użycia procesora. Problem tego typu jest określany jako problem lokalizacyjny, gdyż ma naturalne odzwierciedlenie w sytuacji wyboru punktów obsługi (klientów, pacjentów, mieszkańców, etc.). Problem ten posłuży nam do omówienia sposobu implementacji modeli w środowisku IBM Ilog Cplex w kolejnych rozdziałach.
Oznaczenia dodatkowe:
- \(c_{j}\) jest stałym kosztem wykorzystania zasobu \(j\) (ustanowienia zasobu w lokalizacji \(j\))
Przy ograniczeniach jak w zadaniu bin-packingu:
\( \begin{matrix} &&\sum_{ij} a_{ij} x_{ij}\leq p_jy_j\;\;\;\forall j\in M,\\ && \sum_jx_{ij}=1\;\forall i\in N\\ && x_{ij} \subset \{0,1\},\; \forall i,j\end{matrix} \)