200 likes | 350 Views
Programowanie obiektowe III rok EiT. dr inż. Jerzy Kotowski Wykład XII. Program wykładu. Język C++ Przykład problemu Model matematyczny zadania symulacji Transformacja zadania do problemu statycznej optymalizacji wypukłej bez ograniczeń
E N D
Programowanie obiektoweIII rok EiT dr inż. Jerzy Kotowski Wykład XII
Program wykładu • Język C++ • Przykład problemu • Model matematyczny zadania symulacji • Transformacja zadania do problemu statycznej optymalizacji wypukłej bez ograniczeń • Opis algorytmu rozwiązania zadania optymalizacji – metoda Newtona • Opis programu obliczeniowego • Podstawy języka JAVA • Klasówka
Literatura • Klempous R., Kotowski J. (1988). Some models for Water Distribution Systems. Journal of Computational and Applied Mathematics, 26, 257-269. • Klempous R., Kotowski J. (1991). Nonlinear transport network design.Journal of Computational and Applied Mathematics,35, 269-275. • Klempous R., Kotowski J., Nikodem J. (1994). System Approach to the Water Distribution Problems In: Proceedings of the Twelfth European Meeting on Cybernetics and Systems Research (Vienna, Austria), 957-963. • Symfonia C++, Jerzy Grębosz, Oficyna Kallimach, Kraków 1999
Przykład problemu Symulacja sieci wodociągowej
x d y k d x y Model matematyczny sieci wodociągowej • Model matematyczny łuku sieci – prawo Bernoulli’ego
Model matematyczny sieci wodociągowej • Prawa Kirchhoff’a • I prawo – zachowania masy • II prawo – równania oczkowe • Oznaczenia yRm – wektor przepływów w łukach xRm – wektor spadków ciśnień w łukach Rw – wektor zapotrzebowań w węzłach A – macierz incydencji, A = A(w-1)xm, aij = 0,1,-1 B – macierz oczkowa, B = B(m-w+1)xm, bij = 0,1,-1
Model matematyczny sieci wodociągowej - własności • Układ m algebraicznych równań nieliniowych z m niewiadomymi: • Jak to rozwiązać?
2 3 4 2 3 1 1 P Przykład 1 w = 4 / 0 – pompownia m = 4 m-w+1 = 1 / jedno oczko • I prawo Kirchhoffa y1 – y2 – y3 = 1 y2 - y4 = 2 y3 + y4 = 3 • III prawo Kirchhoffa x2 – y3 + x4 = 0 • Cztery równania z czterema niewiadomymi y1, y2, y3, y4
Problem optymalizacji • Idea (podstawy fizyki):Minimalizować straty przy spełnieniu warunku zachowania masy • Sformułowanie problemu dla przypadku sieci transportowych: (*)
I1 R1 I0 U1 I2 R2 U2 Przykład 2 – z życia (druty) M = M1 + M2 min I1 + I2 = I0 I1+I2 = I0 I prawo K. U1-U2=0 II prawo K. Ui = RiIi, i=1,2 Mi = UiIi, i=1,2
Warunki Kuhna-Tuckera • II prawo Kirchhoffa nie pojawiło się przypadkiem. • Prawo to można wyprowadzić jako pewną transformację warunków optymalności Kuhna-Tuckera dla zadania (*): • Lagrangian: L(y,)=f(y)+ Tg(y) • gdzie yRn • a g(y)Rm to ograniczenia w postaci g(y)=0 • Warunki Kuhna-Tuckera:jeżeli y* jest optymalnym rozwiązaniem zadania (*) to wtedy
Warunki Kuhna-Tuckera dla zadania (*) /B I prawo Kirchhoffa Teoria grafów: BAT=0 II prawo Kirchhoffa
Wniosek • W celu symulacji cyfrowej rozpływów w nieliniowej sieci transportowej (gaz, woda, etc.) można zamiast rozwiązywania układu równań nieliniowych typu I i II prawo Kirchhoffa rozwiązać problem optymalizacji statycznej z wypukłą funkcją celu oraz z liniowymi ograniczeniami równościowymi (I prawo Kirchhoffa). • Problem optymalizacji można zredukować. • Idea redukcji polega na rozwikłaniu ograniczeń liniowych i dokonaniu odpowiednich podstawień w funkcji celu. • Liczba zmiennych w problemie zredukowanym jest równa liczbie oczek w sieci (metoda prądów oczkowych) • Problem zredukowany jest wypukłym zadaniem optymalizacji statycznej i może być rozwiązywany z wykorzystaniem wielu metod optymalizacji statycznej.
Zmodyfikowana metoda Newtona • Własności metody • Służy do rozwiązywania zadań programowania matematycznego bez ograniczeń • Wymaga znajomości gradientu i hesjanu optymalizowanej funkcji celu • Schemat metody • Rozwinąć funkcji celu w otoczeniu bieżącego optimum y* w szereg Taylora • Obciąć rozwinięcie należy na trzecim składniku (forma kwadratowa) • Wyznaczyć minimum otrzymanej formy kwadratowej y’ • Przyjąć d=y’-y* jako nowy kierunek poszukiwać dla metody poszukiwania w kierunku • Przyjąć nowe rozwiązanie y* jako poszukiwane minimum w kierunku • Jeżeli nie osiągnięto zadanej dokładności obliczeń to powrócić do 1. • Idea metody • Dla problemów programowania wypukłego proces wyznaczania optimum przedstawiony w kroku trzecim sprowadza się do rozwiązania układu równań liniowych z symetryczną i dodatniookreśloną macierzą.
Oznaczenia: Zmodyfikowana metoda Newtona - opis Szereg Taylora Forma kwadratowa: Minimum formy kwadratowej
Klasa Newton class Newton // optimization method { protected: int n; // problem dimension double eps; // accuracy double *x; // solution double *d; // step double *grad; // gradient double **hes; // Hessian public: Newton(int nn,double e,double *sp=NULL); // dim, acc, st. point ~Newton(); // destructor virtualvoid gradient_and_hesjan(void)=0; // gradient & Hessian void Euler_method(); // linear problem void step(); // particular step void method(); // optimization procedure void show_solution(); // result of calculation };
Metoda Newtona - funkcje składowe • Newton(int nn,double e,double *sp=NULL); • konstruktor: liczba zmiennych, test stopu, punkt startowy • sp=NULL – start z początku układu współrzędnych • ~Newton(); • destruktor • virtualvoid gradient_and_hesjan(void)=0; • czysta funkcja wirtualna, wyznacza gradient i hesjan w klasie pochodnej • void Euler_method(); • rozwiązuje układ równań z symetryczną i dodatnio określoną macierzą • void step(); • jeden krok metody optymalizacji • void method(); • procedura optymalizacji z testem stopu na długość gradientu • void show_solution(); • Wyniki obliczeń
y1 k1 y0 x1 y2 k2 x2 Przykład 3 – z życia (woda) .. \test0.sln M = M1 + M2 min y1 + y2 = y0 x1 = x2 y1 + y2 = y0 Program woda1.cpp
Program Symulacja – klasa ‘network’ class network { protected: int n_arcs;// number of arcs int n_nodes;// number of nodes int n_pumping_st;// number of pumping stations int n_consumers;// number of water consumers int n_reduced;// dimension of the reduced problem n_pipe *pipes;// pipes node *nodes;// nodes pumping_station *p_stations;// pumping stations public: network(int na=10,int nn=11,int np=1);// constructor ~network();// destructor void ini_streams0(char *str0);// setting reduced problem void parameters(pump_parameters *ip, int *nm,int (*str)[2],double *res,double *needs,double *altitudes,char *str0,char *top0); void output_p(double *o_p);// output from pumping stations void flows_in_network();// the full flow in network void preassures_in_pumping_stations();// minimal pressures network &operator!(void);// report on the screen void network_state(state *st);// show state of the network };
Klasa ‘Simulation’ ../../Visual%20Studio%20Projects/woda2 • Dziedziczenie wielobazowe – publiczne • void gradient_and_hesjan(); - czysta funkcja wirtualna w klasie bazowej • Idea przykładu: problem + metoda = program obliczeniowy class Simulation:public network,public Newton { char *desc_gradient; // description of gradient char *desc_hesjan; // description of hesjan public: Simulation(int na,int nn,int np,double e,double *sp); ~Simulation(); void ini_gradient_and_hesjan(char *g,int dg,char *h,int dh); void gradient_and_hesjan(); };