piecewise.m


piecewise.m


这个例子考虑了以下可分离的凸问题:狗万app足彩% %减少f (x) - y + g (z) %受到x + 2 y + 3 z < = 4% x + y > = 1% x, y, z < = 1% % f (u) = exp (- u)和g (u) = 2 ^ 2 - 4 u,所有真正的u。它%制定和解决简单的LP模型和分段线性函数近似f和% g。然后通过否定f的近似,将模型%转化为MIP,该近似对应于一个非凸分段线性函数%,并再次求解。名称= {' x ';“y”;' z '};模型。A = [1 2 3;1 1 0]);模型。obj = [0; -1; 0]; model.rhs = [4; 1]; model.sense = '<>'; model.vtype = 'C'; model.lb = [0; 0; 0]; model.ub = [1; 1; 1]; model.varnames = names; % Compute f and g on 101 points in [0,1] u = linspace(0.0, 1.0, 101); f = exp(-u); g = 2*u.^2 - 4*u; % Set piecewise-linear objective f(x) model.pwlobj(1).var = 1; model.pwlobj(1).x = u; model.pwlobj(1).y = f; % Set piecewise-linear objective g(z) model.pwlobj(2).var = 3; model.pwlobj(2).x = u; model.pwlobj(2).y = g; % Optimize model as LP result = gurobi(model); disp(result); for v=1:length(names) fprintf('%s %d\n', names{v}, result.x(v)); end fprintf('Obj: %e\n', result.objval); % Negate piecewise-linear objective function for x f = -f; model.pwlobj(1).y = f; gurobi_write(model, 'pwl.lp') % Optimize model as a MIP result = gurobi(model); disp(result); for v=1:length(names) fprintf('%s %d\n', names{v}, result.x(v)); end fprintf('Obj: %e\n', result.objval); end