GRBfeasrelax


GRBfeasrelax

GRBfeasrelax GRBmodel *模型,
relaxobjtype,
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在调用这个例程之前创建一个副本。

返回值:

非零返回值表示在计算可行性松弛时发生了问题。指的是错误代码可能返回值列表的表。关于错误的详细信息可以通过调用来获得grbgeterramsg.

参数:

模型:原始(不可行)模型。这个例程修改了模型。

relaxobjtype:求最小成本松弛时所用的成本函数。

minrelax:实施可行性放宽的类型。

lbpen.:与违反下限相关的罚款。可以,在这种情况下,不允许违反下限。

Ubpen.:违反上限的惩罚。可以,在这种情况下,不允许违规违规。

rhspen:违反线性约束的惩罚。可以,在这种情况下,不允许违反约束。

feasobjP:当minrelax = 1,这将返回最小成本松弛的客观值。

示例用法:

双重处罚[];error = GRBfeasrelax(模型,0,0,NULL, NULL,惩罚,NULL);错误= GRBoptimize(模型);