诊断和处理不可行性


诊断和处理不可行性

例子:Feasopt, lp, multiscenario, sensitivity, workforce1, workforce2, workforce3

在求解优化模型时,存在着不能满足指定约束条件的情况。当这种情况发生时,您通常需要识别并修复不可行性的根本原因,或者找到一组可以放松的约束,以获得可行的模型。的workforce1workforce2,workforce3说明这些不同的策略。

从三个例子中最简单的开始,workforce1建立了一个简单的劳动力调度模型并加以解决。如果模型不可行,则计算一个不可约不一致子系统(IIS)。然后,用户可以检查这些信息,以理解并有希望解决模型中不可行性的来源。

例子workforce2类似,除了如果模型不可行,则示例重复标识一个IIS并从模型中删除一个相关的约束,直到模型变得可行。注意,从IIS中删除一个约束就足以解决不可行性的来源,但是一个IIS可能不能捕获所有不可行性的来源。因此,有必要重复这个过程,直到模型可行为止。

例子workforce3采用不同的方法来解决不可行性。它不是标识和删除IIS成员,而是允许放松模型的约束。就像feasopt例如,为每个约束添加一个人工变量。该实例将原始变量上的目标设为零,然后求解一个约束松弛总幅度最小的模型。

feasopt例子展示了另一种放松不可行模型的方法。它计算可行性放松对于不可行模型。可行性松弛是一种模型,当求解时,使解违反原模型的边界和线性约束的数量最小化。调用方法如下:

在C:

error = GRBfeasrelax(feasmodel, GRB_FEASRELAX_LINEAR, 1, NULL, NULL, rhspen, &feasobj);
在c++中:
feasmodel1。feasRelax(GRB_FEASRELAX_LINEAR, true, false, true);
在c#中:
feasmodel1.FeasRelax(伽马线暴。FEASRELAX_LINEAR,真,假,真);
在Java中:
feasmodel1.feasRelax(伽马线暴。FEASRELAX_LINEAR,真,假,真);
在Python中:
feasmodel1。feasRelaxS(0,真,假,真)

此方法的参数为放宽模型选择目标函数、允许放宽的特定边界和约束集,以及放宽特定边界和约束的惩罚。