Narzędzia użytkownika

Narzędzia witryny


notatki:badania_operacyjne_teoria

Różnice

Różnice między wybraną wersją a wersją aktualną.

Odnośnik do tego porównania

Poprzednia rewizja po obu stronachPoprzednia wersja
Nowa wersja
Poprzednia wersja
notatki:badania_operacyjne_teoria [2025/05/16 15:07] – usunięto administratornotatki:badania_operacyjne_teoria [2025/05/16 17:32] (aktualna) administrator
Linia 1: Linia 1:
 +===== Badania operacyjne: Rozwiązywanie ZPL (zadań programowania liniowego) metodą graficzną =====
 +
 +Geogebra: {{ :notatki:zpl_graph.ggb |}}
 +
 +źródło: [[https://www.maslowski.pl/index.php?id=lekcja3|Malinowski.pl]]
 +
 +Metoda graficzna służy do rozwiązywania tylko takich zadań programowania liniowego, które mają maksymalnie 2 zmienne, gdyż tylko takie można przedstawić w układzie współrzędnych. Oto przykład takiego zadania:
 +
 +$$
 +\begin{align*}
 +\text{Maximize} \quad & z = 6x_1 + 6x_2 \\
 +\text{subject to} \quad
 +& 2x_1 + 3x_2 \leq 12 \\
 +& 4x_1 + 2x_2 \leq 16 \\
 +& x_1 \geq 0,\ x_2 \geq 0
 +\end{align*}
 +$$
 +
 +Należy rozpocząć od zaznaczenia w układzie współrzędnych obszaru danego za pomocą ograniczeń. W pierwszym kroku rysujemy układ współrzędnych (należy pamiętać o opisaniu osi oraz o zaznaczeniu skali)
 +
 +Następnie numerujemy ograniczenia. Warto to robić, szczególnie w przypadku zadań, gdy liczba ograniczeń jest większa niż 2.
 +
 +$$
 +\begin{align}
 +\text{1) } 2x_1 + 3x_2 &\leq 12 \\
 +\text{2) } 4x_1 + 2x_2 &\leq 16
 +\end{align}
 +$$
 +
 +Rysujemy pierwsze ograniczenie. Obrazem graficznym ograniczenia 1 jest półpłaszczyzna, którą należy narysować następująco:
 +Najpierw należy sporządzić wykres prostej
 +
 +\[
 +2x_1 + 3x_2 = 12
 +\]
 +
 +
 +Prosta ta przechodzi przez punkty (0,4) i (6,0). Następnie należy zdecydować, po której stronie narysowanej prostej jest właściwa półpłaszczyzna. Decyduje o tym kierunek nierówności. Należy wstawić współrzędne dowolnego punktu do równania półpłaszczyzny i sprawdzić, czy współrzędne tego punktu spełniąją dane ograniczenie. Najprościej jest wstawić współrzędne punktu (0,0). Otrzymujemy wtedy:
 +
 +\[
 +0 \leq 12
 +\]
 +
 +
 +Jest to zdanie prawdziwe, zatem punkt (0,0) należy do tej półpłaszczyzny. Półpłaszczyznę zaznaczamy strzałką.
 +
 +{{:notatki:pasted:20250516-153414.gif}}
 +
 +Analogicznie sporządzamy wykres ograniczenia 2. Także rysujemy wykres prostej:
 +
 +\[
 +4x_1 + 2x_2 = 16
 +\]
 +
 +
 +Przechodzi ona przez punkty (0,8) i (4,0). Następnie wstawiając do ograniczenia drugiego współrzędne punktu (0,0) znajdujemy właściwą półpłaszczyznę.
 +
 +\[
 +0 \leq 16
 +\]
 +
 +
 +Zatem punkt (0,0) należy do tej półpłaszczyzny. Podobnie jak w przypadku ograniczenia 1 półpłaszczyznę zaznaczamy strzałką.
 +
 +{{:notatki:pasted:20250516-153452.gif}}
 +
 +Pamiętając o ograniczeniach brzegowych, tj. x1 ≥ 0, x2 ≥ 0, zaznaczamy część wspólną wszystkich narysowanych obszarów.
 +
 +{{:notatki:pasted:20250516-153518.gif}}
 +
 +Zaznaczony obszar nosi nazwę "obszaru rozwiązań dopuszczalnych" (w skrócie "obszaru dopuszczalnego"). Zadanie polega na znalezieniu takiego punktu należącego do tego obszaru, którego współrzędne dają największą wartość funkcji celu. Jest twierdzenie, które mówi, że jeżeli zadanie programowania liniowego ma rozwiązanie skończone, to leży ono w wierzchołku obszaru dopuszczalnego. Zatem, w analizowanym zadaniu, mamy 4 punkty (wierzchołki obszaru dopuszczalnego), w których może być rozwiązanie zadania. Aby uniknąć wyznaczania współrzędnych wszystkich wierzchołków (metoda kłopotliwa szczególnie w zadaniach, w których obszar dopuszczalny ma wiele wierzchołków), należy wyznaczyć gradient funkcji celu.
 +
 +Gradient jest to wektor, który wskazuje kierunek najszybszego wzrostu funkcji. Wyznacza się go jako pochodne cząstkowe funkcji po wszystkich współrzędnych. W naszym zadaniu gradient funkcji celu będzie miał następującą postać:
 +
 +gradz=[6,6]
 +
 +Wyznaczony gradient, czyli wektor [6,6] należy zaznaczyć na rysunku.
 +
 +{{:notatki:pasted:20250516-153537.gif}}
 +
 +Następnie należy narysować prostą prostopadłą do gradientu. Jest to warstwica funkcji celu. Ma ona równanie:
 +
 +\[
 +6x_1 + 6x_2 = c
 +\]
 +
 +
 +gdzie c jest stałą. W zależności od tej stałej możemy przesuwać równolegle warstwicę po rysunku. Aby odnaleźć punkt optymalny, którego współrzędne dają nam największą wartość funkcji celu, należy warstwicę przesuwać równolegle, zgodnie z kierunkiem gradientu, aż do momentu, gdy ta warstwica będzie miała po raz ostatni punkt wspólny z obszarem rozwiązań dopuszczalnych (tak jak na poniższym rysunku).
 +
 +{{:notatki:pasted:20250516-153552.gif}}
 +
 +Przesuwana prosta prostopadła do gradientu (warstwica) ma ostatni raz punkt wspólny z obszarem dopuszczalnym w punkcie przecięcia się prostych 1 i 2. Tam też leży rozwiązanie zadania - punkt optymalny. Znajdujemy go poprzez rozwiązanie następującego układu równań:
 +
 +\[
 +\begin{cases}
 +2x_1 + 3x_2 = 12 \\
 +4x_1 + 2x_2 = 16
 +\end{cases}
 +\]
 +
 +
 +W wyniku rozwiązania powyższego układu równań otrzymujemy:
 +
 +\[
 +x_1 = 3, \quad x_2 = 2
 +\]
 +
 +
 +Zaznaczamy punkt optymalny na rysunku.
 +
 +{{:notatki:pasted:20250516-153612.gif}}
 +
 +Należy jeszcze wyznaczyć wartość funkcji celu w punkcie optymalnym:
 +
 +\[
 +z(3,2) = 3 \times 6 + 2 \times 6 = 30
 +\]
 +
 +
 +Podsumowjąc, pamiętajmy, aby rysunek wykonywać bardzo precyzyjnie, aby "trzymać" skalę, oraz aby za każdym razem rysować gradient i przesuwać prostą prostopadłą do gradientu - warstwicę (nie wolno ulegać optycznym złudzeniom :)). Należy zwrócić uwagę, że to gdzie leży punkt optymalny, zależy od nachylenia gradientu. Dla przykładu, gdyby funkcja celu miała postać:
 +
 +\[
 +z = 2x_1 + 6x_2 \to \max
 +\]
 +
 +
 +to gradient byłby wektorem [2,6], a punkt optymalny znalazłby się w punkcie (0,4). Sytuacja taka została przedstawiona na rysunku poniżej.
 +
 +{{:notatki:pasted:20250516-153632.gif}}
  
notatki/badania_operacyjne_teoria.1747400860.txt.gz · ostatnio zmienione: przez administrator