Zrobić trzeba jedno z poniższych (jako minimum)
Zaprogramować metodę złotego podziału szukającą minimum funkcji (bez ograniczeń), według opisu jak poniżej dla funkcji postaci
(funkcja celowo jest nieciągła). Wygląda jakoś tak:
Funkcha celu Zastosować dostępną w MATLABie aplikację do optymalizacji w trybie
problem based
i/lub
solver based
do znalezienia minimum powyższej funkcji.
- Bez ograniczeń
- Z ograniczeniami (uwzględniającymi lub nie) punkt o współrzędnej
.
Nieciągłość celowo dobrana wrednie…
Zapoznać się z funkcją
linprog()
i użyć jej do rozwiązania opisanego poniżej problemu przewozu towarów…Zamiast używania funkcji
linprog
prostsze może okazać się użycie aplikacji optymalizacji (w trybie problem based) — wystarczy wpisać funkcję celu i dwa ograniczenia.W tym przypadku można też zażądać rozwiązania całkowitoliczbowego (na „pakę” ładujemy całą paletę towaru (100 kg)).
W trybie problem based łatwo będzie zmieniać poszczególne parametry (funkcji celu, na przykład), żeby zobaczyć kiedy przesyłka będzie bardziej zrównoważona…
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:
Rozwiązanie jest następujące:
W każdej iteracji długość odcinka skraca się
Dla ujednolicenia przyjmiemy
Jeżeli na pewnym etapie mamy cztery punkty
Obliczenia kończymy gdy
Programowanie liniowe
Programowanie liniowe to szczególny przypadek poszukiwania minimum/maksimum. Funkcja celu jest liniowa, na przykład postaci:
Ponieważ natura funkcji liniowej jest taka, że jest to funkcja monotoniczna (albo maleje, albo rośnie1 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
Ćwiczenie
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. 100 kg (umówmy się, że jest to paleta) cukru zajmuje objętość 150 litrów, 100 kg mąki 200 litrów, natomiast 100 kg chipsów zajmuje objętość 400 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 (funkcja celu):
Pomijam przypadek, gdy wartość jest stała. ↩︎