弹性约束
一个约束
其中
定义约束分两步进行:
使用目标
实例化约束( LpConstraint
的子类)。调用它的
makeElasticSubProblem()
方法,该方法返回一个类型为FixedElasticSubProblem
的对象(LpProblem
的子类)——其目标是使与 之间的距离最小化。
constraint = LpConstraint(..., rhs = c)
elasticProblem = constraint.makeElasticSubProblem(
penalty = <penalty_value>,
proportionFreeBound = <freebound_value>,
proportionFreeBoundList = <freebound_list_value>,
)
- 哪里:
<penalty_value>
是一个实数<freebound_value>
指定了一个关于 的对称目标区间<freebound_list_value> = [a,b]
,一个比例列表 ,指定关于 的不对称目标区间
惩罚适用于约束在点 <penalty_value>
的大小可以通过检查由 LpProblem.writeLP()
写入的 .lp
文件中的最终目标函数来评估。
示例:
>>> constraint_1 = LpConstraint('ex_1',sense=1,rhs=200)
>>> elasticProblem_1 = constraint_1.makeElasticSubproblem(penalty=1, proportionFreeBound = 0.01)
>>> constraint_2 = LpConstraint('ex_2',sense=0,rhs=500)
>>> elasticProblem_2 = constraint_2.makeElasticSubproblem(penalty=1,
proportionFreeBoundList = [0.02, 0.05])
constraint_1 在 rhs 值的 1% 范围内有一个无惩罚的目标区间,即 200
constraint_2 在 rhs 值的左侧有 -2% 的免罚区间,右侧有 5% 的免罚区间,rhs 值为 500

以下是返回值的方法: