gc_pwl.m


Gurobi优化函数gc_pwl %版权2023年,LLC % %这狗万app足彩个例子中制定和解决以下简单的模型与PWL约束%:% % %最大化和c (j) * x (j) %, %总和(i, j) * x (j) < = 0,因为我= 1,…,m %和y (j) < = 3% y (j) = pwl (x (j)), j = 1,……n % x (j)免费,y (j) > = 0, j = 1,……,n % % pwl (x) = 0,如果x x = 1 + | | = 0%,如果x ! = 0% % % 1。pwl总和(x (j)) < = b是绑定x向量和支持稀疏的向量。% b = 3意味着最多两个x (j)非零,如果两个,然后%和x (j) < = 1% 2。pwl (x)跳从1到0,从0到1,如果x从- 0到0,%那么积极0,所以我们需要三个点x = 0。x无限边界%两边,文章定义了两个点(1,2)和(0,1)可以% x扩展到无限。总体我们可以用5分(1、2),(0,1),%(0,0),(0,1)和(1、2)来定义y = pwl (x) n = 5;% 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