Model.feasRelax ()
Model.feasRelax ()
feasRelax(松弛类型,minrelax, vars, lbpen, ubpen, constrs, 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
参数是一个布尔值,可以控制创建的可行性放松类型。如果minrelax = False
,优化返回的模型提供了一个最小化违反成本的解决方案。如果minrelax = True
,优化返回的模型可以找到最小化原始目标的解决方案,但只能从那些最小化违反成本的解决方案中找到。请注意,feasRelax
必须解决一个最优化问题,找到最小的可能松弛何时minrelax = True
,这可能相当昂贵。
注意,这是一个破坏性的方法:它修改调用它的模型。如果您不想修改原始模型,请使用复制在调用此方法之前创建副本。
参数:
relaxobjtype:寻找最小成本松弛时使用的成本函数。
minrelax:执行的可行性松弛类型。
var:允许违反其边界的变量。
lbpen:违反变量下界的惩罚。参数中的每个变量都有一个条目var.
Ubpen.:违反变量上限的惩罚。参数中的每个变量都有一个条目var.
若干:允许侵犯的线性约束。
rhspen:违反线性约束的惩罚。参数中的每个变量都有一个条目若干.
返回值:
零,如果minrelax是假的。如果minrelax为True时,返回值是执行松弛操作的客观值。如果该值小于0,表示方法创建可行性松弛失败。
示例用法:
如果模型。状态= =伽马线暴。unfeasible: vars = model. getvars () ubpen = [1.0]*model。numVars模型。feasRelax(1, False, vars, None, ubpen, None, None) model.optimize()