MOSEK学习总结1:浮光掠影看MOSEK
(2009-12-23 19:58:56)
标签:
academicmosekoptimizationsoftware杂谈 |
分类: 建模优化 |
问题1:MOSEK能干什么?
简单地说,MOSEK可以求解LP,QCQP,SOCP,以及相应的MIP(MILP,MIQCQP,MISOCP),这与
Cplex是相同的,在求解效果上感觉应该与Cplex差不多吧;但同时,MOSEK又可以求
解Entropy Optimization(非线性项以X_j*ln(X_j)的线性组合形式出现,对应的优化
器是mskenopt),Geometric Programming(非线性项以x_1^a1*x_2^a2*...*x_n^an正单
项式形式出现在目标函数和约束中,MOSEK不能直接求解GP问题,而是用mskgpopt优化
器求解一个转化后的问题,所以如果要取得原问题的解,需要做在程序中一些额外的
变换), Separable Convex Optimization(目标函数和约束中的非线性项是可分的,
即,f(x_1,x_2,...,x_n)=a1*f1(x_1)+a2*f2(x_2)+...+an*fn(x_n) ); 当然如同
Cplex, MOSEK也支持并行计算。所以MOSEK其自身功能比Cplex还多,性能也并不一定
会逊色多少。跟Cplex一样,MOSEK也是商业软件,但是,对我们研究者而言,这几乎
成为替代Cplex的不二选择,因为MOSEK对研究者提供完全功能的免费Licence,只要有
一个edu邮箱就可以申请。故我再次重申,Cplex不是必须的,如果你所在的单位没有
条件购买Cplex,就用MOSEK吧!
问题2:MOSEK与Cplex的优缺点?
MOSEK功能上与Cplex一样强悍(或者说比Cplex还强悍),但商业化程度显然比Cplex
差一些,具体表现在:技术文档读起来很学术化(你要具备很扎实的优化理论基础才
能读懂很多细节,不过好好读读确实能使自己的优化理论上一个台阶);使用接口不
够方便和友好,比如,你需要把不同组的Decision Variables x[i],y[i],w[i]等拼
成一个长数组X[i]才能进行优化,约束条件的输入有点类似Matlab优化工具箱,你需
要定位系数矩阵A中每一个非零元素的位置和取值,用起来很不方便,这一点比Cplex
差远了,在Cplex里,你总能轻轻松松地把模型建好。
问题3:MOSEK最易使用的接口是什么?
Matlab,使用起来很方便,求解速度并不比C API慢,因为它的内核都是基于C/C++的,这一点你毫不用怀疑,不要以为matlab是解释执行的就一定比C慢,关键是看内核是什么编译的。相比之下,MOSEK的C接口就有些麻烦了,在程序里你不得不关注很多细节,老衲的肺腑之言,千万不要用C接口了——Only U,玛特拉伯!另外,在优化研究领域,引领研究主流的大部分软件都提供基于Matlab的接口,且Matlab接口是数学家们使用和测试新算法的主流接口。
问题4:我拿MOSEK来干什么?
本人由于有正版Cplex, 只在如下情况下用MOSEK:(i)解SOCP或MISOCP,用以与Cplex
对比;(ii)解Entropy Optimization,Geometric Programming, Separable Convex
Optimization问题。
简单地说,MOSEK可以求解LP,QCQP,SOCP,以及相应的MIP(MILP,MIQCQP,MISOCP),这与
Cplex是相同的,在求解效果上感觉应该与Cplex差不多吧;但同时,MOSEK又可以求
解Entropy Optimization(非线性项以X_j*ln(X_j)的线性组合形式出现,对应的优化
器是mskenopt),Geometric Programming(非线性项以x_1^a1*x_2^a2*...*x_n^an正单
项式形式出现在目标函数和约束中,MOSEK不能直接求解GP问题,而是用mskgpopt优化
器求解一个转化后的问题,所以如果要取得原问题的解,需要做在程序中一些额外的
变换), Separable Convex Optimization(目标函数和约束中的非线性项是可分的,
即,f(x_1,x_2,...,x_n)=a1*f1(x_1)+a2*f2(x_2)+...+an*fn(x_n) ); 当然如同
Cplex, MOSEK也支持并行计算。所以MOSEK其自身功能比Cplex还多,性能也并不一定
会逊色多少。跟Cplex一样,MOSEK也是商业软件,但是,对我们研究者而言,这几乎
成为替代Cplex的不二选择,因为MOSEK对研究者提供完全功能的免费Licence,只要有
一个edu邮箱就可以申请。故我再次重申,Cplex不是必须的,如果你所在的单位没有
条件购买Cplex,就用MOSEK吧!
问题2:MOSEK与Cplex的优缺点?
MOSEK功能上与Cplex一样强悍(或者说比Cplex还强悍),但商业化程度显然比Cplex
差一些,具体表现在:技术文档读起来很学术化(你要具备很扎实的优化理论基础才
能读懂很多细节,不过好好读读确实能使自己的优化理论上一个台阶);使用接口不
够方便和友好,比如,你需要把不同组的Decision Variables x[i],y[i],w[i]等拼
成一个长数组X[i]才能进行优化,约束条件的输入有点类似Matlab优化工具箱,你需
要定位系数矩阵A中每一个非零元素的位置和取值,用起来很不方便,这一点比Cplex
差远了,在Cplex里,你总能轻轻松松地把模型建好。
问题3:MOSEK最易使用的接口是什么?
Matlab,使用起来很方便,求解速度并不比C API慢,因为它的内核都是基于C/C++的,这一点你毫不用怀疑,不要以为matlab是解释执行的就一定比C慢,关键是看内核是什么编译的。相比之下,MOSEK的C接口就有些麻烦了,在程序里你不得不关注很多细节,老衲的肺腑之言,千万不要用C接口了——Only U,玛特拉伯!另外,在优化研究领域,引领研究主流的大部分软件都提供基于Matlab的接口,且Matlab接口是数学家们使用和测试新算法的主流接口。
问题4:我拿MOSEK来干什么?
本人由于有正版Cplex, 只在如下情况下用MOSEK:(i)解SOCP或MISOCP,用以与Cplex
对比;(ii)解Entropy Optimization,Geometric Programming, Separable Convex
Optimization问题。