Model.feasRelax ()


Model.feasRelax ()

feasRelax(relaxobjtype, minrelax, vars, lbpen, ubpen, constres, rhspen)

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

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

如果您指定relaxobjtype = 0,可行性松弛的目标是使边界违例和约束违例的加权幅度和最小。的lbpen乌本,rhspen参数分别指定下界、上界和线性约束中的单位违反成本。

如果您指定relaxobjtype = 1,可行性松弛的目标是使有界违例和约束违例的平方和最小。的lbpen乌本,rhspen参数分别指定下界、上界和线性约束违背的平方上的系数。

如果您指定relaxobjtype = 2,可行性松弛的目标是最小化边界和约束违反的加权计数。的lbpen乌本,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

乌本:违反变量上限的惩罚。参数中的每个变量都有一个条目var

若干:允许违反的线性约束。

rhspen:违反线性约束的惩罚。参数中的每个约束都有一个条目若干

返回值:

零,如果minrelax是假的。如果minrelax为True时,返回值是所执行松弛的客观值。如果该值小于0,则表示该方法创建可行性松弛失败。

用法示例:

如果模型。状态= =伽马线暴。INFEASIBLE: vars = model. getvars () upen = [1.0]*model. getvars ()numVars模型。feasRelax(1, False, vars, None, ubpen, None, None) model.optimize()