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 * p
为relaxobjtype = 1
,它将贡献p
为relaxobjtype = 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()