0

Я новичок в Matlab, извиняюсь, если вопрос глупо. Я использую функцию fmincon, чтобы вывести элементы m x n матрицы (X), который будет максимизировать следующую целевую функцию при к неотрицательности ограничения и:Matlab fmincon Not Yielding Global Maximum/Minimum

sum(x_{ij}) < 100

{f(x(1,1))+(f(x(1,2))+...+f(x(1,n))} + Beta*{f(x(2,1))+(f(x(2,2))+...+f(x(2,n))}+...+(Beta^(m-1))*{f(x(m,1))+(f(x(m,2))+...+f(x(m,n))}

где

f(xij)=zeta*[((alpha*pf*(xij^delta))-(pw*xij))^gamma]

В коде, который я использовал, использовался 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-го ряда):

f'(x11)=...=f'(x1n)

и так далее для каждой строки. Кроме того, мы имели бы для каждого столбца:

f'(x11)=beta*f'(x21)=...=(beta^m-1)*f'(xm1)

Для первого столбца и так далее. Результирующая матрица не удовлетворяет ни одному из этих условий. Я рассмотрел связанные вопросы в переполнении стека, а также документацию, и я не знаю, как добиться лучших результатов. Есть ли проблема с кодом? Можно ли настроить код для получения лучших результатов?

Могу ли я сделать предельные условия условиями остановки и как я могу это сделать. или я могу каким-то образом использовать якобиан? Любая помощь будет оценена по достоинству. Спасибо.

+0

Если у вас есть не-выпуклой задачи минимизации, то вы не гарантируется, что градиент на основе решателя как 'fmincon' возвращает глобальное оптимальное решение. Вместо этого вы можете получить локально оптимальное решение. – josliber

ответ

0

Никакой оптимизации не гарантируется возврат глобального минимума. Некоторым алгоритмам гарантируется найти локальный минимум, если гессиан положительно определен, однако нет математического способа определения только из значений функций и его n-й производной, если локальный минимум является глобальным минимумом.

Теперь о ваших условиях окончания. Вы можете передать структуру параметров fmincon, которая имеет параметры для управления работой fmincon. Вы можете выбрать другой алгоритм, который наилучшим образом соответствует вашей проблеме. Я бы прочитал документы для этой структуры опций и посмотрел, подходит ли что-то, что вы пытаетесь сделать.

http://www.mathworks.com/help/optim/ug/optimoptions.html