У меня есть набор задач оптимизации, написанных на AMPL и GAMS. И у меня есть алгоритм в Matlab. Как я могу решить эти проблемы с помощью алгоритма в Matlab? Я читал об интерфейсе GDXMRW для GAMS, но, как я понял, он может обмениваться данными только между Matlab и GAMS? Итак, нужно ли будет выполнять все вычисления градиентов, производных и т. Д. В GAMS, а затем передавать эти результаты в Matlab? Может кто знает как это подключить?
Использование MATLAB с AMPL
Ответы (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). Для нелинейных функций в вашей задаче вы можете запросить расчет объективного значения, градиента и гессиана для любой точки. Линейные и квадратичные функции хранятся в полях ampprob ниже в виде массивов и матриц MATLAB.
Типичное использование
>> 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);
Вы можете подключить AMPL к MATLAB, используя amplfunc.mex
и spamfunc.mex
, описанные в Подключение вашего решателя к AMPL, стр. 23 < / а>. Эти файлы mex доступны для загрузки со страницы http://www.ampl.com/DOWNLOADS/solvers/examples/. Градиент может быть вычислен автоматически с помощью функции amplfunc
, предоставляемой amplfunc.mex
.
Также существует интерфейс AMPL для MATLAB, разработанный TOMLAB.