YALMIP工具箱
分享到:
YALMIP是一款针对MATLAB开发的求解规划问题的工具包,让用户能够用MATLAB语法优雅地解决各种规划问题,而且安装也非常简单,只需要在软件中添加路径即可使用这款强大的工具箱,集成在软件中让用户使用起来更加方便。
规划问题一直是数模竞赛中常见的问题,许多使用MATLAB用户都知道,自带的规划工具箱并不好用,一些用户会下载Lingo等软件解决遇到的规划问题,不过更多的用户是选择YALMIP作为自己解决规划问题的关键。有了这款软件用户再也不需要担心使用MATLAB的时候遇到规划问题了,而且简单的操作方法以及和MATLAB一样的语法,使得YALMIP更加容易被用户所接受,有需要的用户不要错过哦。
2、将YALMIP的目录加入到MATLAB的PATH中,其中包括:
3、验证YALMIP的安装工作,
在MATLAB中输入 yalmiptest ,若出现
那么恭喜你,YALMIP安装成功!
4、安装基础的解析器
细心的朋友应该发现了,当我们执行 yalmiptest 时,实际上是检查可使用的解析器.下面就介绍一些常用的解析器以及安装
Gurobi/CPLEX:Gurobi和CPLEX适用的范围差不多,所以上只要装一个就行.性能的话还是CPLEX会好一点(毕竟IBM,但差别不大),两者都有针对学术的免费版本,CPLEX学术版本的获取需要以教师身份注册,而Gurobi是需要教育网IP验证.同时Gurobi还有免费的社区版本(半年).各版本的区别都在于支持的变量数上,然而Gurobi的社区版本个人以为完全可以满足国赛的需要了(超了那个数量自己想想思路有没有问题).
x = sdpvar(n,m); %生成a行b列的未知量
之前也说过YALMIP的未知量有3中类型.分别为
sdpvar %实型
intvar %整型
binvar %0-1型
需要混合规划多设几个变量就行了
2、约束条件
e.g.F = [-2 <= x <= 2];
3、写目标函数
obj = x(1)^2+x(2)^2;
4、求解
optimize(F,obj[,options]);
F为约束,obj为目标函数(默认求最小值),options可选择求解器,改变输出方式,如:
optimize(F,obj,sdpsettings('solver','gurobi','verbose',2));
指定solver为Gurobi,不打印解析过程
5、获取结果
opt=value(x); %x的值
%生成2*1的矩阵变量
x = sdpvar(2,1);
%限制条件
F = [-2 <= x <= 2];
%目标函数
obj = x(1)^2+x(2)^2;
%求解
optimize(F,obj);
%取得值以及对应的x的值
optobj = value(obj)
optx = value(x)
结果如下(我的gurobi过期了,以下为MATLAB自带求解器结果)
optobj =
1.5449e-43
optx =
1.0e-21 *
0.2779 0.2779
规划问题一直是数模竞赛中常见的问题,许多使用MATLAB用户都知道,自带的规划工具箱并不好用,一些用户会下载Lingo等软件解决遇到的规划问题,不过更多的用户是选择YALMIP作为自己解决规划问题的关键。有了这款软件用户再也不需要担心使用MATLAB的时候遇到规划问题了,而且简单的操作方法以及和MATLAB一样的语法,使得YALMIP更加容易被用户所接受,有需要的用户不要错过哦。
安装方法
1、确保MATLAB版本在2015a及以上.解压到MATLAB目录下,如果你的MATLAB安装在默认目录下,那么结果如下:2、将YALMIP的目录加入到MATLAB的PATH中,其中包括:
3、验证YALMIP的安装工作,
在MATLAB中输入 yalmiptest ,若出现
那么恭喜你,YALMIP安装成功!
4、安装基础的解析器
细心的朋友应该发现了,当我们执行 yalmiptest 时,实际上是检查可使用的解析器.下面就介绍一些常用的解析器以及安装
Gurobi/CPLEX:Gurobi和CPLEX适用的范围差不多,所以上只要装一个就行.性能的话还是CPLEX会好一点(毕竟IBM,但差别不大),两者都有针对学术的免费版本,CPLEX学术版本的获取需要以教师身份注册,而Gurobi是需要教育网IP验证.同时Gurobi还有免费的社区版本(半年).各版本的区别都在于支持的变量数上,然而Gurobi的社区版本个人以为完全可以满足国赛的需要了(超了那个数量自己想想思路有没有问题).
基本使用
1、设未知量x = sdpvar(n,m); %生成a行b列的未知量
之前也说过YALMIP的未知量有3中类型.分别为
sdpvar %实型
intvar %整型
binvar %0-1型
需要混合规划多设几个变量就行了
2、约束条件
e.g.F = [-2 <= x <= 2];
3、写目标函数
obj = x(1)^2+x(2)^2;
4、求解
optimize(F,obj[,options]);
F为约束,obj为目标函数(默认求最小值),options可选择求解器,改变输出方式,如:
optimize(F,obj,sdpsettings('solver','gurobi','verbose',2));
指定solver为Gurobi,不打印解析过程
5、获取结果
opt=value(x); %x的值
具体案例
求 x^2+y^2在x,y∈[-2,2]上的最小值.%生成2*1的矩阵变量
x = sdpvar(2,1);
%限制条件
F = [-2 <= x <= 2];
%目标函数
obj = x(1)^2+x(2)^2;
%求解
optimize(F,obj);
%取得值以及对应的x的值
optobj = value(obj)
optx = value(x)
结果如下(我的gurobi过期了,以下为MATLAB自带求解器结果)
optobj =
1.5449e-43
optx =
1.0e-21 *
0.2779 0.2779
展开更多
YALMIP工具箱下载地址
- 需先下载高速下载器:
- 专用下载:
- 其它下载: