Возможно ли использование Matlab для оптимизации для записи данных от одной итерации к другой с помощью функционального m-файла, содержащего только Функция вывода?
Предоставленный пример показывает, что функция оптимизации должна быть вызвана изнутри функции "runOptimization", где также находится вложенная функция вывода.
function [history,searchdir] = runOptimization
% Set up shared variables with OUTFUN
history.x = [];
history.fval = [];
searchdir = [];
% call optimization
x0 = [-1 1];
options = optimoptions(@fmincon,'OutputFcn',@outfun,...
% nested output function
function stop = outfun(x,optimValues,state)
stop = false;
switch state
% ... store history and search directions over all iterations
Также этот сайт утверждает, что если вы хотите вашей функции вывода для записи данных от одной итерации к другой, вы должны написать один файл, который делает следующее:
- Содержит функцию вывода как вложенную функцию.
- Вызывает функцию оптимизации.
Однако мне было интересно, можно ли создать m-файл, содержащий только функцию вывода и использующий дополнительные параметры history
и searchdir
в качестве входных данных.
Я попробовал это со следующим подходом к анонимным функциям, где общие переменные history
и searchdir
объявлены «снаружи» в моем основном m-файле (не глобальном). А для целевой функции и выходной функции я использую отдельные m-файлы.
% main m-file
% Set up shared variables with OUTFUN
history.x = [];
history.fval = [];
searchdir = [];
outf = @(x,optimValues,state)outfun(x,optimValues,state,history,searchdir);
objective = @(x) objective_function(x,y,h);
x0 = [-1 1];
x = fmincon(objective,x0,[],[],[],[],[],[],[],options);
Однако каждый раз, когда выходная функция возвращается, общие переменные снова пусты. Есть ли другое решение вместо глобальных переменных, что-то вроде передачи по ссылке вместо копий в качестве аргументов.