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
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
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
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
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]
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 = [20 30 40] fval = 3600 exitflag = 1 output = iterations: 6 funcCount: 35 stepsize: 1 algorithm: 'medium-scale: SQP, Quasi-Newton, line-search'
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)
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 - 1000∙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
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 = [3.9277 2.2086 -0.060839] vagyis t = 3.9277·x2 + 2.2086·x – 0.060839 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')
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 = 3.9277·x2 + 2.2086·x – 0.060839
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 = [455.63 -802.75 370.03] vagyis C = 455.63·x2 - 802.75·x + 370.03 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')
a másodfokú polinom nem írja jól le a kísérleti adatokat magasabb fokú polinom szükséges
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 = [-211.28 835.93 -1006 400.71] vagyis C = -211.28 · x3 - 835.93 · x2 - 1006 · x + 400.71 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')
a harmadfokú polinom sem írja jól le a kísérleti adatokat magasabb fokú polinom szükséges
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 = [-597.32 1222.3 -356.15 -607.68 356.78] vagyis C = - 597.32 · x4 + 1222.3 · x3 - 356.15 · x2 - 607.68 · x + 356.78 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')
a negyedfokú polinom jól leírja a kísérleti adatokat, tehát C = - 597.32 · x4 + 1222.3 · x3 - 356.15 · x2 - 607.68 · x + 356.78
Az azonosított kifejezésekkel irjuk fel a célfüggvényt x függvényeként: Fcél = 1/t∙(10∙500∙x - 1000∙t - C) = = 1/ ((3.9277·x2 + 2.2086·x - 0.060839) · · (10∙500∙x - 1000∙ (3.9277·x2 + 2.2086·x - 0.060839) - - (- 597.32 · x4 + 1222.3 · x3 - 356.15 · x2 - 607.68 · x + 356.78 )) 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”
oldjuk meg a feladatot Matlab segítségével: írjuk fel a célfüggvényt: function[f] = Fcel(x) f = -(1/ (3.9277 * x^2 + 2.2086 * x - 0.060839) * ... (10 * 500 *x -1000 * (3.9277 * x^2 + 2.2086 * x - 0.060839) - ... (-597.32*x^4 + 1222.3 *x^3 -356.15*x^2 -607.68*x + 356.78))); az optimalizálási parancs: [x,fval,exitflag,output] = fmincon(@Fcel, [1], [],[],[],[], [0.2],[1]) x = 0.21696 fval = -434.74 exitflag = 1 output = iterations: 5 funcCount: 21 stepsize: 1 algorithm: 'medium-scale: SQP, Quasi-Newton, line-search'
ellenőrizzük grafikusan a profit változását a konverzió függvényében:
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 = 0.21696, az ennek megfelelő reakcióidő pedig t = 0.603 nap (a t = 3.9277·x2 + 2.2086·x – 0.060839 képlettel számolva).