我有一组用AMPL和GAMS编写的优化问题。我在Matlab中有一个算法。如何用Matlab中的算法解决这些问题? 我已经阅读了关于GAMS的GDXMRW接口,但据我所知,它只能在Matlab和Matlab之间交换数据。 GAMS?那么是否有必要在GAMS中执行所有梯度,导数等计算,然后将这些结果提供给Matlab? 也许有人知道如何连接这个?
答案 0 :(得分:1)
您可以使用Hooking Your Solver to AMPL, page 23中描述的amplfunc.mex
和spamfunc.mex
将AMPL连接到MATLAB。这些mex文件可从http://www.ampl.com/DOWNLOADS/solvers/examples/下载。可以使用amplfunc
提供的amplfunc.mex
函数自动计算渐变。
由TOMLAB开发的MATLAB还有一个AMPL接口。
答案 1 :(得分:1)
(免责声明:我在MathWorks工作。)
我迟到了3年但是对于其他读过此内容的人,你可以使用https://www.mathworks.com/matlabcentral/fileexchange/64634-ampl-interface-to-matlab。对于AMPL问题,我认为这正是您正在寻找的。 p>
它为您提供了AMPL问题的界面(存储在nl文件或AMPL-API https://ampl.com/api/1.2.2/matlab/quick-start.html的对象中)。对于问题中的非线性函数,可以为任何点请求目标值,梯度和粗糙度计算。线性和二次函数作为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);