Programowanie obiektowe III rok EiT
description
Transcript of Programowanie obiektowe III rok EiT
Programowanie obiektoweIII rok EiT
dr inż. Jerzy KotowskiWykł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 Re search (Vienna, Austria), 957-963.
• Symfonia C++, Jerzy Grębosz, Oficyna Kallimach, Kraków 1999
Przykład problemu
Symulacja sieci
wodociągowej
Model matematyczny sieci wodociągowej
• Model matematyczny łuku sieci – prawo Bernoulli’ego
x
ky
d
midyykx iiiii ,,1 ,)sgn(2
d
y
x
Model matematyczny sieci wodociągowej
• Prawa Kirchhoff’a – I prawo – zachowania masy– II prawo – równania oczkowe
A y B x 0
• Oznaczenia yRm – wektor przepływów w łukachxRm – wektor spadków ciśnień w łukachRw – wektor zapotrzebowań w węzłachA – macierz incydencji, A = A(w-1)xm, aij = 0,1,-1
B – macierz oczkowa, B = B(m-w+1)xm, bij = 0,1,-1
A y B x 0
Model matematyczny sieci wodociągowej - własności
• Układ m algebraicznych równań nieliniowych z m niewiadomymi:
B x 0midyykx iiiii ,,1 ,)sgn(2
A y A y 0)( yxB
• Jak to rozwiązać?
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
P
1
2 3
1
2 3
4
1100
1010
0111
A
1110 B
Problem optymalizacji
• Idea (podstawy fizyki):Minimalizować straty przy spełnieniu warunku zachowania masy
• Sformułowanie problemu dla przypadku sieci transportowych:
minyf )(
A y
n
iiiiiii
n
iii
n
ii dyyykyxyfyf
1
3
11
)sgn()()(
(*)
Przykład 2 – z życia (druty)
R1
I1
U1
R2
I2
U2
I0
I1+I2 = I0 I prawo K.
U1-U2=0 II prawo K.
Ui = RiIi, i=1,2
Mi = UiIi, i=1,2
M = M1 + M2 min
I1 + I2 = I0
min2102
211
10211
22111
IIRIR
IIMIM
IMIMIM
010211 IIRIR
02211 IRIR
021 UU
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
0
y
L
0L
Warunki Kuhna-Tuckera dla
zadania (*)minyf )(
A y )()(),( AyyfyL T
0
TA
y
f
y
L
0
AyL
I prawo Kirchhoffa
Teoria grafów: BAT=0
xxy
yf
y
fi
i
i 33)(
/B
03
BxBAy
fB
y
LB T 0Bx
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 metody1. Rozwinąć funkcji celu w otoczeniu bieżącego optimum y* w szereg
Taylora2. Obciąć rozwinięcie należy na trzecim składniku (forma kwadratowa)3. Wyznaczyć minimum otrzymanej formy kwadratowej y’4. Przyjąć d=y’-y* jako nowy kierunek poszukiwać dla metody
poszukiwania w kierunku5. Przyjąć nowe rozwiązanie y* jako poszukiwane minimum w kierunku6. 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ą.
Zmodyfikowana metoda Newtona - opis
yHyybyfyyf T
2
1,)()(
Szereg Taylora
Oznaczenia:
yv yyy
fb
yyy
fH
2
2
HvvvbvF TT
2
1)(
Forma kwadratowa: HH T 0H
0min)(
v
F vF
Minimum formy kwadratowej
0
Hvbv
F bHv
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; // Hessianpublic: Newton(int nn,double e,double *sp=NULL); // dim, acc, st. point ~Newton(); // destructor virtual void 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
• virtual void 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ń
Przykład 3 – z życia (woda) .. \test0.sln
222
211 ykyk
k1
y1
x1
k2
y2
x2
y0
x1 = x2
2211 ykyk
y1 + y2 = y0
0
21
21 y
kk
ky
0
21
12 y
kk
ky
min3102
311
10211
22111
yykyk
yyMyM
yMyMyM
M = M1 + M2 min
y1 + y2 = y0
2102
211
1
3 yykyky
Mb
102112
2
61
yykyky
MH
H
bd bHd
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 stationspublic: 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 hesjanpublic: 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();};