如何使用Xpress Solver为Yalmip / matlab中的整数编程优化设置停止条件

时间:2019-06-15 17:59:14

标签: matlab optimization solver integer-programming mosel

我有一个整数编程优化问题,我使用yalmipxpress作为求解器在matlab中解决了这个问题。对于求解器,我想设置两个停止条件-时间限制和最佳间隙限制。

我尝试使用xpress函数MAXTIMEMIPRELSTOP,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中正确设置停止条件?

2 个答案:

答案 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