GC_PWL.M.


GC_PWL.M.


功能GC_PWL%Copyright 2021,Gurobi优化,L狗万app足彩LC%此示例使用PWL约束来构造并解决以下简单型号%:%%最大化%SUM C(J)* x(j)%受%sum a(i,j)* x(j)<= 0,i = 1,...,m%sum y(j)<= 3%y(j)= pwl(x(x(j)),对于j = 1,...。,n%x(j)自由,y(j)> = 0,对于j = 1,...,n%%,其中pwl(x)= 0,如果x = 0%= 1+ | x |,如果x!= 0 %% note%1.和pwl(x(j))<= b是绑定x向量,也有利于稀疏x向量。%在这里b = 3表示最多两个x(j)可以是非零,如果两个,那么%sum x(j)<= 1%2 .pwl(x)跳转到0到0,如果x从负0移动到0,%然后到正0,所以我们需要在x = 0. x上有三个点,两侧有无限界限,用两个点(-1,2)和(0,1,)可以%延伸到-infinite。总的来,我们可以使用五点(-1,2),(0,1),%(0,0),(0,1)和(1,2)来定义Y = PWL(x)n = 5;%a x <= 0 a1 = [0,0,0,1,-1;0,0,1,1,-1;1,1,0,0,-1;1,0,1,0,-1; 1, 0, 0, 1, -1; ]; % sum y(j) <= 3 A2 = [1, 1, 1, 1, 1]; % Constraint matrix altogether model.A = sparse(blkdiag(A1, A2)); % Right-hand-side coefficient vector model.rhs = [zeros(n,1); 3]; % Objective function (x coefficients arbitrarily chosen) model.obj = [0.5, 0.8, 0.5, 0.1, -1, zeros(1, n)]; % It's a maximization model model.modelsense = 'max'; % Lower bounds for x and y model.lb = [-inf*ones(n,1); zeros(n,1)]; % PWL constraints for k = 1:n model.genconpwl(k).xvar = k; model.genconpwl(k).yvar = n + k; model.genconpwl(k).xpts = [-1, 0, 0, 0, 1]; model.genconpwl(k).ypts = [2, 1, 0, 1, 2]; end result = gurobi(model); for k = 1:n fprintf('x(%d) = %g\n', k, result.x(k)); end fprintf('Objective value: %g\n', result.objval); end