-2

我正在使用 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(次要):为什么我在根单纯形日志中得到一个否定的目标?目标函数怎么可能是负数?

4

2 回答 2

0

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

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

于 2018-11-23T07:47:38.340 回答
0

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

于 2020-07-03T23:26:39.693 回答