我有一个整数编程优化问题,我使用yalmip和xpress作为求解器在matlab中解决了这个问题。对于求解器,我想设置两个停止条件-时间限制和最佳间隙限制。
我尝试使用xpress函数MAXTIME
和MIPRELSTOP
,matlab代码编译并运行优化,但停止条件未转移到求解器。
相关代码部分如下:
Cons = [sum(sum((dVar_mat.*(x_mat.*y_vec))')) >= a]; %constraint
obj = sum(sum(dVar_mat.*z_mat)); %objective
ops = sdpsettings('solver', 'xpress', 'verbose', 2); %solver options
ops.xpress.MAXTIME = 10000; %set timelimit
ops.xpress.MIPRELSTOP = 0.05; %set relative gap as stop limit
solIP = optimize(Cons, obj, ops); % Solve
当我运行优化时,找到了一个解决方案,但比我希望停止的时间晚得多。该报告说:
STOPPING - MIPRELSTOP target reached (MIPRELSTOP=0.0001)
表示MIPRELSTOP
目标仍设置为默认值0.0001
。同样,优化也会在时间限制内运行,也忽略了停止条件。
如何在matlab / yalmip / xpress中正确设置停止条件?
答案 0 :(得分:0)
您确定使用正确的名称并且该名称已在MATLAB界面中公开,即ops.xpress中是否显示选项。我没有安装xpress,所以无法对其进行测试。
(顺便说一句,YALMIP问题最好在YALMIP Google网上论坛上问)
答案 1 :(得分:0)
Xpress Optimizer的“ MAXTIME”控件可以使用正值和负值:当解决MIP问题时,使用“ MAXTIME”的正值时,仅在找到解决方案后才应用限制,否则将继续解决直到第一个解决方案找到解决方案;负值表示很难停止,因此对于您的情况,我建议您尝试使用-10000这样的值作为时间限制。
(请参阅Xpress Optimizer参考手册中的文档,例如:https://www.fico.com/fico-xpress-optimization/docs/latest/solver/optimizer/HTML/MAXTIME.html)