GRBfeasrelax
int | GRBfeasrelax( | GRBmodel | *模型, |
int | relaxobjtype, | ||
int | minrelax, | ||
双 | * lbpen, | ||
双 | * ubpen, | ||
双 | * rhspen, | ||
双 | * feasobjP) |
修改输入模型创建一个放松的可行性。注意,您需要调用GRBoptimize结果计算实际轻松的解决方案。
可行性放松是一个模型,当解决,最大限度地减少量的解决方案的范围和线性约束违反原来的模型。这个例程提供了许多选项指定放松。
如果您指定relaxobjtype = 0
,可行性放松的目的是最小化加权之和的大小约束和约束违反。的lbpen
,ubpen
,rhspen
参数指定单位成本违反下界,上界,分别和线性约束。
如果您指定relaxobjtype = 1
,可行性放松的目的是最小化加权和广场的束缚和约束违反。的lbpen
,ubpen
,rhspen
参数指定系数的广场上下界,上界,分别和线性约束违反。
如果您指定relaxobjtype = 2
,可行性放松的目的是最小化加权计算的束缚和约束违反。的lbpen
,ubpen
,rhspen
参数指定违反成本的一个下界,上界,分别和线性约束。
给一个例子,一个2.0违反约束我
会的贡献2 * rhspen[我]
可行性放松的目的relaxobjtype = 0
,它将贡献2 * 2 * rhspen[我]
为relaxobjtype = 1
,它将贡献rhspen[我]
为relaxobjtype = 2
。
的minrelax
参数是一个布尔控制创建可行性放松的类型。如果minrelax = 0
、优化返回模型给出了一个解决方案,最大限度地减少违规的成本。如果minrelax = 1
、优化返回模型找到了一个解决方案,最大限度地减少最初的目标,但只从那些违规的成本最小化的解决方案。请注意,GRBfeasrelax
必须找到解决优化问题的最小可能的放松minrelax = 1
,这将是相当昂贵的。
在所有情况下,您可以指定一个点球GRB_INFINITY
表明一个特定的绑定或线性约束不得违反。
注意,这是一个毁灭性的常规:修改模型传递给它。如果你不愿意修改你的原始模型,使用GRBcopymodel在调用这个例程之前创建一个副本。
返回值:
一个非零返回值表明计算可行性放松时发生问题。指的是错误代码表的列表可能的返回值。细节错误可以通过调用GRBgeterrormsg。
参数:
模型:原始模型(不可行)的。这个例程的模型被修改。
relaxobjtype:成本函数时使用找到的最低成本放松。
minrelax:可行性放松的类型来执行。
lbpen:相关的处罚违反一个下界。可以零,在这种情况下,不允许有违反下界。
ubpen:相关的处罚违反一个上界。可以零,在这种情况下,不允许有上界侵犯。
rhspen:相关的处罚违反一个线性约束。可以零,在这种情况下,不允许有约束违反。
feasobjP:当minrelax = 1,这将返回的客观价值最低成本放松。
使用示例:
双重处罚[];错误= GRBfeasrelax(模型中,0,0,空,空,罚款,NULL);错误= GRBoptimize(模型);