Előadást letölteni
Az előadás letöltése folymat van. Kérjük, várjon
1
Technológiai folyamatok optimalizálása
Optimalizálási feladatok megoldása MATLAB segítségével Ráduly Botond Mészáros Sándor
2
Feladat: Adott 3 párhuzamosan működtetett reaktor, egyenként 10, 15 illetve 20 m3 térfogatúak. Mindhárom reaktorban ugyanaz az elsőrendű reakció megy végbe: A B, a rekcióállandó k A három reaktor összesen Q0 = 90 m3/h térfogatáramú, CA0 koncentrációjú nyersanyaggal van táplálva. Határozzuk meg a reaktorok bemenő térfogatáramát úgy, hogy az A konverziója maximális legyen. Q0, C0 Q1 Q2 Q3 V1 V2 V3 CA,1 CA,2 CA,3 Q0 = Q1 +Q2 +Q3 = 90 V1 = 10 V2 = 15 V3 = 20
3
Megoldás: meghatározzuk a célfüggvényt: Fcél = Q1·CA1 + Q2·CA2 + Q3·CA3 Felírjuk az anyagmérlegeket a reaktorokra: Q1·CA0 = V1 · CA1 · k Q2·CA0 = V2 · CA2 · k Q3·CA0 = V3 · CA3 · k Q1·CA0 / (V1 · k) = CA1 Q2·CA0 /( V2 · k )= CA2 Q3·CA0 /( V3 · k) = CA3 Fcél = (CA0 / k) ·(Q12/V1 + Q22/V2 + Q32/V3) Q1 +Q2 +Q3 = 90
4
2. megvizsgáljuk a célfüggvény és az egyenlőség típusát, meghatározzuk a feladattípust
- a célfüggvény nemlineáris, a feltételek lineáris összefüggések nemlineáris optimalizálás lineáris feltételekkel „fmincon” ellenőrizzük az fmincon függvény paramétereit
5
x = fmincon(Fcel,x0,A,B,C,D,AH,FH, NLF, options)
[ ],[ ] x = fmincon(Fcel,x0,A,B,C,D,AH,FH, NLF, options) célfüggvény nemlineáris feltétel kezdeti megoldás alsó és felső határ: AH ≤ x ≤ FH egyenlőség feltétel: C·x = D egyenlőtlenség feltétel: A·x ≤ B 3. Felírjuk a célfüggvényt: ‘2*x(1)^2 + 4/3*x(2)^2 + x(3)^2’ 4. Meghatározunk egy kezdeti megoldást, pl. x0 = [1 1 1]
6
5. Meghatározunk az egyenlőség típusú feltétel együtthatóit úgy, hogy C·x = D
C = [1 1 1] D = [90] 6. Beírjuk az optimalizálási parancsot: [x,fval,exitflag,output] = fmincon(' ‘2*x(1)^2 + 4/3*x(2)^2 + x(3)^2’, x0, [],[],C, D) a megoldás: x = [ ] fval = 3600 exitflag = 1 output = iterations: 6 funcCount: 35 stepsize: 1 algorithm: 'medium-scale: SQP, Quasi-Newton, line-search'
7
Feladat: Adott egy szakaszos reaktor amely egy szűrőegységhez kapcsolódik. A reakció t napot tart, ezután a reaktor tartalma a szűrőbe töltődik. A keletkező termék mennyisége a t reakcióidőtől függ és x tömegaránnyal jellemezhető (kg termék/kg töltet). A szűrés hatásfoka a termék tömegarányától (vagyis az x értékétől függ). A reaktor működtetési költsége 1000 euro/nap, a termék ára 10 euro/kg. Egy töltet tömege 500 kg. A t és x közötti összefüggést az alábbi kísérleti görbe mutatja: 1 1 x x 2 4 6 100 200 300 t a szűrés költsége (C)
8
Találjuk meg azt a t reakcióidőt amely maximalizálja a profitot
A célfüggvény: profit = Fcél = 1/t∙(10∙500∙x ∙t – C) amely a görbék segítségével kifejezhető az x függvényében. A célfüggvény tehát nem fejezhető ki analitikusan, de kiszámítható az értéke, illetve egy polinomiális regresszió segítségével megközelíthető. a kísérleti görbék adatai: x 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1 t (h) 1.4 2 2.7 3.5 4.3 5.1 6 Cszűrés (euro) - 230 170 120 80 50 32 25 20 18 felrajzolni a plot(t,x,’*’) paranccsal lehet
9
1. Defineáljuk az x, t és C vektorokat
2. Határozzuk meg a t = f(x) függvény együtthatóit. Az erre szolgáló Matlab parancs: p = polyfit(x,t,2), ahol 2 a regresszióhoz használt polinom rangja megoldás: p = [ ] vagyis t = ·x ·x – ellenőrizzük a megoldás helyességét: f = polyval(p,x) majd rajzoljuk fel a kapott eredményt plot (T,x,'*', f,x,':') legend('kiserleti adatok','modell') xlabel(‘t, [euro/500 kg]') ylabel('konverzio')
10
a másodfokú polinom jól leírja a kísérleti adatokat t = 3
a másodfokú polinom jól leírja a kísérleti adatokat t = ·x ·x –
11
3. Határozzuk meg a C = f(x) függvény együtthatóit a már ismertetett módon. Az erre szolgáló Matlab parancs: p = polyfit(x(3:end),C,2) megoldás: p = [ ] vagyis C = ·x ·x ellenőrizzük a megoldás helyességét: f = polyval(p,x) majd rajzoljuk fel a kapott eredményt: plot (C,x(3:end),'*', f,x,':') legend('kiserleti adatok','modell') xlabel('C, [euro/500 kg]') ylabel('konverzio')
12
a másodfokú polinom nem írja jól le a kísérleti adatokat magasabb fokú polinom szükséges
13
Határozzuk meg a C = f(x) harmadfokú polinom együtthatóit a már ismertetett módon. Az erre szolgáló Matlab parancs: p = polyfit(x(3:end),C,3) megoldás: p = [ ] vagyis C = · x · x · x ellenőrizzük a megoldás helyességét: f = polyval(p,x) majd rajzoljuk fel a kapott eredményt: plot (C,x(3:end),'*', f,x,':') legend('kiserleti adatok','modell') xlabel('C, [euro/500 kg]') ylabel('konverzio')
14
a harmadfokú polinom sem írja jól le a kísérleti adatokat magasabb fokú polinom szükséges
15
Határozzuk meg a C = f(x) negyedfokú polinom együtthatóit a már ismertetett módon. Az erre szolgáló Matlab parancs: p = polyfit(x(3:end),C,4) megoldás: p = [ ] vagyis C = · x · x · x · x ellenőrizzük a megoldás helyességét: f = polyval(p,x) majd rajzoljuk fel a kapott eredményt: plot (C,x(3:end),'*', f,x,':') legend('kiserleti adatok','modell') xlabel('C, [euro/500 kg]') ylabel('konverzio')
16
a negyedfokú polinom jól leírja a kísérleti adatokat, tehát
C = · x · x · x · x
17
Az azonosított kifejezésekkel irjuk fel a célfüggvényt x függvényeként:
Fcél = 1/t∙(10∙500∙x ∙t - C) = = 1/ ((3.9277·x ·x ) · · (10∙500∙x ∙ (3.9277·x ·x ) - - ( · x · x · x · x )) 5. Írjuk fel a feltételeket: 1 ≥ x ≥ 0.2 6. megvizsgáljuk a célfüggvény és az egyenlőség típusát, meghatározzuk a feladattípust nemlineáris optimalizálás alsó és felső határral „fmincon”
18
oldjuk meg a feladatot Matlab segítségével:
írjuk fel a célfüggvényt: function[f] = Fcel(x) f = -(1/ ( * x^ * x ) * ... (10 * 500 *x * ( * x^ * x ) - ... ( *x^ *x^ *x^ *x ))); az optimalizálási parancs: [x,fval,exitflag,output] = [1], [],[],[],[], [0.2],[1]) x = fval = exitflag = 1 output = iterations: 5 funcCount: 21 stepsize: 1 algorithm: 'medium-scale: SQP, Quasi-Newton, line-search'
19
ellenőrizzük grafikusan a profit változását a konverzió függvényében:
20
az optimális konverzió az adott keresési tartományban tehát x = 0
az optimális konverzió az adott keresési tartományban tehát x = , az ennek megfelelő reakcióidő pedig t = nap (a t = ·x ·x – képlettel számolva).
Hasonló előadás
© 2024 SlidePlayer.hu Inc.
All rights reserved.