【问题标题】:Using Gurobi to run a MIQP: how can I improve time performance?使用 Gurobi 运行 MIQP:如何提高时间性能?
【发布时间】:2019-04-18 15:04:21
【问题描述】:

我正在使用 Gurobi 在 Matlab 中运行具有线性约束的 MIQP(混合整数二次规划)。求解器非常慢,我希望您能帮助我了解我是否可以对此做点什么。

这些是我用来启动问题的行

clear model;
clear params;
model.A=[Aineq; Aeq];
model.rhs=[bineq; beq]; 
model.sense=[repmat('<', size(Aineq,1),1); repmat('=', size(Aeq,1),1)];
model.Q=Q;
model.obj=c;
model.vtype=type; 
model.lb=total_lb;
model.ub=total_ub;
params.MIPGap=10^(-1);
result=gurobi(model,params); 

这是 Matlab 窗口中输出的屏幕截图。


问题 1:这是我第一次尝试运行 MIQP,我想听听您的建议,以了解我可以做些什么来提高性能。让我告诉我到目前为止我所做的尝试:

  • 我骗了params.MIPGap=10^(-1)。这样,节点探索的阶段就变短了。这样做有什么坏处?

  • 我有大 M 系数,我已将它们与可能的最小值联系起来。

  • 我已经尝试设置params.ScaleFlag=2; params.ObjScale=2,但它会让事情变慢

  • 我已经更改了params.method,但它似乎没有帮助(除非你有一些具体的建议)

  • 我增加了params.Threads,但似乎没有帮助

问题 2(次要):为什么我在根单纯形日志中得到否定目标?目标函数怎么可能是负数?

【问题讨论】:

  • 许多 MIQP 模型受益于适当的重新制定。如果可能的话,线性重构特别值得尝试。
  • 谢谢。我对优化知之甚少:什么是 MIQP 问题的线性重构?
  • 你能给我指出一些有用的参考吗? (适合初学者)
  • 对不起,我不知道一般参考。重新制定非常依赖于问题。

标签: matlab optimization gurobi mixed-integer-programming


【解决方案1】:

这里没有完整的模型,没有太多的建议。严格的 Big-M 公式很重要,但你说过,你已经检查过了。有时将它们分开可能会有所帮助,但这是一个复杂的领域。

使用Gurobi parameter tuning tool 可能会给一些 问题带来很大好处。因此,请尝试导出您的模型并将其提供给调整工具。它会自动尝试数百个调整参数中的不同参数,并可能会给出一些不错的结果。

【讨论】:

    【解决方案2】:

    关于单工日志中的负面目标的问题,我可以想到几种可能的解释。首先,请注意,在对偶单纯形运行中存在对偶不可行性的情况下,会出现负目标值。在这种情况下,我不确定原始目标值到底对应什么。其次,如果您的 MIQP 在目标中包含二进制乘积,Gurobi 可能会凸化目标,即使原始模型在任何可行的情况下都必须具有非负目标,也可以使负目标出现在重新制定的模型中。解决方案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-18
      • 1970-01-01
      • 2021-11-16
      相关资源
      最近更新 更多