使用启发式算法生成初始解输入Gurobi 中求解

今天看论文 Double row layout problem. 最后提到一种方法,使用启发式算法生成解当做初始解给Gurobi求解。这样的结合求解可以提高求解效率。主要用到Yalmip 中的 assign 以及usex()命令

例如:

x = sdpvar(1,1);
assign(x,pi);
optimize([sin(x)^2 <= .1],x,sdpsettings('usex0',1));


我添加的程序片段如下:

aa=[ 0 1 1 1 1 1 1 1 1 1 1 1 NaN 0 1 1 1 1 1 1 1 1 1 1 NaN NaN 0 1 1 1 1 1 1 1 1 1 NaN NaN NaN 0 1 1 1 1 1 1 1 1 NaN NaN NaN NaN 0 1 1 1 1 1 1 1 NaN NaN NaN NaN NaN 0 1 1 1 1 1 1 NaN NaN NaN NaN NaN NaN 0 1 1 1 1 1 NaN NaN NaN NaN NaN NaN NaN 0 1 1 1 1 NaN NaN NaN NaN NaN NaN NaN NaN 0 1 1 1 NaN NaN NaN NaN NaN NaN NaN NaN NaN 0 1 1 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 0 1 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 0]; %这是启发式算法得到的结果 assign(a,aa); % 把aa 的值赋给变量a ops = sdpsettings('solver','gurobi','usex0',1,'gurobi.TimeLimit',10); % 使用 usex0() 命令使Yalmip识别值。



没有使用启发式算法生成初始解的结果:

Explored 17397 nodes (390282 simplex iterations) in 8.74 seconds

使用启发式算法生成初始解的结果:

Explored 7552 nodes (199913 simplex iterations) in 4.71 seconds

可以看出求解时间,搜索nodes 和 Simplex iterations 得到大规模的降低,提高了求解效率。

这是一个好方法,以后可以用到。另外Yalmip中有很多有意思的操作,自己要好好摸索,及时总结。

    原文作者:启发式算法
    原文地址: https://blog.csdn.net/richard_yang2016/article/details/77278408
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞