AMPL Matlab 自动求导(AD)求解雅克比、海森矩阵

本文介绍了如何利用AMPL的接口在Matlab环境下编译库,以便自动求解非线性问题的雅克比和海森矩阵。通过详细步骤演示了从获取和编译AMPL的开源包,到在Matlab中测试编译结果的过程,旨在简化研究工作,提高效率。
摘要由CSDN通过智能技术生成

1.Motivation

最非线性问题研究,不可避免的需要求解雅克比,海森矩阵,这部分工作繁琐,易出错,费时。幸运的AMPL不仅具有快速建模的功能,同时还可以给出雅克比和海森矩阵,最近花了一些时间对AMPL建立出来的模型在matlab下求解雅克比和海森矩阵信息的软件库进行编译,相信这项工作可以大幅度减少以后研究工作的工作量。

2. AMPL简介

AMPL(A Mathematical Programming Language)是一种描述并求解大规模复杂数学问题的建模语言。AMPL支持世界上大部分的求解器,如CBC、CPLEX、FortMP、Gurobi、MINOS、IPOPT、SNOPT和KNITRO。AMPL语言的的一个主要的特点是对优化问题的数学表达式的简化,这使得简明地可读地定义优化问题成为可能。根据NEOS的统计AMPL是使用最为广泛的数学模型语言。
同时AMPL提供了用户自定义求解器的接口,用户可以对建立好的模型开发自己的求解器,这是AMPL最厉害的地方,这也是相对于GAMS,我选择AMPL的原因。

3. 准备资料

(我这列出我成功编译所需的软件)
Visual studio
Matlab 2012b(32位)
AMPL 在github 上的开源包:http://ampl.com/resources/hooking-your-solver-to-ampl/ https://github.com/ampl/mp

4. 编译

4.1 编译amplsolv.lib文件

http://ampl.com/netlib/ampl/solvers/index.html 全部下载,该文件夹下包含makefile 文件,其中makefile.vc是针对visual studio编写的。打开Visual studio命令行,cd 到该目录下,输入nmake /f makefile.vc 会在目录下编译出amplsolv.lib。在C++/C语言,头文件加这个lib文件足够了。但是我们是在matlab下运行,还需要进行下一步。

4.2 编译amplfunc.mexw32文件

http://blog.csdn.net/ky25103378/article/details/50496203 博客中详述了如何在VS中编译mex文件的方法。其中几个注意地方:
1. 建立的事DLL工程
2. 打开项目属性配置页,C++ -> 附加包含目录 加入MATLAB安装目录下的 \extern\include 路径。
3. 链接器 -> 附加库目录 加入MATLAB的 \extern\lib\win32\microsoft 路径。
4. 链接器 -> 输入 -> 附加依赖项 输入libmx.lib libeng.lib libmat.lib libmex.lib 这四个lib文件。
5. 输出文件名改为*.mexw32
6. 我的VS是32位的,因此整个过程中都加入的32位source文件
将amplfunc.c加入到工程source文件夹下。点击build,如果一切顺利在解决方案debug目录下出现了amplfunc.mexw32的文件,将此文件拷贝到matlab工作路径下,可进行测试。
(amplfunc.c是针对稠密矩阵,要编译针对稀疏矩阵的需要使用spamfunc.c文件。)

5. 测试

.nl 文件的获得
.nl 文件是AMPL 模型生成的,生成的指令是 write “b+filename”;
如write “bOPFBRN”;会在mod文件所在目录下生成OPFBRN.nl文件,这个文件就可以作为matlab的测试文件了。

在example目录下,利用matlab运行代码

<
  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值