GRBfeasrelax
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,这将返回最小成本松弛的客观值。
使用示例:
双重处罚[];error = GRBfeasrelax(模型,0,0,NULL, NULL,惩罚,NULL);错误= GRBoptimize(模型);