Wstęp
Zadania optymalizacyjne to podstawa całej teorii sterowania. Zazwyczaj nie tylko nam chodzi, żeby osiągnąć zadany cel, ale również, aby osiągnąć go albo w najkrótszym czasie, albo z wykorzystaniem najmniejszej liczby zasobów.
Zadanie optymalizacji pojawić się może tylko wtedy, gdy możliwe jest więcej niż jedno rozwiązanie.
Minimalizacja funkcji jednej zmiennej
Problem jest – w zasadzie – bardzo prosty: należy znaleźć takie
Mówimy też, że
Funkcja może mieć wiele minimów lokalnych. Jeżeli dla
Zadanie w najogólniejszym przypadku jest bardzo trudne! Jeżeli przyjąć dodatkowe założenia – że funkcja
Jeżeli funkcja jest różniczkowalna szukanie minimum może sprowadzić się do rozwiązania równania (układu równań):
Ale, szczerze mówiąc problem sprowadza się do zastąpienia jednego trudnego zadania innym trudnym zadaniem.
Jedyna ogólna metoda aby znaleźć minimum globalne to znaleźć wszystkie minima lokalne i wybrać z nich najmniejsze. Zatem, tak na prawdę, potrzebujemy dobrych algorytmów wyszukiwania minimów lokalnych.
Na ogół
Gdy nie da się problemu rozwiązać analitycznie (na przykład rozwiązując układ równań), pozostaje stosowanie metod iteracyjnych. Jedną z nich opiszę poniżej.
Metoda złotego podziału
Zakładamy, że odcinkami ciągła funkcja funkcja
Wyliczamy wartości funkcji na końcach przedziału oraz w dwu punktach wewnętrznych
Dalsza procedura polega na tym, żeby na odcinku
Warto jednak uwzględnić fakt, że mamy już wyliczone wartości funkcji w trzech punktach:
Kolejny punkt tak dodajemy, aby kolejny (krótszy) odcinek podzielony był w sposób ,,podobny" do wyjściowego. Powinny być spełnione następujące zależności:
Dla ujednolicenia przyjmiemy
Jeżeli na pewnym etapie mamy cztery punkty
Obliczenia kończymy gdy
Naiwna metoda Monte-Carlo
Losowo wybieramy punkty z zadanego obszaru. Po kilku iteracjach (ilu?) porównujemy wartości funkcji i wybieramy najmniejszą.
Minimum funkcji wielu zmiennych
Najprostsza metoda to ,,cięcie" funkcji wielu zmiennych ,,po osiach". W każdym kierunku dokonujemy minimalizacji funkcji jednej zmiennej.
Zadania
Zaimplementować (matlab, python, C, C++, Mathematica) metodę złotego podziału i przetestować na funkcji
w przedziale , funkcji w przedziale . Zliczać liczbę obliczeń wartości funkcji do osiągnięcia zadanej dokładności. Porównać osiągnięty wynik z Naiwną Metodą Monte-Carlo (dla tej samej liczby obliczeń wartości funkcji)Powtórzyć powyższe w przypadku funkcji dwu zmiennych:
Programowanie liniowe
Programowanie liniowe to szczególny przypadek poszukiwania minimum. Funkcja celu jest liniowa, na przykład postaci:
Ponieważ natura funkcji liniowej jest taka, że jest to funkcja monotoniczna (albo maleje, albo rośnie2 wraz ze wzrostem wartości składowej
Zadanie zaczyna mieć sens, gdy wprowadzimy ograniczenia na zmienne. Najprostszy przypadek to ograniczenia w postaci zestawu nierówności:
W matlabie problem rozwiązuje funkcja linprog. Zadanie może mieć wiele różnych postaci, najprostsze to
x = linprog(f,A,b)
Zadanie z ograniczeniami nierównościowymi i równościowymi:
x = linprog(f,A,b,Aeq,beq)
Aeq
to macierz beq
to wektor
Znaleźć mamy maksimum funkcji
W Mathematici, można użyć jednej z funkcji: LinearProgramming
, FindMinimum
, FindMaximum
, NMinimize
, NMaximize
, Minimize
oraz Maximize
. Pełnię możliwości ma LinearProgramming. Opis w dokumentacji.
Ćwiczenia
Właściciel ciężarówki może przewieźć z miejscowości A do B cukier, mąkę i chipsy. W ciężarówce mieści się towar o objętości co najwyżej 7000 litrów i wadze co najwyżej 5 ton. 1 kg cukru zajmuje objętość 1,5 litra, 1 kg mąki 2 litry, natomiast 1 kg chipsów zajmuje objętość 4 litrów. Zysk od przewozu poszczególnych towarów jest następujący:
za 100 kg cukru 8 zł,
za 100 kg mąki 10 zł,
za 100 kg chipsów 25 zł.
Ile cukru, mąki i chipsów powinien załadować właściciel ciężarówki aby zmaksymalizować swój zysk? Matematyczny model tak postawionego zadania jest następujący: Oznaczmy przez:
– ilość cukru, – ilość mąki, – ilość chipsów
(za każdym razem w setkach kilogramów). Skoro ciężarówka może zabrać co najwyżej 5 ton towarów, musi zachodzić nierówność:
Z kolei ograniczenie objętości wyraża się wzorem
Zysk właściciela wynosi:
Trzeba je rozwiązać za pomocą programu linprog a następnie ,,przedyskutować" uzyskane rozwiązanie (to znaczy sprawdzić czy spełnione są wszystkie ograniczenia, i zastanowić się, czy rozwiązanie jest optymalne3…) Można również użyć Mathematici.