GRBModel: feasRelax ()
修改GRBModel
对象创建一个放松的可行性。注意,您需要调用优化结果计算实际轻松的解决方案。
可行性放松是一个模型,当解决,最大限度地减少量的解决方案的范围和线性约束违反原来的模型。这种方法提供了许多选项指定放松。
如果您指定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
,这将是相当昂贵的。
该方法有两个签名。更复杂的变量和约束的列表,以及处罚与放松相应的下界,上界和约束。如果一个变量或约束不包括在其中的一个列表,相关的边界或限制不得违反。简单的签名需要一双布尔参数,vrelax
和crelax
,表明变量范围和/或是否可以违反约束。如果vrelax
/crelax
是真正的
允许,那么每个绑定/约束违反,分别和相关的成本是1.0。
注意,这是一个破坏性的方法:它修改模型调用它。如果你不愿意修改你的原始模型,使用GRBModel构造函数在调用这个方法之前创建一个副本。
双 | feasRelax( | int | relaxobjtype, |
bool | minrelax, | ||
int | vlen, | ||
const GRBVar * | var, | ||
const双* | lbpen, | ||
const双* | ubpen, | ||
int | clen, | ||
const GRBConstr * | 若干, | ||
const双* | rhspen) |
创建一个放松模型的可行性。
参数:
relaxobjtype:成本函数时使用找到的最低成本放松。
minrelax:可行性放松的类型来执行。
vlen:变量列表的长度允许的界限被违反。
var:变量的边界可以被侵犯了。
lbpen下界:处罚违反一个变量。一个条目为每个变量参数var。
ubpen上界:处罚违反一个变量。一个条目为每个变量参数var。
clen:列表的长度的线性约束允许侵犯。
若干:线性约束允许侵犯。
rhspen:处罚违反一个线性约束。一个条目为每个参数的约束若干。
返回值:
零,如果minrelax是假的。如果minrelax是真的,返回值是放松的客观价值。如果该值小于0,表明该方法未能创建可行性放松。
双 | feasRelax( | int | relaxobjtype, |
bool | minrelax, | ||
bool | vrelax, | ||
bool | crelax) |
创建一个可行性放松模型的简化方法。
参数:
relaxobjtype:成本函数时使用找到的最低成本放松。
minrelax:可行性放松的类型来执行。
vrelax:指示变量范围是否可以放松(1.0任何违规的成本。
crelax:指示是否线性约束可以放松(任何违规成本为1.0。
返回值:
零,如果minrelax是假的。如果minrelax是真的,返回值是放松的客观价值。如果该值小于0,表明该方法未能创建可行性放松。