Model.feasRelax ()


Model.feasRelax ()

feasRelax(松弛类型,minrelax, vars, lbpen, ubpen, constrs, rhspen)

修改模型对象来创建可行性放松。注意,您需要调用优化对结果进行了实际松弛解的计算。还要注意的是,这是这个方法的一个更复杂的版本——usefeasRelaxS对于简化的版本。

可行性松弛是一个模型,当求解时,使解违反边界和原始模型的线性约束的数量最小化。此方法提供了许多用于指定放松的选项。

如果您指定relaxobjtype = 0,可行性松弛的目标是使边界和约束违反的加权大小的和最小化。的lbpenUbpen.,rhspen参数分别在下界、上界和线性约束中指定每个单元违反的代价。

如果您指定relaxobjtype = 1,可行性松弛的目标是最小化边界和约束违反的加权平方和。的lbpenUbpen.,rhspen参数分别指定了下界、上界和线性约束违反的平方上的系数。

如果您指定relaxobjtype = 2,可行性松弛的目标是最小化边界和约束违反的加权数。的lbpenUbpen.,rhspen参数分别指定了违反下界、上界和线性约束的代价。

举个例子,如果有约束rhspen价值p被2。0违反了,会有贡献吗2 * p对可行性放宽的目标relaxobjtype = 0,这将有助于2 * 2 * prelaxobjtype = 1,它会有所贡献prelaxobjtype = 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()