我尝试使用Gurobi和Pyomo解决一些类似的优化问题。问题仅因几个参数而异。每个问题运行三次,每次约束相同,但目标函数不同。
Gurobi仅可以针对我指定的两个目标函数解决一个问题。对于第三个目标函数,它无法解决问题,将问题指定为“不可行”。但这对我来说没有意义,因为可行域与使用其他两个目标函数来解决问题时完全相同。
我打开和关闭计算机,然后尝试再次在PyCharm和Spyder上解决问题。古罗比仍在告诉我这个问题是不可行的。但是,根据我对其他类似问题的观察,我确定该问题是完全可行的。因此,我尝试在另一台计算机上解决完全相同的问题。这次成功了!...
因此,我已经部分解决了我的问题。我得到了所需的结果,但是由于我不了解计算机上Gurobi的情况,因此将来我可能会遇到相同的问题。
有人对这个“ bug”有任何想法吗?
答案 0 :(得分:0)
您应该验证您的Gurobi报告的是status“不可行”而不是“不可行或不受限制”。您可以检查返回status或日志,或关闭预解析Dual Reductions。如果系数很大,您会看到previous question关于整数编程和泄漏抽象的信息。您可以使用属性KappaExact检查问题数字难度的一种度量。正如@LarrySnyter610在评论中所建议的那样,古罗比(Gurobi)可能也没时间了。
如果目标确实是唯一要改变的东西,则可以解决所有这些困难并通过连续解决问题来提高性能。这样,Gurobi可以将先前目标中的解决方案用作一个良好的开端。
假设您有2个目标,obj1
,obj2
用于同一组目标。您可以通过
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())