我有一系列用 AMPL 和 GAMS 编写的优化问题。我在 Matlab 中有一个算法。如何用 Matlab 中的算法解决这些问题?我已经阅读了 GAMS 的 GDMXRW 接口,但据我了解,它只能在 Matlab 和 GAMS 之间交换数据?那么是否有必要在 GAMS 中执行所有梯度、导数等计算,然后将这些结果提供给 Matlab?也许有人知道如何连接这个?
问问题
1457 次
2 回答
2
(免责声明:我为 MathWorks 工作。)
我迟到了 3 年,但对于其他阅读本文的人,您可以使用https://www.mathworks.com/matlabcentral/fileexchange/64634-ampl-interface-to-matlab。对于 AMPL 问题,我认为这正是您要寻找的。
它为您提供了 AMPL 问题的接口(存储在 nl 文件或 AMPL-API 的对象中https://ampl.com/api/1.2.2/matlab/quick-start.html)。对于问题中的非线性函数,您可以要求对任意点进行目标值、梯度和 hessian 计算。线性和二次函数作为 MATLAB 数组和矩阵存储在下面的 amplprob 字段中。
一个典型的用途是
>> amplprob = amplread('my_problem.nl')
>> % objective value of the first nonlinear objective function
>> f = nonlinobjective(amplprob,x,1)
>> % value, gradient and hessian of the first nonlinear objective function
>> [f,J,H] = nonlinobjective(amplprob,x,1)
>> % value and gradient of the second nonlinear constraint at x
>> [g, G] = nonlinconstr(amplprob,x,2);
于 2018-03-02T14:35:12.127 回答
1
您可以使用将您的求解器连接到 AMPL, page 23amplfunc.mex
中spamfunc.mex
描述的方法将 AMPL 连接到 MATLAB 。这些 mex 文件可从http://www.ampl.com/DOWNLOADS/solvers/examples/下载。梯度可以使用提供的函数自动计算。amplfunc
amplfunc.mex
TOMLAB还开发了一个到 MATLAB 的 AMPL 接口。
于 2014-10-10T18:40:22.100 回答