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 * prelaxobjtype = 1,它将贡献prelaxobjtype = 2

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

该方法有两个签名。更复杂的变量和约束的列表,以及处罚与放松相应的下界,上界和约束。如果一个变量或约束不包括在其中的一个列表,相关的边界或限制不得违反。简单的签名需要一双布尔参数,vrelaxcrelax,表明变量范围和/或是否可以违反约束。如果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,表明该方法未能创建可行性放松。