Ошибка в fmincon, проблемы с запуском задачи оптимизации в MATLABJAVA

Программисты JAVA общаются здесь
Anonymous
Ошибка в fmincon, проблемы с запуском задачи оптимизации в MATLAB

Сообщение Anonymous »

Я выполняю задачу оптимизации с помощью fmincon MATLAB и получаю сообщение об ошибке
**Ошибка при использовании saveOptimizationParams
Слишком много входных аргументов.
Ошибка в sqpInterface
Ошибка в fmincon (строка 672)
`[X,FVAL,EXITFLAG,OUTPUT,LAMBDA,GRAD,HESSIAN] = sqpInterface(funfcn,X,full(A),full(B),full(Aeq),full(Beq) , ...
**
Проблема в том, чтобы минимизировать obj = (alpha * PopulationDeviation) + (beta * locationDeviation);
Это моя проблема с оптимизацией

Код: Выделить всё

cd('/main/path')
path2root= '/path/to/something/I need/';

% Load initial parameters from file
initial_params = readParameters('parameters.txt');

% Load target data from file
target_population = load('/path/to/targetPop.txt');

% Define optimization parameters
alpha = 1;  % Weight for population size deviation
beta = 1;   % Weight for location deviation

% Define the optimization problem
objFunction = @(params) objectiveFun(params, target_population,alpha,beta);
initial_guess = [initial_params.natural_growth_rate, initial_params.natural_death_rate ];
lb = [0, 0];
ub = [Inf, Inf];

options = optimoptions('fmincon', 'Display', 'iter', 'Algorithm', 'sqp','OutputFcn',  @saveOptimizationParams);
% Perform optimization
[opt_params, fval] = fmincon(@(params)objectiveFun(params, target_population,alpha,beta), initial_guess, [], [], [], [], lb, ub, [], options);

Это моя целевая функция.

Код: Выделить всё

function obj = objectiveFun(params,target_population,alpha,beta)

growth_rate = params(1);% Currently not used
death_rate = params(2);% Currently not used

% Read the optimized parameters to a new file
initial_guess = readParameters('parameters.txt');

%initial_guess=[initial_params.growth_rate,initial_params.death_rate];

%Run ABM from jar fiel
system( 'java -jar /path/to/file.jar/')

% Load updated data from file
current_population = readCurrentPop('/path/to/data.csv');

% Calculate population deviation
P_current = size(current_population, 1);
P_target = size(target_population, 1);
populationDeviation = (P_current - P_target)^2;

% Calculate location deviation using the K nearest neigbor search
[Idx, D] = knnsearch(target_population, current_population);
locationDeviation=sum(D);

% Calculate combined objective
obj = (alpha * populationDeviation) + (beta * locationDeviation);

end

И, наконец, это моя функция вывода

Код: Выделить всё

function stop = saveOptimizationParams(optimValues, state)

% File to write
fileName = '/path/to/parameters.txt';

% Initialize stop flag
stop = false;

% Check the state of the optimization
switch state
case 'iter'
% Write the parameters to the file at each iteration
currentParams = optimValues.x;
paramCellArray = struct('natural_growth_rate', currentParams(1), 'natural_death_rate', ocurrentParams(2));
writeParameters(fileName, paramCellArray);
end
end

Проверил: я проверил, что целевая функция (objectiveFun) и функция вывода (saveOptimizationParams) запускаются сами по себе при отдельном тестировании
Оптимизация также запускается, когда я исключаю часть функции вывода из параметров, то есть

Код: Выделить всё

options = optimoptions('fmincon', 'Display', 'iter', 'Algorithm', 'sqp');
Однако, если я включаю функцию вывода, возникает ошибка, даже если функция является просто фиктивной, в которой ничего нет.
Я использую функцию вывода для обновления моего данные на каждом этапе, и поэтому я хочу запускать их на каждой итерации.
Если у кого-то есть какие-либо предложения или кто знает, чего мне не хватает, я буду признателен. Спасибо за прочтение

Подробнее здесь: https://stackoverflow.com/questions/788 ... -in-matlab

Вернуться в «JAVA»