互联网络

近期关于YALMIP的一些知识

微信扫一扫,分享到朋友圈

近期关于YALMIP的一些知识
0

简单地把近期关于YALMIP的一些进展和知识写写,也许对大家有用。


1. Solver time v.s. YALMIP time

这几天吕鸣小同学追着我问:YALMIP+CPLEX/gurobi的方案下,我怎么知道cplex/gurobi这些solver花了多少时间在求解上,yalmip在模型的管理(主要是populating和precompiling)上花了多少时间?其实这个问题我本来能很容易回答的(我之前是仔细钻研过yalmip的source code的,当时还生成了yalmip的代码调用关系图,现在都弄丢了),但最近烦事太多,就偷懒问了Johan,方法如下:

output = solvesdp(…)

output.solvertime

output.yalmiptime





2. R
educe the overhead cost when solving a large number of optimization problems which only differ through some changing parameter in the model

这个问题是我的小师妹岳文英问我的,岳,online? 我要是能@你就好了,我知道你在微博上。这个问题应该很多人都遇见过:在一个算法或求解过程中,你可能需要重复求解一个model,而每次model之间的差异可能只是某个参数/数据发生了变化,这时,你如果重复使用YALMIP的solvesdp()去求解这些模型的话,你会发现cplex,gurobi等solver花费的solving time未必很长,而yalmip的在模型管理方面却花了很长时间,这是怎么回事?如何解决?



Why?

实际上,YALMIP在求解模型之前要对模型进行precompiling,这里面包括判断模型类型,装入模型数据,找到合适solver,把模型编译成某个solver能接受的形式(不容的solver对model的格式有不同要求,这很容易理解)。所以,在上述的应用情景下,每一次YALMIP都要做这些工作,它的overhead自然就比较大了。



How?

YALMIP给出了一个命令




P = optimizer
(
Constraints,Objective,Options,Parameters,DecisionVariables
)


将可能变化导致模型发生微小变化的数据放在第4个参数位置,每次这个参数发生变化时,如由30变成40时,用P{40}就可以了,YALMIP碰到这个命令,自动地在约束中加上[Parameters==40]这条约束,并且跳过重新precompling这个model的工作,节省了大量开销。YALMIP中的例子1:

sdpvar x b

P = optimizer
(
x >= b, x,
[
]
, b, x
)
;

for
b_trial =
0
:
0.1
:
1

P
{
b_trial
}

end

注意:这里要把变化的参数b用sdpvar来声明(以方便YALMIP后来加入类似[b==0.3]的约束)。但就是这一点,也带来了麻烦:想一想,要是约束ax>=3中参数a每次发生改变怎么办?如果再用“sdpvar a”这样的语句来声明,yalmip当然就认为这是一个bilinear model,而不是一个linear programming model了,自然,YALMIP在第一次precompling这个模型的时候就会去找nonlinear solvers,而不是我们常用的cplex,gurobi这些(MI)LP solvers了。这怎么办?Johan用sdpsettings中solver前的一个“+”号强制告诉YALMIP:我要强制用gurobi或cplex这些solver,你不要这么武断地把我的model判定为nonlinear!

sdpvar x a

P = optimizer
(
a*x >=
1
, x, sdpsettings
(
‘solver’
,
‘+gurobi’
)
, a, x
)
;

for
a_trial =
1
:
0.1
:
2

P
{
a_trial
}

end


这只是一个权宜之计,所以Johan说: Optimizer这个命令目前只是beta版本。我能细致地想出解决方案,但我知道其中Johan要改很多代码。







3. YALMIP forum on google groups

Johan最近在google groups上建立了一个YALMIP论坛,不幸的是,在我们可爱的祖国却上不去这个论坛,威武的Great Firewall再一次显示了它的强大。我等翻墙猛士又是VPN又是IPV6,使尽浑身解数去上学术性论坛。我跟Johan发邮件,他说会继续关注在SeDeMi论坛(老的论坛)上中国那边过来的问题,并且他现在没有想到合适的解决途径:他不想费力地上数据库服务器和web服务器,让yalmip forum在他实验室服务器上运行;但又找不到其它依托第三方的解决途径。呜呼!



Enjoy!

阅读原文...


Avatar

What is UNIX time?

上一篇

Company-led Projects: Liferay

下一篇

您也可能喜欢

评论已经被关闭。

插入图片
近期关于YALMIP的一些知识

长按储存图像,分享给朋友