Metody optymalizacji Laboratorium: sprawdzian MATLAB 13 czerwca 2016 r. godz. 16.15-17.45 PROSZĘ UWAŻNIE PRZECZYTAĆ PONIŻSZE ZASADY! Proszę się podpisać na tej stronie. Czas pracy: studentowi przysługuje nie więcej niż 90 minut. Można używać dowolnych materiałów pomocniczych przyniesionych ze sobą, zaglądać do Internetu itd. Jednakże: nie wolno zachowywać się głośno, porozumiewać się z innymi piszącymi, nie wolno używać telefonu komórkowego czy tp. Porozumiewać można się tylko z prowadzącymi. Przed przystąpieniem do wykonania pracy warto skonsultować z prowadzącymi, czy dobrze zrozumiało się oczekiwania odnośnie do wykonywanego zadania. Jeśli nie wie się, jak zrealizować zadanie w 100%, warto mimo wszystko próbować zrealizować przynajmniej wybrane elementy zadania Uzyskane wyniki należy przed wyjściem przesłać e-mailem (w postaci spakowanego katalogu o nazwie według wzorca: imie-nazwisko.zip) do prowadzących na adresy: piotr.cholda@agh.edu.pl, rzym@kt.agh.edu.pl oraz kamisinski@kt.agh.edu.pl. E-maila należy zatytułować według następującego wzorca: [MetOpt-laboratorium] <Imię Nazwisko>: sprawdzian nr 2. Przed opuszczeniem sali należy prowadzącemu oddać niniejszą kartkę. Na odwrocie kartki (ew. na dołączonych kartkach) należy umieścić sformułowanie matematyczne modelu optymalizacyjnego. Imię i nazwisko:............................................ E-mail:............................................ Zadanie (17 pkt.) Należy przedstawić sformułowanie zadania programowania matematycznego, które posłuży do rozwiązania problemu optymalizacyjnego opisanego za pomocą poniższych warunków. Sformułowanie ma mieć charakter możliwie ogólny, tj. należy je przygotować w taki sposób, żeby łatwo można było zmienić dane. Następnie sformułowanie to należy zaimplementować z użyciem funkcji oraz skryptu/skryptów programu MATLAB (implementować można równocześnie z przygotowywaniem sformułowania). Poza znalezieniem rozwiązania optymalnego skrypt powinien również w eleganckiej formie podać rozwiązanie. Projektujemy sieć dostępową, w której odbiorcy końcowi są stacjonarni. Interesuje nas umiejscowienie koncentratora, który łączy się z centralą z użyciem światłowodu (koszt zaciągnięcia kilometra to 15 jednostek pieniężnych), a z odbiorcami końcowymi łączy się z użyciem kabli miedzianych (koszt kilometra kabla miedzianego to 50 jednostek pieniężnych). Znamy lokalizacje odbiorców końcowych oraz centrali. Ze względów technicznych zakładamy, że odległość koncentratora od pojedynczego odbiorcy nie może przekraczać 350 m. W jaki sposób najtaniej umiejscowić koncentrator? Współrzędne odbiorców końcowych: 1. odbiorca nr 1: (0,7386; 0,7690), 2. odbiorca nr 2: (0,5860; 0,5814), 3. odbiorca nr 3: (0,2467; 0,9283), 4. odbiorca nr 4: (0,6664; 0,5801), 5. odbiorca nr 5: (0,0835; 0,0170), 6. odbiorca nr 6: (0,6260; 0,1209), 7. odbiorca nr 7: (0,6609; 0,8627), 8. odbiorca nr 8: (0,7298; 0,4843), 9. odbiorca nr 9: (0,8908; 0,8449), 10. odbiorca nr 10: (0,9823; 0,2094). Współrzędne podano w km względem centrali traktowanej jako położona w punkcie (0, 0). - Strona 1
Metody optymalizacji Laboratorium: sprawdzian MATLAB 13 czerwca 2016 r. godz. 16.15-17.45 Model matematyczny zagadnienia: Strona 2
Sposób rozwiązywania przykładowego zadania ze sprawdzianu z użycia oprogramowania MATLAB Kroki postępowania 1. Podpisanie się na kartce. 2. Analiza zadania polegająca na wyodrębnieniu treści ważnych z punktu widzenia modelowania optymalizacyjnego. 3. Zapisanie modelu matematycznego i naniesienie go na kartkę z zadaniem. 4. Utworzenie skryptu odpowiadającego za zapisanie danych, wywołanie funkcji służącej do optymalizacji oraz za prezentację wyników. 5. Utworzenie plików z funkcją celu i funkcjami ograniczeń. 6. Wysłanie e-maila z rozwiązaniem do prowadzących oraz oddanie kartki. Analiza zadania Najpierw należy zwrócić uwagę na istotne informacje, które posłużą do wypracowania modelu matematycznego zadania optymalizacji tj. na elementy, które należy wyabstrahować z historyjki : Projektujemy sieć dostępową, w której odbiorcy końcowi są stacjonarni. Interesuje nas umiejscowienie koncentratora, który łączy się z centralą z użyciem światłowodu (koszt zaciągnięcia kilometra to 50 jednostek pieniężnych), a z odbiorcami końcowymi łączy się z użyciem kabli miedzianych (koszt kilometra kabla miedzianego to 5 jednostek pieniężnych). Znamy lokalizacje odbiorców końcowych oraz centrali. Ze względów technicznych zakładamy, że odległość koncentratora od pojedynczego odbiorcy nie może przekraczać 350 m. W jaki sposób najtaniej umiejscowić koncentrator? Oczywiście interesują nas konkretne wartości liczbowe związane z lokalizacją odbiorców (podane współrzędne) oraz informacja, że: Współrzędne podano w km względem centrali traktowanej jako położona w punkcie (0, 0). Interpretacja wyróżnionych fragmentów: stacjonarni... umiejscowienie... Znamy lokalizacje: można domyśleć się, że chodzi o pewien problem lokalizacji nowego punktu, wiemy też że znane lokalizacje się nie zmieniają; łączy się z centralą... koszt... kilometra... 50 jednostek: należy uwzględnić współrzędne punktu (nazywanego centralą, ale to jest tylko część historyjki ), ponadto odległość będzie przemnażana przez koszt 50 km 1 ; z odbiorcami końcowymi łączy się... koszt kilometra... 5 jednostek: należy uwzględnić drugi typ punktów (nazywanych odbiorcami końcowymi też tylko element historyjki ), odległość od których ma być przemnażana przez koszt 5 km 1 ; zakładamy, że odległość koncentratora od pojedynczego klienta nie może przekraczać 350 m: jeśli przyjęliśmy km jako podstawową jednostkę (por. wyżej), to musimy wprowadzić ograniczenie górne na pojedynczą odległość nowego punktu od każdego punktu drugiego typu ( odbiorców ) o wartości 0,35; współrzędne podano w km względem... w punkcie (0, 0): podstawowa jednostka dla współrzędnych to wcześniej założony km, ponadto znamy również położenie punktu zwanego centralą. Zapis matematyczny problemu Wiadomo, że należy użyć programowania matematycznego. W tym przypadku posłużymy się programowaniem nieliniowym. Państwo znają sformułowanie problemu najlepszej lokalizacji (problem Fermata-Webera), który służy do znalezienia punktu położonego średnio najbliżej ze względu na zadaną grupę punktów. Odległość jest mierzona z użyciem metryki euklidesowej. Zapis problemu zależy od następujących stałych:
lokalizacje odbiorców indeksujemy jako k = 1, 2,..., K; współrzędne lokalizacji odbiorcy k oznaczymy jako (x k, y k ); koszt związany z odległościami od odbiorców to c k ; koszt związany z odległością od centrali to c e ; ograniczenie górne na odległość od pojedynczego odbiorcy będziemy reprezentować jako d. Jako zmienne oznaczające współrzędne poszukiwanego punktu lokalizacji koncentratora przyjmiemy (x, y). Podstawowy problem Fermata-Webera zapisuje się matematycznie w postaci: min k=1,2,...,k (x xk ) 2 + (y y k ) 2 s.t.: x, y R Podane wyżej sformułowanie należy poszerzyć o następujące elementy: modyfikacja funkcji celu uwzględniająca odległość od punktu zwanego centralą o współrzędnych (0, 0) oraz o koszty odległości: min c e x2 + y 2 + c k k=1,2,...,k (x xk ) 2 + (y y k ) 2 ; ograniczenia górne na odległości od punktów zwanych odbiorcami : (x xk ) 2 + (y y k ) 2 d dla k = 1, 2,..., K. W związku z tym całość sformułowania (należy je zapisać na drugiej stronie kartki z zadaniem) wygląda następująco: min c e x2 + y 2 + c k k=1,2,...,k (x xk ) 2 + (y y k ) { 2 (x xk ) s.t.: 2 + (y y k ) 2 d k = 1, 2,..., K x, y R Implementacja z użyciem MATLAB Najpierw tworzymy plik ze skryptem, w którym podamy dane. Następnie, w związku z tym, że z danych będą korzystały funkcje zdefiniowane na zewnątrz skryptu, dane zostaną zapisane na dysku. Skrypt będzie odpowiedzialny za wywołanie funkcję służącej do optymalizacji oraz za graficzną prezentację wyniku. Listingi poszczególnych część rozwiązania uzupełniono o objaśniania w komentarzach (bez użycia polskich znaków). Plik zawierający skrypt: 1 close all 2 clear all 3 clc 4 5 number_ points = 10; 6 % mamy 10 odbiorcow, K =10 7 8 cost_ fiber = 50; 9 % koszt zaciagniecia kilometra swiatlowodu, c_e 10 11 cost_ copper = 5; 12 % koszt kilometra kabla miedzianego, c_k 13 14 max_ distance_ copper = 0. 35; 15 % maksymalna odleglosc koncentratora od odbiorcy, d 16 17 xcoord = [ 0. 7386 0. 5860 0. 2467 0. 6664 0. 0835 0. 6260 0. 6609 0.7298 0.8908 0.9823]; 18 % wspolrzedne odbiorcow, x_k 19 20 ycoord = [ 0. 7690 0. 5814 0. 9283 0. 5801 0. 0170 0. 1209 0. 8627 0.4843 0.8449 0.2094]; 21 % wspolrzedne odbiorcow, y_k 22 23 save ( dane, xcoord, ycoord, cost_fiber, cost_copper, max_distance_copper ); 24 25 scatter ( xcoord, ycoord ) 26 % rysujemy lokalizacje odbiorcow 27 2
28 hold on 29 scatter (0,0, h, filled, blue ) 30 % rysujemy lokalizacje centrali 31 32 fun = @ obj_ fermat_ weber ; 33 % funkcja celu zdefiniowana w odrebnym pliku 34 35 x0 = [0.5 0.5]; 36 % w zwiazku z tym, ze wszystkie wspolrzedne mieszcza sie w przedziale 37 % [0,1], warto zaczac szukac od,, srodka, bo przy duzej liczbie punktow i 38 % braku wag zwiazanych z odleglosciami wiadomo, ze to byloby rozwiazanie 39 % optymalne 40 41 A = []; 42 b = []; 43 Aeq = []; 44 beq = []; 45 % nie uzywamy w ogole ograniczen liniowych 46 47 lb = [ min ( xcoord ) min ( ycoord )]; 48 % z natury problemu wynika, ze najmniejsza wartosc zmiennej x nie bedzie 49 % nizsza od minimum po wszystkich x_k, analogicznie dla y 50 51 ub = [ max ( xcoord ) max ( ycoord )]; 52 % z natury problemu wynika, ze najwieksza wartosc zmiennej x nie bedzie 53 % nizsza od maksimum po wszystkich x_k, analogicznie dla y 54 55 nonlcon = @ constr_ fermat_ weber ; 56 % funkcje ograniczen zdefiniowane w odrebnym pliku 57 58 options. Algorithm = interior - point ; 59 % w przypadku uzywania ograniczen warto zmienic domyslny algorytm 60 % rozwiazywania 61 62 options. MaxFunEvals = 5000; 63 % maksymalna dopuszczalna liczba iteracji algorytmu minimalizacji 64 65 [x,fval, exitflag, output, lambda,grad, hessian ] = fmincon (fun,x0,a,b,aeq,beq,lb,ub, nonlcon, options ); 66 % warto pamietac, ze funkcja fmincon sluzy do minimalizacji, czyli gdybysmy 67 % potrzebowali maksymalizowac funkcje celu, nalezy ja przemnozyc przez ( -1) 68 69 optimal_ variables = x 70 % optymalne wartosci funkcji celu, uwaga : x to jest caly wektor wartosci 71 % zmiennych, a nie tylko " x" z naszego opisu matematycznego 72 % ( w ktorym " x" oznacza tylko pierwsza wspolrzedna lokalizacji koncentratora ) 73 74 optimal_ goal = fval 75 % optymalna wartosc funkcji celu, gdyby problem mial charakter 76 % maksymalizacji, nalezaloby ja przemnozyc przez ( -1) 77 78 scatter (x (1),x (2), d, filled, red ) 79 % rysujemy lokalizacje koncentratora Plik zawierający funkcję celu: 1 function [ total_weighted_euclidean_distance ] = obj_fermat_weber ( position ) 2 % wektor position to z punktu widzenia naszego opisu ( x, y) 3 4 load ( dane, xcoord ); 5 load ( dane, ycoord ); 6 load ( dane, cost_fiber ); 3
7 load ( dane, cost_copper ); 8 9 weig_center = cost_fiber * sqrt ( position (1) ^2+ position (2) ^2) ; 10 % wazona wartosc odleglosci centrali od koncentratora 11 12 distx = ( position (1) - xcoord ).^2; 13 % wektor wartosci ( x- x_k ) ^2 14 15 disty = ( position (2) - ycoord ).^2; 16 % wektor wartosci ( y- y_k ) ^2 17 18 distxy = sqrt ( distx + disty ); 19 % wektor odleglosci koncentratora od poszczegolnych odbiorcow 20 21 weig_distxy = cost_copper * sum ( distxy ); 22 % wazona wartosc odleglosci odbiorcow od koncentratora 23 24 total_weighted_euclidean_distance = weig_center + weig_distxy ; 25 % wartosc funkcji celu : bedzie minimalizowana 26 27 end Plik zawierający funkcje opisujące lewą stronę ograniczeń (używamy tylko ograniczeń nierównościowych): 1 function [ c, ceq ] = constr_ fermat_ weber ( position ) 2 3 load ( dane, xcoord ); 4 load ( dane, ycoord ); 5 load ( dane, max_distance_copper ); 6 7 c = []; 8 9 for i =1: length ( xcoord ) 10 % dodajemy po ograniczeniu na kazdego odbiorce 11 distx = ( position (1) - xcoord (i)) ^2; 12 disty = ( position (2) - ycoord (i)) ^2; 13 distxy = sqrt ( distx + disty ); 14 lhs_ constraint = distxy - max_ distance_ copper ; 15 c = [ c lhs_ constraint ]; 16 end 17 18 ceq = []; 19 % brak ograniczen rownosciowych 20 21 end Oddawanie rozwiązania Na koniec należy: wysłać paczkę z projektem do prowadzących (projekt ma być spakowany, a e-mail powinien mieć nadany odpowiedni tytuł); oddać kartę z zadaniem. 4