古罗比:显然可行的模型引起了不可行的模型错误?

当在有向图上调试更大的流模型的实现时,我发现其中一个组件中存在一个奇怪的错误,该错误会导致gurobi产生不可行的模型错误。从可行性到不可行性的变化似乎是由于模型所组成的唯一弧(1,0)的流向变化所致。我对此毫无意义。参见下面不可行的模型.lp文件

\ Model Model1
\ LP format - for model browsing. Use MPS format to capture full model detail.
Minimize

Subject To
 p_lb[0]: pressure[0] >= 10
 p_lb[1]: pressure[1] >= 10
 p_ub[0]: pressure[0] <= 80
 p_ub[1]: pressure[1] <= 80
 q_lb[1,0]: q[1,0] >= -100
 q_ub[1,0] <= 100
 Flow_Balance[0]: q[1,0] = -50
 Flow_Balance[1]: - q[1,0] = 50
 short_cut2[1,0]: - pressure[0] + pressure[1] = 0
Bounds
End

整个问题目前都是可行性问题,因此我的目标是零。我在节点0和1处限制了压力变量,在每个节点的流量平衡中出现了跨圆弧的流量变量。另外,我希望节点上的压力能够匹配。

我已经将.lp文件和.mps文件放入我的VSC文本比较中,但是除了流向之外,它们似乎没有什么不同。我有强烈的感觉,我可能会忽略某些东西。 下面还有两个流向的.mps文件。

可行的一种:

NAME Model1
ROWS
 N  OBJ
 G  p_lb[0] 
 G  p_lb[1] 
 L  p_ub[0] 
 L  p_ub[1] 
 G  q_lb[1,0]
 L  q_ub[1,0]
 E  Flow_Balance[0]
 E  Flow_Balance[1]
 E  short_cut2[1,0]
COLUMNS
    pressure[0]  p_lb[0]   1
    pressure[0]  p_ub[0]   1
    pressure[0]  short_cut2[1,0]  -1
    pressure[1]  p_lb[1]   1
    pressure[1]  p_ub[1]   1
    pressure[1]  short_cut2[1,0]  1
    q[1,0]    q_lb[1,0]    q_ub[1,0]    Flow_Balance[0]  1
    q[1,0]    Flow_Balance[1]  -1
RHS
    RHS1      p_lb[0]   10
    RHS1      p_lb[1]   10
    RHS1      p_ub[0]   80
    RHS1      p_ub[1]   80
    RHS1      q_lb[1,0]  -100
    RHS1      q_ub[1,0]  100
    RHS1      Flow_Balance[0]  50
    RHS1      Flow_Balance[1]  -50
BOUNDS
ENDATA

不可行的一个:

NAME Model1
ROWS
 N  OBJ
 G  p_lb[0] 
 G  p_lb[1] 
 L  p_ub[0] 
 L  p_ub[1] 
 G  q_lb[1,0]  100
    RHS1      Flow_Balance[0]  -50
    RHS1      Flow_Balance[1]  50
BOUNDS
ENDATA

如果您能向黑暗中发光一点,我将不胜感激:)

zhaowei19790715 回答:古罗比:显然可行的模型引起了不可行的模型错误?

默认情况下,所有变量的下限均为0,但是在您的Flow_Balance约束下,您正在设置q[1,0] = -50。 要获得无界变量,您必须明确地将其下界设置为负无穷大。 (如何执行此操作,取决于所使用的API。)

要调试此类不可行问题,您可以要求Gurobi计算一个不可约的不一致子系统(IIS)。从命令行(gurobi_cl运行Gurobi时,可以通过指定ResultFile=<filename>.ilp(扩展名ilp告诉Gurobi计算和编写IIS)来实现。在Python中,您可以使用computeIIS方法。 例如。为不可行的模型计算IIS会导致单一约束q[1,0] = -50

本文链接:https://www.f2er.com/3059454.html

大家都在问