Я новичок в Matlab, извиняюсь, если вопрос глупо. Я использую функцию fmincon
, чтобы вывести элементы матрицы (X), который будет максимизировать следующую целевую функцию при к неотрицательности ограничения и:Matlab fmincon Not Yielding Global Maximum/Minimum
где
В коде, который я использовал, использовался fmincon
, поскольку цель fu nction нелинейна:
function optim = optim(m,n)
A= ones(1,m*n);
b = 100;
z = zeros(m,n);
in = inf(m,n);
X = ones(m,n);
[x, bestval] = fmincon(@myfun2,X,A,b,[],[],z,in,[])
function f = myfun2(x)
Alpha = 5;
%kappa = 5;
zeta = 5;
beta = 0.90909;
delta = 0.4;
gamma = 0.4;
pf = 1;
pw = 1;
for i= 1:m
f=0;
sum(i)=0;
for j=1:n
sum(i) = sum(i) +((beta^(i-1))*(-1)*(zeta)*(((Alpha*pf.*((x(i,j)).^delta))-
(pw.*x(i,j)))^gamma));
end
f = f+sum(i)
end
end
end
Когда код был запущен для матрицы 5х5 (Optim (5,5)), полученный раствор х =
1.5439 1.5439 1.5439 1.5439 1.5439
1.5439 1.5439 1.5439 1.5439 1.5439
1.5439 1.5439 1.5439 1.5439 1.5439
1.5439 1.5439 1.5439 1.5439 1.5439
3.1748 3.1748 3.1748 3.1748 3.1748
bestval =
-31.8780
Но это не глобальный минимум - как граничные условия указать на глобальном минимуме мы имели бы (для 1-го ряда):
и так далее для каждой строки. Кроме того, мы имели бы для каждого столбца:
Для первого столбца и так далее. Результирующая матрица не удовлетворяет ни одному из этих условий. Я рассмотрел связанные вопросы в переполнении стека, а также документацию, и я не знаю, как добиться лучших результатов. Есть ли проблема с кодом? Можно ли настроить код для получения лучших результатов?
Могу ли я сделать предельные условия условиями остановки и как я могу это сделать. или я могу каким-то образом использовать якобиан? Любая помощь будет оценена по достоинству. Спасибо.
Если у вас есть не-выпуклой задачи минимизации, то вы не гарантируется, что градиент на основе решателя как 'fmincon' возвращает глобальное оптимальное решение. Вместо этого вы можете получить локально оптимальное решение. – josliber