Technológiai folyamatok optimalizálása Ráduly Botond Mészáros Sándor MATLAB ® - Optimization Toolbox
Optimalizálás eszköztár egy függvényhalmaz, amely különböző optimalizálási feladatok megoldását teszi lehetővé. könnyen használható algoritmusokat tartalmaz feltétel nélküli nemlineáris minimalizálás feltételes nemlineáris minimalizálás lineáris programozás kvadratikus programozás lineáris regresszió stb. típusú feladatokhoz
fminunc Feltétel nélküli többváltozós nemlineáris optimalizálási függvény x = fminunc(F cel,x 0,options) célfüggvény kezdeti érték beállítások Az x lokális minimumát találja meg, x 0 -ból kiindulva. A keresési paramétereket az Options tulajdonságvektor tartalmazza. Ezt az optimset paranccsal lehet kezelni. pl. F cel = x x 2 2 x 1,0 = 1 x 2,0 = 1
x = fminunc(' x(1)^2 + x(2)^2 ', x0) Az előbbi feladat Matlab szabályok szerint felírva: x0 = [1 1] clear all x = -1:0.05:1; y = -1:0.05:1; for i = 1:length(x) for j = 1:length(y) F(i,j)= (x(i)^2 + y(j)^2)/2; end surf(x,y,F)...és a megoldás: x 1 * = ·10 -8 x 2 * = ·10 -8 Grafikusan a következő módon ábrázolhatjuk:
Az F cel = x x 2 2 ábrázolása a [-1 1] intervallumon. A minimum 0-ban van, tehát x * = [0 0] (ehhez képest az fminunc algoritmus egy közelítő x* = [ ] megoldást talált)
A keresési paramétereket az optimset paranccsal lehet beállítani. Információkat az alkalmazott algoritmusról, a lépések számáról [x,fval,exitflag,output] = fminunc(' x(1)^2 + x(2)^2 ', x0) Az output mező fontosabb tulajdonságai: iterations – az elvégzett lépések száma funcCount – a célfüggvény kiszámításának száma algorithm – a használt optimalizálási algoritmus Az alkalmazott algoritmusról megvalósítását a type paranccsal lehet megnézni
fmincon Feltételes többváltozós nemlineáris optimalizálási függvény (nemlineáris programozás) Az x minimumát találja meg, x 0 -ból kiindulva. A keresési paramétereket az Options tulajdonságvektor tartalmazza. Ezt az optimset paranccsal lehet kezelni. x = fmincon(F cel,x 0,A,B,C,D,AH,FH, NLF, options) célfüggvény kezdeti megoldás egyenlőtlenség feltétel: A·x ≤ B egyenlőség feltétel: C·x = D alsó és felső határ: AH ≤ x ≤ FH nemlineáris feltétel
Feladat: minimalizáljuk az Fcel = - x 1 · x 2 ·x 3 célfüggvényt az x 0 = [ ] kezdeti megoldásból kiindulva úgy, hogy teljesüljenek a következő feltételek: -x 1 - 2· x 2 - 2·x 3 ≤ 0 x 1 + 2· x 2 + 2·x 3 ≤ 72 Megoldás: 1.az egyenlőtlenséget A·x ≤ B formára hozzuk
2.Meghatározzuk a kezdeti megoldást: x0 = [ ] [x,fval,exitflag,output] = fmincon(' -x(1) * x(2) * x(3)', x0, A, B) a megoldás: x = [ ] fval = e+003 output = iterations: 11 funcCount: 64 stepsize: 1 algorithm: 'medium-scale: SQP, Quasi-Newton, line-search' 3.Beírjuk az optimalizálási parancsot:
linprog lineáris programozási algoritmus x = linprog(F cel, A,B,C,D, AH,FH, x 0, options) célfüggvény együtthatói kezdeti megoldás egyenlőtlenség feltétel: A·x ≤ B Az x minimumát találja meg, x 0 -ból kiindulva. Ha valamelyik input ismeretlen, [ ] helyettesíti. A további keresési paramétereket az Options tulajdonságvektor tartalmazza. Ezt az optimset paranccsal lehet kezelni. egyenlőség feltétel: C·x = D alsó és felső határ: AH ≤ x ≤ FH
Feladat: minimalizáljuk az F cél = - 5·x 1 -4·x 2 -6·x 3 célfüggvényt úgy, hogy teljesüljenek a következő feltételek: x 1 - x 2 + x 3 ≤ 20 3· x 1 + 2· x 2 + 4·x 3 ≤ 42 3· x 1 + 2· x 2 ≤ 30 0 ≤ x 1, 0 ≤ x 2 0 ≤ x 3 Megoldás: 1.írjuk az együtthatókat mátrix formába f = [-5; -4; -6] A = [ ] B = [20; 42; 30] AH = [0; 0; 0]
3.Beírjuk az optimalizálási parancsot: [x,fval,exitflag,output] = linprog(f,A,B,[],[],AH); Megoldás: x * = [ ] F cél * =
Feladat: a lehető legtöbb szendvics készítése véges mennyiségű alapanyagból. Adott: 120 dkg vaj 100 dkg sonka 200 dkg sajt 20 db keménytojás korlátlan mennyiségű kenyér Szendvicstípusok és szükséges alapanyagok: AlapanyagNormál szendvicsSajtos szendvics vaj 32 sonka 31 sajt 25 tojás 1/41/2 „Szendvics” feladat
Feltételek: x 1 >= 0; x 2 ≥ 0(negatív mennyiség) 3·x 1 + 2·x 2 ≤ 120(vaj) 3·x 1 + x 2 ≤ 100(sonka) 2·x 1 + 5·x 2 ≤ 200(sajt) 1/4·x 1 + 1/2·x 2 ≤ 20(tojás) 1. A feladat matematikai megfogalmazása: Legyen a normál szendvicsek száma x 1, a sajtos szendvicsek száma x 2 A maximalizálandó célfüggvény: F cél = x 1 + x 2 F cél = - (x 1 + x 2 ) 2. A feladat típusának meghatározása, megoldási algoritmus választása: - a célfüggvény és a feltételek lineáris összefüggések lineáris programozás
A feladat felírása Matlab szabályok szerint: B = [120; 100; 200; 20] AH = [0 0] A = [3 2; 3 1; 2 5; ] f = [-1 -1] [X,FVAL,EXITFLAG,OUTPUT] = linprog(f,A,B,[],[],AH) A lineáris programozási parancs: A megoldás: x * = [20 30], F cél * = 50
quadprog kvadratikus programozási algoritmus x = quadprog(H, F, A, B, C, D, AH, FH, x 0, options) célfüggvény együtthatói kezdeti megoldás egyenlőtlenség feltétel: A·x ≤ B egyenlőség feltétel: C·x = D alsó és felső határ: AH ≤ x ≤ FH négyzetes együtthatók
Feladat: Egy cégnek három részlege van (R1, R2, R3) és alapanyaggal két beszállító (B1,B2) látja el. A szállítási költségek, a rendelkezésre álló illetve a szükséges alapanyag-mennyiség az alábbi táblázatban láthatóak: Szállítási költség (RON/t) B1B2Szükséges mennyiség (t) R R R Rendelkezésre áll (t) 7040 Szállítás optimalizálása MB1 = m 1,1 + m 1,2 + m 1,3 (B1 által szállított anyagmennyiség, t) MB2 = m 2,1 + m 2,2 + m 2,3 (B2 által szállított anyagmennyiség, t) C1 = 20·m 1,1 + 30·m 1,2 + 20·m 1,3 (a teljes szállítási költség B1-től, RON) C2 = 30·m 2,1 + 35·m 2,2 + 25·m 2,3 (a teljes szállítási költség B1-től, RON)
MR1 = m 1,1 + m 2,1 (az R1-hez szállított anyagmennyiség, t) MR2 = m 1,2 + m 2,2 (az R2-hez szállított anyagmennyiség, t) MR3 = m 1,3 + m 2,3 (az R2-hez szállított anyagmennyiség, t) A minimalizálandó célfüggvény: F cél = C 1 + C 2 Ha m 1,1 = x 1, m 1,2 = x 2, m 1,3 = x 3, m 2,1 = x 4, m 2,2 = x 5 és m 2,3 = x 6, akkor F cél = 20 · x · x · x · x · x · x 6 Feltételek: x 1 + x 2 + x 3 ≤ 70 x 4 + x 5 + x 6 ≤ 40 x 1 + x 4 = 60 x 2 + x 5 = 15 x 3 + x 6 = 30 x 1, x 2, x 3, x 4, x 5, x 6 ≥ 0
f=[ ] A=[ ; ] B=[70; 40] C=[ ; ; ] D=[60; 15; 30] lineáris összefüggések linprog [X,FVAL,EXITFLAG,OUTPUT] = linprog(f,A,B,C,D,AH)