Matlab调用Snopt中文用户手册.doc
《Matlab调用Snopt中文用户手册.doc》由会员分享,可在线阅读,更多相关《Matlab调用Snopt中文用户手册.doc(16页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、Matlab调用Snopt用户手册 参考文献Users Guide for Snopt-Matlab: Matlab interface for nonlinear optimizer SNOPT, Philip E. Gill, Elizabeth Wong, 2017.3.8。本文稿翻译于2017.06.27。本文介绍了调用Snopt的matlab接口函数。Snopt可以用来求解大规模线性或非线性约束问题,是求解带有约束的最优化问题的通用求解工具。Matlab接口函数下载地址:最新版本的Matlab接口函数为ver. 2.3.0,能够全面兼容Snopt 7.5及后续版本。如果想全面了解Sn
2、opt,请参考Users Guide for Snopt、SNOPT 7.6 Users Manual、SNOPT: An SQP algorithm for large- scale constrained optimization等。1 引言Snopt-matlab是非线性优化软件Snopt的matlab接口函数(利用SNOPTA接口)。Snopt可以用来求解如下形式的优化问题式中,x为n维向量,其上下界为常值;F(x)是由光滑的线性或非线性函数Fi(x)组成的向量;Fobj(x)是目标函数,通过输入参数ObjRow来设定(通过可选参数Maximize可以求解目标函数的最大值)。理想情况下
3、,Fi的一阶导数(梯度)是已知的,并且由用户编程。如果只知道其中几个梯度值,未知梯度将通过有限差分(finite difference)来估计。为了扩展软件求解各类问题的通用性,所有变量和函数的上下界都需要设定。对于未赋值的约束上下界,默认为或。自由变量和自由约束具有无穷的上下界。常值变量和等式上下界相同,约束形式为。2 编译和安装Matlab接口函数为了编译Matlab mex文件,利用下面的命令配置SNOPT优化包: ./configure -with-matlab=/path/to/matlabLinux系统用户需要使用-with-pic命令进行配置 ./configure -with-
4、matlab=/path/to/Matlab -with-pic默认情况下,SNOPT使用自带的BLAS子函数。但通过编译mex文件能够利用matlab自身内嵌的BLAS库函数。除了提供Matlab的安装地址,用户还需要使用以下命令告知将使用的第三方BLAS库函数,以及编译SNOPT时需要使用到64位的整数,这是因为Matlab自身内嵌的BLAS库函数只接受64位的整数。 ./configure -with-matlab=/path/to/Matlab -with-blas=matlab -with-64完成上述配置后,利用下面命令编译mex文件 make matlab编译产生的文件放在$SN
5、OPT/matlab目录下。$SNOPT/matlab/precompiled目录下存放有预先编译的Matlab mex文件,这些为SNOPT优化工具包基本库函数,能够适应以下机器类型:l Linux:*.mexa64l Mac OS: *.mexmaci64l Windows 64位Matlab: *.mexw64l Windows 32位Matlab: *.mexw32$SNOPT/matlab/precompiled目录和SNOPT Matlab m文件目录(通常为$SNOPT/matlab)需要添加到Matlab Path目录下,可以通过setpath命令或点击Home- Enviro
6、nment- Set Path。3 Matlab调用SNOPT子函数Matlab调用SNOPT的子函数包括如下:snopt是主函数,作用是调用SNOPT解决非线性NLP问题。snsolve为调用SNOPT可选择的函数,它基于Matlab fmincon函数。snJac用来设置SNOPT求解需要的导数结构。snend在程序结束时调用。snspec允许用户设置一些可选参数。snget、sngeti和sngetr获得当前值。snset、snseti和snsetr设置给定参数。snscreen控制snopt到matlab命令行的输出。snprint允许定义输出文件的名字。snsummary允许用户重定
7、义总结文件。snsetwork允许用户定义初始整数的数值及snopt工作区。3.1问题求解结构在很多情况下,F(x)向量为线性函数和非线性函数和的形式,snOpt-matlab允许分开定义这些量,通过输入变量iAfun、jAvar和A使线性部分只定义一次,只重复计算每个x处的非线性函数的值。假设F(x)向量每个分量Fi(x)构成形式如下式中fi(x)为非线性函数(也可能为0),Aij为常值。F(x)的Jacobian矩阵()由两部分的和组成:G(x)=f(x),A是元素为Aij的矩阵。G(x)矩阵和A矩阵必须是非重叠的,从而使得Jacobian矩阵的每个元素是G(x)或者A的元素,但并不同时包
8、含这两个矩阵的元素。例如,函数可以写成其Jacobian矩阵为F(x)可以写成的形式,其中G(x)矩阵和A矩阵中的非零元素以坐标的形式提供给snOpt-matlab。矩阵A的元素以的形式保存在iAfun、jAvar和A矩阵中。矩阵G中的稀疏元素以的形式保存在iGfun、jGvar中。相应的元素Gij会传递给用户userfun函数中的G(k)。矩阵A和矩阵G中的元素可以以任意阶保存。重复项将会被忽略。当指定Derivative option0和没有在userfun中提供梯度变量时,iGfun和jGvar由snJac函数自动定义。4 snopt函数这是使用snopt解决NLP问题的主程序。以下为几
9、种调用snopt函数的方法:snopt函数的输出形式为输入变量释义:分别定义变量x的初始值、x的下界、x的上界和x作为乘数的初始值。默认情况下x和xmul为0。:分别定义的上下限,以及乘子的初始值。默认值为0.0。:定义变量x的初始值。当对x的初始值没有特殊要求时,可以设置,(j=1:n)。的最优值有可能是它的边界值,可以设置,或者,。CRASH程序用来选择初始值。初始矩阵为三角阵(忽略每一列中的小量)。具有下列含义:CRASH程序执行完后,的变量被定义为基准变量。其它没有被选择为基准变量的变量在(或其附近)处被设置为非基础变量。也可以参考下面对输出变量的描述。:定义的初始值。可以参考下面对输
10、出变量的描述。:用户自定义函数,用来计算中的非线性部分,也可以计算给定向量x的Jacobian矩阵(可选)。是包含Matlab函数名字的字符串,或者是函数的句柄。:常数,用于添加到目标行中。默认情况下。:指定中的哪一行作为目标函数。如果中没有行作为目标函数,令,然后SNOPT在、范围内寻找可行解。取值范围:。:定义坐标及对应的元素,是矩阵A的非零元素,矩阵A是的线性部分。:定义坐标及对应的元素,是矩阵的非零元素,是导数矩阵的非线性部分,是的导数。:可选参数,结构体形式,包含了的选项。options.name定义了问题的名字。options.stop允许用户名为“snSTOP”的函数,该函数每次
11、迭代时都会被调用。options.stop是包含Matlab函数名字的字符串,或者是函数的句柄。options.start可以设置为“Cold”或者“Warm”,用来指定如何获得初始点。对于Cold参数,SNOPT利用“from scratch”寻找合适的初始点;对于Warm参数,利用和定义的初始点(一般为上一次运行结束的状态)。输出变量释义:问题解处的状态变量值和约束值。:SNOPT返回代码。具体请参考SNOPT参考文献。:问题解处的状态变量和约束的乘子值。:状态变量和约束的最终状态。:结构体形式。output.info同inform;output.iterations返回解决该问题所需较少
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Matlab 调用 Snopt 中文 用户手册
限制150内