1 什么是yalmip
yalmip是一个Matlab的工具包,通过matlab实现各种操作和调用,用来处理SDP非常好用。
2 yalmip安装方式
下载官网:YALMIP https://yalmip.github.io/
将其解压至matlab的toolbox文件夹下,打开matlab软件添加路径,注意:要将压缩包内的子文件夹都加入路径,选择“添加并包含子文件夹”来添加路径。最后键入which sdpvar命令,显示sdpvar路径则安装成功。
3.使用
a. 设置变量
设置默认格式变量:x = sdpvar(m, n, [option])
设置整数格式变量:x = intvar(m, n, [option])
设置0-1格式变量:x = binvar(m, n, [option])
b.设定目标函数
举例:f = [4 2 1] * x;
c.设定约束
直接设置:Constraints = [sum(x) <= 10, x(1) == 0, 0.5 <= x(2) <= 1.5];
增加新约束:Constraints = [Constraints, x(2) == 1,];
d.设定求解要求及参数
命令语句:sdpsettings(option1, value1, option2, value2, ……)
举例:ops=sdpsettings('solver','gurobi','verbos',2)
'solver' 参数指定程序用gurobi求解器(如果已经安装,否则会报错),如果不指定 ‘solver’ 参数,他会根据决策变量类型自动挑选已安装的、最适合的求解器;'verbose' 指定显示冗余度(冗余度越大,你就可以看到越详细的求解过程信息)
e.求解
result = solvesdp(F, f, ops)或sol = optimize(Constraints,Objective,options);
查看最优解x:solution=value(x)
4.举例:
举例代码如下:
% 清除工作区
clear;clc;close all;
% 创建决策变量
x=sdpvar(1,2);
% 添加约束条件
C=[x(1)+x(2)>=2x(2)-x(1)<=1x(1)<=1];
% 配置
ops=sdpsettings('verbose',0,'solver','lpsolve');
% 目标函数
z=-(x(1)+2*x(2))/(2*x(1)+x(2));% 注意这是求解最大值
% 求解
reuslt=optimize(C,z);
if reuslt.problem==0 % problem =0 代表求解成功
value(x)
-value(z)% 反转
else
disp('求解出错');
end
5.问题查探:
% Analyze error flags
if sol.problem == 0
% Extract and display value
solution = value(x)
else
display('Hmm, something went wrong!');
sol.info
yalmiperror(sol.problem)
作者:RavenX
链接:https://www.jianshu.com/p/e1c45b3d8d8a
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
网友评论