piecewise.m


函数分段()% 2023年版权,Gurobi优化,LLC % %这个例子考虑分狗万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 '};模型。=稀疏([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