YALMIP Toolbox Hossein Sahebdel Iran University Of Science And Technology May 12

Preview:

Citation preview

YALMIP Toolbox

Hossein SahebdelIran University Of Science And

TechnologyMay 12

Intruduction InstallationYALMIP is entirely based on m-code, and is thus easy to install. Remove any old version of YALMIP, unzip the file YALMIP.zip and add the following directories to your MATLAB path /yalmip /yalmip/extras /yalmip/demos /yalmip/solvers /yalmip/modules /yalmip/modules/parametric /yalmip/modules/moment /yalmip/modules/global /yalmip/modules/sos /yalmip/operators

1

What is YALMIP• YALMIP is a modelling language for advanced

modeling and solution of convex and nonconvex optimization problems. It is implemented as a free (as in no charge) toolbox for MATLAB. • The main motivation for using YALMIP is rapid

algorithm development. The language is consistent with standard MATLAB syntax, thus making it extremely simple to use for anyone familiar with MATLAB.

2

Problem classes

• The modelling language supports a large number of optimization classes, such as linear, quadratic, second order cone, semidefinite, mixed integer conic, geometric, local and global polynomial, multiparametric, bilevel and robust programming.

3

Linear programming

4

Quadratic programming

5

Second Order Cone programming

6

Semidefinite programming

7

Solvers

• One of the central ideas in YALMIP is to concentrate on the language and the higher level algorithms, while relying on external solvers for the actual computations. However, YALMIP also implements internal algorithms for global optimization, mixed integer programming, multiparametric programming, sum-of-squares programming and robust optimization. These algorithms are typically based on the low-level scripting language available in YALMIP.

8

Solvers

• Second-order cone programming (free)• ECOS, SDPT3, SEDUMI • Second-order cone programming (commercial)• CPLEX ,GUROBI ,MOSEK • Semidefinite programming (free)• CSDP, DSDP, LOGDETPPA, PENLAB, SDPA, SDPLR, SDPT3, SDPNAL,

SEDUMI • Semidefinite programming (commercial)• LMILAB, MOSEK ,PENBMI, PENSDP• General nonlinear programming and other solvers• BARON, FILTERSD, FMINCON, GPPOSY, IPOPT, KNITRO, KYPD,

LMIRANK, MPT, NOMAD, PENLAB, SNOPT, STRUL, VSDP, SparsePOP 1

0

Variable declaration

• semivar defines a semi-continuous variable •uncertain is used to declare variables as

uncertain. •binvar is used to define decision variables

constrained to be binary (0 or 1). •blkvar is used to simplify definition of block-

structured variables. • intvar used to define decision variables with

integer elements. 12

Constraints

alldifferent binary check checkset cone cut dilate dual dualize hull imagemodel integer is ismember primalize rank rcone robustify set sos sosd

415

Optimize

optimize is the common function for solving optimization problems (replaces solvesdp)

diagnostics = optimize(Constraints,Objective,options)

417

Linear programming

•a = sdpvar(2,1);•b = sdpvar(1);•u = sdpvar(1,25);•v = sdpvar(1,25);

•Constraints = [a'*greens+b >= 1-u, a'*blues+b <= -(1-v), u>=0, v>=0,-1<=a<=1];

•optimize(Constraints,sum(u)+sum(v))•x = sdpvar(2,1);

•P1 = [-5<=x<=5, value(a)'*x+value(b)>=0];•P2 = [-5<=x<=5, value(a)'*x+value(b)<=0];

418

Quadratic programmingx = [1 2 3 4 5 6];'t = (0:0.02:2*pi);'

a = [sin(t) sin(2*t) sin(3*t) sin(4*t) sin(5*t) sin(6*t)];e = (-4+8*rand(length(a),1));e(100:115) = 30;y = a*x+e;plot(t,y);x_hat = sdpvar(6,1);residuals = y-a*x_hat;bound = sdpvar(length(residuals),1);

419

Quadratic programmingF = [-bound <= residuals <= bound] ;

optimize(F,sum(bound));x_L1 = value(x_hat);optimize([],residuals'*residuals);x_L2 = value(x_hat);bound = sdpvar(1,1);F = [-bound <= residuals <= bound];optimize(F,bound);x_Linf = value(x_hat);plot(t,[y a*x_L1 a*x_L2 a*x_Linf]) ;

legend('y','a*x_L1','a*x_L2','a*x_Linf')420

STANDARD MPC% Model dataA = [2 -1;1 0.2];B = [1;0];nx = 2; % Number of statesnu = 1; % Number of inputs% MPC dataQ = eye(2);R = 2;N = 7;% Initial statex0 = [3;1];u = sdpvar(repmat(nu,1,N)); 421

constraints = [];objective = 0;x = x0;ff=zeros(1,7)xx=zeros(2,7)for k = 1:N x = A*x + B*u{k} objective = objective + norm(Q*x,1) + norm(R*u{k},1); constraints = [constraints, -5 <= u{k}<= 1, -5<=x<=5]; optimize(constraints,objective); ff(k)=value(u{1}) xx(:,k)=value(x)endplot(1:7,xx(1,1:7),1:7,xx(2,1:7))

422

Bilevel Programming

423

Bilevel Programming

• n = 3;m = 2;

Q = randn(n,n);Q = Q*Q';c = randn(n,1);d = randn(m,1);A = randn(15,n);b = rand(15,1)*2*n;E = randn(15,m);

H = randn(m,m);H = H*H';e = randn(m,1);f = randn(n,1);F = randn(5,m);h = rand(5,1)*2*m;G = randn(5,n);

424

Bilevel Programming

x = sdpvar(n,1);z = sdpvar(m,1);lambda = sdpvar(length(h),1);slack = h + G*x - F*z;

KKT = [H*z + e + F'*lambda == 0, F*z <= h + G*x, lambda >= 0];

for i = 1:length(h) KKT = [KKT, ((lambda(i)==0) | (slack(i) == 0))];endKKT = [KKT, lambda <= 100, -100 <= [x;z] <= 100];optimize([KKT, A*x <= b + E*z], 0.5*x'*Q*x + c'*x + d'*z);value(x)value(z)value(lambda)value(slack)

425

Bilevel Programming

x =[ -23.8442 10.2818 -28.7450]’z =[ 1.6421 -26.1612]’lambda =[50.0000 29.0047 50.0000 50.0000 50.0000]’slack = [ 29.1818 91.8190 1.8254 26.7669 29.9262]’

426

Residential Energy Hub

27

P = binvar(5,48);

T = sdpvar(3,48);

cost=zeros(1,48);

cost(1,1:12)=1; cost(1,13:24)=2; cost(1,25:36)=4; cost(1,36:48)=2;

power(1,1:48)=450; power(2,1:48)=500; power(3,1:48)=600; power(4,1:48)=400 power(5,1:48)=500;

Ptotal=sdpvar(1,48);

Tout=[23 23 22 21 20 20 19 21 19 21 20 21 21 21 20 22 24 26 26 28 ...

28 28 28 28 30 31 30 27 29 29 30 29 29 30 28 28 27 26 25 25 25 25 25 25 25 25 23 23];

i=1:47;

s=1:48;

F = [8>T(1,s)>3];

F = [F, T(1,i+1)==T(1,i)-0.002*450*P(1,i)+0.03*Tout(1,i)]; 28

F = [F, 25>T(2,s)>15 , T(2,1)==18];

F = [F, T(2,i+1)==T(2,i)-0.02*500*P(2,i)+0.12*Tout(1,i)];

F = [F, 80>T(3,s)>70];

F = [F, T(3,i+1)==T(3,i)+0.002*600*P(3,i)-0.035*Tout(1,i)];

F = [F, P(4,1:12)==0, P(4,25:48)==0, sum(P(4,:))==10];

F = [F, P(5,1:25)==0, sum(P(5,:))==15];

PP=sdpvar(6,48);

for j=1:5

PP(j,:)=P(j,:).*power(j,:);

end

for j=1:5

PP(j,:)=PP(j,:).*cost;

end

F = [F,Ptotal==sum(PP), abs(Ptotal(1,i))<2000]

obj = sum(PP);

optimize(F,obj); 29

30

31

32

33

34

Recommended