Gurobi 将问题指定为不可行,尽管它不是



我尝试使用Gurobi和Pyomo解决几个类似的优化问题。问题仅在几个参数上有所不同。每个问题运行三次,每次具有相同的约束,但目标函数不同。

有一个问题,Gurobi 只能解决我指定的两个目标函数。对于第三个目标函数,它无法解决问题,将问题指定为"不可行"。但这对我来说没有意义,因为可行域与其他两个目标函数用于解决问题时完全相同。

我关闭了电脑,并尝试在PyCharm和Spyder上再次解决问题。古罗比仍然告诉我这个问题是不可行的。但是,根据我对其他类似问题的观察,我确信这个问题是完全可行的。所以我试图在另一台计算机上解决完全相同的问题。这次成功了...

因此,我已经部分解决了我的问题。我有我需要的结果,但由于我不明白我的电脑上的 Gurobi 发生了什么,我将来可能会面临同样的问题。

有人对这个"错误"有任何想法吗?

您应该验证您的 Gurobi 报告的状态是否为"不可行",而不是"不可行或无界"。 您可以检查返回状态或日志,或关闭解析双重缩减。 如果你的系数很大,你可以看到前面关于整数规划和泄漏抽象的问题。 您可以使用属性 KappaExexact 检查问题数值难度的一个度量。 正如@LarrySnyter610评论中所建议的那样,Gurobi的时间也可能不多了。

如果目标真的是唯一改变的东西,你可能会解决所有这些困难,并通过连续解决问题来提高性能。 这样,Gurobi 可以使用上一个目标中的解决方案作为温暖的开始。

假设您有 2 个目标,obj1obj2针对同一组目标。 您可以通过以下方式连续解决它们

m.setObjective(obj1)
m.optimize()
if m.SolCount > 0:
solution1 = m.getAttr('X', m.getVars())
m.setObjective(obj2)
if m.SolCount > 0:
solution2 = m.getAttr('X', m.getVars())

最新更新