诊断和处理不可行性
诊断和处理不可行性
例子:Feasopt, lp, multiscenario, sensitivity, workforce1, workforce2, workforce3在求解优化模型时,存在着不能满足指定约束条件的情况。当这种情况发生时,您通常需要识别并修复不可行性的根本原因,或者找到一组可以放松的约束,以获得可行的模型。的workforce1
,workforce2
,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,真,假,真)
此方法的参数为放宽模型选择目标函数、允许放宽的特定边界和约束集,以及放宽特定边界和约束的惩罚。