matlab怎么调用gurobi,优化工具(YALMIP\Cplex\Gurobi)近期使用经验杂谈

一直在使用优化工具,但博客好久没更新了,把一些零零碎碎的东西写一写吧,很凌乱,将就着看吧。

1. Some

news.

(1) Gurobi 3.0 has been released

(see http://www.gurobi.com/)

Gurobi当前版本只能求解LP,MILP模型,求解性能超越了cplex,在业界引起了不小震动;个人感觉其并行计算(在多核机器上)能力比Cplex稍差;预计下半年Gurobi将支持QCQP/SOCP,MIQCQP/MISOCP模型的求解,拭目以待;Gurobi对学术界也免费全功能提供软件,只是认证(License

Validation)有些严格(有些狗血),几个月前老衲就开始用了,为了认证,当时把机器抱到了隔壁的机器人所(他们的服务器有反向DNS解析);yalmip加入了对Gurobi的支持;至于Gurobi的开发团队是否跟Cplex的开发团队有什么关系,那太八卦了,不要问我,我不清楚;

(2) Cplex 12.2 has been

released

外表上焕然一新,各个组件都整合到Cplex studio里面了;有些小的改进,如Barrier算法、MIP

Kappa等;你不要指望其有巨大的改进,上一个版本已经足够好了。

(3) yalmip R20100702 has been

released

2. The

out-of-memory issue in CPLEX

The out-of-memory exception

is always encountered when solving

MILP/MIQCQP/MISOCP models, and the issue has been talked about

again and again in the cplex forum. John Cui propose a

3GB switch method to elminate

the exception (other methods can be found in the

cplex forum). However, a lot of work

experience show the incompetence

of these methods.

I encounter this issue

these days once again. My experiences show that one can always get

around the exception by tuning some suitable parameters. For some

typical parameters, see

http://blog.sina.com.cn/s/blog_50c154510100h3hh.html

I mean, based on the analysis of the solution log info, tuning the

options always helps.

3.

matlab中的并行计算

(1)matlab中,如果涉及到并行计算,用命令"cputime"统计计算时间会有很大误差,建议用tic,toc。

(2)如果是多核CPU,要有意识地使用并行计算。对已有的代码并行化处理很简单,主要是利用parfor命令替代for命令;但不是随便可以替代:当不同的迭代的计算间有较强的依赖关系时(如第k次迭代在计算时强依赖于第k-1次计算的结果),并不能使用并行计算,这也同时告诉我们,while循环的计算过程通常不能并行化。关于并行计算的细节,Just

google it!

(3)大部分的优化软件默认情况下是开启并行计算功能的,如Cplex,

Gurobi,这能大大提高计算效率,用户无需干涉;但有些Solvers,如MOSEK,由于其B&C过程本身并没有并行化处理,其求解Mixed

Integer问题时效率很低——你在求解Mixed

Integer问题时,发现MOSEK的效率比Cplex低很多,不要认为MOSEK的算法不好,比Cplex弱很多,真正的原因是其B&C过程没有并行计算,如果MOSEK下一个版本中加入B&C的并行化处理(MOSEK当前版本只是实现了对内点算法的并行化处理),相信差距就没有那么大了。

Cheers!

你可能感兴趣的:(matlab怎么调用gurobi,优化工具(YALMIP\Cplex\Gurobi)近期使用经验杂谈)