大家好,欢迎来到IT知识分享网。
前言
SDP(SemiDefinite Programing,半定规划)是凸优化(Convex Optimization)的一种,最近我看的论文中经常出现。论文里总是把一个问题转化为 SDP,然后说一句"这个SDP问题可以被现成的SDP求解程序高效解决"。?????,这对于要复现文章代码的我来说怎么办呢?于是我只能靠自己去一探究竟了。 SDP 问题一般形式为:线性目标函数+一个等式约束+一个不等式约束+一个是LMI(Linear Matrix Inequality,线性矩阵不等式)约束。要解决此类问题,如今经过查阅各种资料发现是在Yalmip中应用SDPT3求解算法最好解决(欢迎批评指正)。那么YALMIP是什么?怎么在MatlabR2019a中加YALMIP?怎么将SDPT3配置到在MatlabR2019a中?下面我们一一解答。
YALMIP简介
yalmip是一位“集大成者”,它不仅自己包含基本的线性规划求解算法,比如linprog(线性规划)、bintprog(二值线性规划)、bnb(分支界定算法)等,他还提供了对cplex、GLPK、lpsolve等求解工具包更高层次的包装。更为可贵的是,yalmip真正实现了建模和算法二者的分离,它提供了一种统一的、简单的建模语言,针对所有的规划问题,都可以用这种统一的方式建模;至于用哪种求解算法,你只需要通过一次简单的参数配置指定就可以了,甚至不用你指定,yalmip会自动为你选择最适合的 总而言之,你只需要知道在matlab下如何用yalmip的方式建模,而不需要单独针对每一种工具包学习新的建模语法;而且yalmip 的建模语法非常简单,简单到你只需要记住四个命令就可以了:
1. 创建决策变量:
2. 添加约束:
3. 参数配置
‘solver’ 参数指定程序用lpsolve求解器(如果已经安装,否则会报错),如果不指定 ‘solver’ 参数,他会根据决策变量类型自动挑选已安装的、最适合的求解器;‘verbose’ 指定显示冗余度(冗余度越大,你就可以看到越详细的求解过程信息)。
4. 求解
就一句话:
>> solvesdp(F, f, ops) 求解一个数学规划(最小化)问题,该问题的目标函数由 f 指定,约束由 F 指定,ops指定求解参数,最后的结果存储在result结构体中。
以一个具体的例子说明用yalmip求解数学规划问题的方法。
如果用yalmip的话,只需要如下简单几句Matlab语句:
除此以外,yalmip还支持几乎所有其他的求解算法,在matlab下输入yalmiptest命令可以得到所有支持的算法以及它们的安装状态(其中cplex和lpsolve是我安装的,其他status为found的表示默认支持,not found表示支持但matlab中还未安装):
有了yalmip,你不再需要针对每一种工具包去学习特定的建模语言(比如用cplex要专门学习cplex的建模语言,用lingo要专门学习lingo的建模语言,还有GLPK、lpsolve、Matlab自带的求解器等等,如果每一种求解器都要学习新的建模语言的话,这个工作量是可想而知的)。相反,如果你选择使用yalmip,那么你只需要学习yalmip一种建模语法,因为yalmip真正实现了建模和算法的分离,所有的问题都可以用统一的方法建模,如果需要使用不同的求解器,只需要一句简单的配置即可。因此,yalmip不仅仅是一个线性规划求解器,更强大的地方在于,它提供了一个统一的建模平台,支持现有的几乎所有的求解算法。有了yalmip,一切都变得简单起来。
怎么在MatlabR2019a中加YALMIP?
1.下载工具包
yalmip的官网地址:[link](http://users.isy.liu.se/johanl/yalmip/pmwiki.php?n=Main.HomePage). 下载地址:[link](https://yalmip.github.io/download/). 下载最新的一个YALMIP就行。
2.放置工具包
3.添加路径
4.测试安装结果
怎么将SDPT3配置到在MatlabR2019a中?
1.下载SDPT3安装包
2.安装步骤
下载完成后,解压,将整个文件夹放入Matlab的bin文件夹中(将下载的SDPT3-4.0文件夹当作项目放入平时你们自己项目的文件夹即可),然后在Matlab软件中找到 Installmex.m运行,发现运行后发现如果matlab中未配置过支持的mex文件的编译器或者SDK是运行不了的。
3.下载安装支持MEX文件的编译器。
4.继续配置SDPT3
5.测试SDPT3安装结果
本人第一次写博客,如有表述不当或者引用不当的地方,欢迎批评指正!
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/117654.html