欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

分段函数的线性化:建模和使用 cplexes

最编程 2024-04-29 20:40:47
...

使用0-1变量将分段函数转换为线性约束

使用cplex提供的函数

连续线性分段约束

  • 语法 piecewise
piecewise{10 -> 100;20 -> 200;40}(0,0) x;

piecewise{k1 -> x1;k2 -> x2;k3 -> x3;k4}(x0,y0) x
  • 解释: x1之前斜率是k1,[x1, x2)期间斜率为k2,[x2, x3)期间值为k3,x3之后斜率为k4, (x0,y0)是分段函数中的某个点, x是变量

非连续线性分段

Values of Unit Cost
&lt0 0
0 to 10 10
10 to 20 15
>20 20
  • 语法
piecewise{0->0; 10->0; 0->10; 5->10; 0->20; 5->20; 0} (5,5) unit;
  • 理解

    使用分步函数

  • 语法:stepFunction
F2 = stepwise{ 0->0; 100->20; 60->30; 100 };
  • 解释:分步函数,0之前值为0,[0, 20)期间值为100,[20, 30)期间值为60,之后值为100:

python中使用分段函数的例子

import cplex
c = cplex.Cplex()
indices = c.variables.add(names=['y', 'x'])
idx = c.pwl_constraints.add(vary='y', varx='x',preslope=0.5, postslope=2.0,
                                            breakx=[0.0, 1.0, 2.0], breaky=[0.0, 1.0, 4.0],
                                            name='pwl1')

gurobi相关

在gurobi中只找到了在目标函数中采用近似线性化的方式来表达分段函数和非线性函数的方式。在****看到了相同的说法。

参考资料

  • 分段线性函数和分步函数
  • 连续线性分段约束
  • 非连续线性分段
  • python调用cplex中的分段线性函数的方式
  • gorobi中的分段线性目标函数 Model.setPWLObj()
  • gurobi中将目标中的非线性函数近似线性化的例子,matlab语言
  • gurobi中目标中的分段线性函数的表达,python语言
  • Ilog cplex, java 表示分段线性函数 piecewise function
  • 一个没看懂的转换方式

原文地址:https://www.cnblogs.com/liuxiang2020/p/11254947.html