90 likes | 258 Views
Optimalization Toolbox. Fmincon(). Štefan Kolesár. Inputs. x, b, beq, lb, ub sú vektory , A , Aeq sú matice c(x) , ceq(x) sú funkcie , ktoré vracajú vektor Funkčná hodnota f(x) je skalár f(x), c(x), ceq(x) – môžu b y ť nelineárne. Syntax. x = fmincon(fun,x0,A,b)
E N D
Optimalization Toolbox Fmincon() Štefan Kolesár
Inputs • x, b, beq, lb, ub sú vektory, • A, Aeq sú matice • c(x), ceq(x) sú funkcie, ktoré vracajú vektor • Funkčná hodnota f(x) je skalár • f(x), c(x), ceq(x) – môžu byť nelineárne
Syntax • x = fmincon(fun,x0,A,b) • x = fmincon(fun,x0,A,b,Aeq,beq) • x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub) • x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon) • x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options) • x = fmincon(problem) • [x,fval] = fmincon(...) • [x,fval,exitflag] = fmincon(...) • [x,fval,exitflag,output] = fmincon(...) • [x,fval,exitflag,output,lambda] = fmincon(...) • [x,fval,exitflag,output,lambda,grad] = fmincon(...) • [x,fval,exitflag,output,lambda,grad,hessian] = fmincon(...)
Options • options = optimset('GradConstr','on') • options = optimset('Hessian','user-supplied'); • options = optimset( 'HessFcn',@hessianfcn'); • options=optimset('Algorithm', 'trust-region-reflective'); • options=optimset('Algorithm','active-set'); %default • options=optimset('Algorithm','interior-point'); • options=optimset('Algorithm',’sqp');
Output • [….output….] • Iterations – počet iterácií • funcCount – počet výpočtov funkčných hodnôt • Lssteplength – dĺžka jedno-rozmer. kroku v pomere k smeru vyhľadávania • Constrviolation – počet funkcií podmienky • Stepsize – dĺžka kroku • algorithm
Príklad 1. • Najdite optimálne x f(x) = –x1*x2*x3, štartovacie body x = [10;10;10], za podmienky • 0 ≤ x1 + 2*x2 + 2*x3 ≤ 72. • Zapíšeme funkciu: function f = myfun(x) f = -x(1) * x(2) * x(3); • Nerovnice podmienok –x1–2*x2–2*x3 ≤ 0 x1 + 2*x2 + 2*x3≤ 72 • Obidve podmienky sú lineárne, zostavíme matice pravej a ľavej strany A = [-1 -2 -2; ... 1 2 2]; b = [0;72];
Príklad 1. • x0 = [10;10;10]; %štartovacie body • [x,fval] = fmincon(@myfun,x0,A,b); • Po 11tich interáciach x x = 24.0000 12.0000 12.0000 Funkčná hodnota: fval fval = -3.4560e+03 • Overíme túto lineárnu nerovnosť podmienok (očakávame =<0|: A*x-b ans = -72 0
Príklad z cvičenia options = optimset('Algorithm','interior-point'); x = fmincon(@(x) myfun(x),[1;10],[],[],[],[],[],[],@(x) mycon(x),options)Do zvlášť súborov: function [c,ceq] = mycon(x) c = x(1)^2 + 4*x(2)^2 -100; ceq = []; function f = myfun(x) f = x(1)^2 - 48*x(1) - 48*x(2);
Interior Point Algorithm • Problém (bariérova funkcia): • Možné riešenie pre μ>0