Model.feasRelax ()
Model.feasRelax ()
feasRelax(relaxobjtype, minrelax, vars, lbpen, ubpen, cstrs, rhspen)修改模型
对象创建的可行性松弛。请注意,您需要打电话优化对结果进行实际松弛解的计算。还请注意,这是该方法的一个更复杂的版本——usefeasRelaxS这是一个简化的版本。
可行性松弛是一种模型,当求解时,使解违反原模型的边界和线性约束的数量最小化。此方法提供了许多用于指定松弛的选项。
如果您指定relaxobjtype = 0
时,可行性松弛的目标是使边界违例和约束违例的加权大小之和最小化。的lbpen
,ubpen
,rhspen
参数分别指定在下界、上界和线性约束中每单位冲突的代价。
如果您指定relaxobjtype = 1
时,可行性松弛的目标是最小化约束违例和约束违例的加权平方和。的lbpen
,ubpen
,rhspen
参数分别指定下界、上界和线性约束违反的平方上的系数。
如果您指定relaxobjtype = 2
,可行性松弛的目标是最小化约束和约束违例的加权计数。的lbpen
,ubpen
,rhspen
参数分别指定违反下界、上界和线性约束的代价。
举个例子,如果一个约束与rhspen
价值p
被2.0侵犯了,它会有贡献吗2 * p
以可行性放宽为目标relaxobjtype = 0
,它将有助于2 * 2 * p
为relaxobjtype = 1
,它会有所贡献p
为relaxobjtype = 2
.
的minrelax
Argument是一个布尔值,它控制创建的可行性松弛的类型。如果minrelax = False
,优化返回的模型给出了一个解决方案,使冲突的代价最小化。如果minrelax = True
,优化返回的模型,找到一个使原始目标最小化的解决方案,但只从这些解决方案中最小化冲突的代价。请注意,feasRelax
必须解决一个优化问题,以找到最小的可能松弛时minrelax = True
这可能相当昂贵。
注意,这是一个破坏性的方法:它修改调用它的模型。如果您不想修改您的原始模型,请使用复制在调用此方法之前创建副本。
参数:
relaxobjtype:寻找最小成本松弛时使用的成本函数。
minrelax:执行的可行性放宽的类型。
var:允许违反边界的变量。
lbpen:违反变量下界的惩罚。参数中的每个变量都有一个条目var.
ubpen:违反变量上界的惩罚。参数中的每个变量都有一个条目var.
若干:允许违反的线性约束。
rhspen:违反线性约束的惩罚。参数中的每个变量都有一个条目若干.
返回值:
零,如果minrelax是假的。如果minrelax为True时,返回值为执行松弛操作的客观值。如果小于0,表示该方法创建可行性松弛失败。
使用示例:
如果模型。状态= =伽马线暴。不可行:vars = model. getvars () upen = [1.0]*model. getvars () upen = [1.0]*model. getvars ()numVars模型。feasRelax(1, False, vars, None, ubpen, None, None) model.optimize()