Model.feasRelax ()

feasRelax(relaxobjtype minrelax、var、lbpen ubpen,若干,rhspen)

修改模型对象创建一个放松的可行性。注意,您需要调用优化结果计算实际轻松的解决方案。还请注意,这是一个更复杂的版本的这个方法——使用feasRelaxS对一个简化的版本。

可行性放松是一个模型,当解决,最大限度地减少量的解决方案的范围和线性约束违反原来的模型。这种方法提供了许多选项指定放松。

如果您指定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 * prelaxobjtype = 1,它将贡献prelaxobjtype = 2

minrelax参数是一个布尔控制创建可行性放松的类型。如果minrelax = False、优化返回模型给出了一个解决方案,最大限度地减少违规的成本。如果minrelax = True、优化返回模型找到了一个解决方案,最大限度地减少最初的目标,但只从那些违规的成本最小化的解决方案。请注意,feasRelax必须找到解决优化问题的最小可能的放松的时候minrelax = True,这将是相当昂贵的。

注意,这是一个破坏性的方法:它修改模型调用它。如果你不愿意修改你的原始模型,使用复制在调用这个方法之前创建一个副本。

参数:

relaxobjtype:成本函数时使用找到的最低成本放松。

minrelax:可行性放松的类型来执行。

var:变量的边界可以被侵犯了。

lbpen下界:处罚违反一个变量。一个条目为每个变量参数var

ubpen上界:处罚违反一个变量。一个条目为每个变量参数var

若干:线性约束允许侵犯。

rhspen:处罚违反一个线性约束。一个条目为每个参数的约束若干

返回值:

零,如果minrelax是假的。如果minrelax是真的,返回值是放松的客观价值。如果该值小于0,表明该方法未能创建可行性放松。

使用示例:

如果模型。状态= =伽马线暴。不可行:var = model.getVars () ubpen =[1.0] *模型。numVars模型。feasRelax(1, False, vars, None, ubpen, None, None) model.optimize()