0

我是新來matlab,道歉,如果這個問題很愚蠢。我用fmincon函數以導出m x n矩陣(X),這將下面目標函數受試者最大化到非負性約束的元件,並且:Matlab fmincon不屈服全球最大/最小

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作爲客觀賦值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 

當代碼被用於5x5矩陣運行(的Optim(5,5)),將所得溶液 X =

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 2014-09-13 02:15:26

回答

0

沒有優化技術保證返回全局最小值。如果Hessian是正定的,一些算法保證找到局部最小值,但是如果局部最小值是全局最小值,那麼只有從函數值及其第n個導數才能確定數學方法。

現在至於你的終止條件。您可以將選項結構傳遞給fmincon,它具有控制fmincon操作的參數。您可以選擇一種不同的算法以最適合您的問題。我會閱讀這個選項結構的文檔,看看有沒有什麼符合你想要做的。

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