Programowanie obiektowe III rok EiT

20
Programowanie obiektowe III rok EiT dr inż. Jerzy Kotowski Wykład XII

description

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ń - PowerPoint PPT Presentation

Transcript of Programowanie obiektowe III rok EiT

Page 1: Programowanie obiektowe III rok EiT

Programowanie obiektoweIII rok EiT

dr inż. Jerzy KotowskiWykład XII

Page 2: Programowanie obiektowe III rok EiT

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

Page 3: Programowanie obiektowe III rok EiT

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

Page 4: Programowanie obiektowe III rok EiT

Przykład problemu

Symulacja sieci

wodociągowej

Page 5: Programowanie obiektowe III rok EiT

Model matematyczny sieci wodociągowej

• Model matematyczny łuku sieci – prawo Bernoulli’ego

x

ky

d

midyykx iiiii ,,1 ,)sgn(2

d

y

x

Page 6: Programowanie obiektowe III rok EiT

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

Page 7: Programowanie obiektowe III rok EiT

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ć?

Page 8: Programowanie obiektowe III rok EiT

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

Page 9: Programowanie obiektowe III rok EiT

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()()(

(*)

Page 10: Programowanie obiektowe III rok EiT

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

Page 11: Programowanie obiektowe III rok EiT

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

Page 12: Programowanie obiektowe III rok EiT

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

Page 13: Programowanie obiektowe III rok EiT

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.

Page 14: Programowanie obiektowe III rok EiT

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ą.

Page 15: Programowanie obiektowe III rok EiT

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

Page 16: Programowanie obiektowe III rok EiT

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};

Page 17: Programowanie obiektowe III rok EiT

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ń

Page 18: Programowanie obiektowe III rok EiT

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

Page 19: Programowanie obiektowe III rok EiT

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};

Page 20: Programowanie obiektowe III rok EiT

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();};