簡體   English   中英

Matlab fmincon不產生全局最大值/最小值

[英]Matlab fmincon Not Yielding Global Maximum/Minimum

我是Matlab的新手,如果這個問題很傻,我深表歉意。 我正在使用fmincon函數來導出a的元素 × 矩陣(X),它將在非負約束的約束下最大化以下目標函數和:

總和(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 ,因為目標函數是非線性的:

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 

但這不是全局最小值-正如邊際條件在全局最小值中指定的那樣(對於第一行):

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

以此類推。 同樣,我們將為每一列:

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

對於第一列,依此類推。 這些條件都不滿足所產生的矩陣。 我已經看過堆棧溢出中的相關問題以及文檔,並且我對如何獲得更好的結果一無所知。 代碼有問題嗎? 可以對代碼進行調整以獲得更好的結果嗎?

我可以將邊際條件作為停止條件嗎?我該如何去做。 或可以以某種方式使用雅可比行列式嗎? 任何幫助,將不勝感激。 謝謝。

沒有任何優化技術可以保證返回全局最小值。 如果Hessian是正定的,則​​可以保證某些算法找到局部最小值,但是,如果局部最小值是全局最小值,則沒有數學方法只能從函數值及其n階導數中確定。

現在,您的終止條件。 您可以將選項結構傳遞給fmincon,該結構具有控制fmincon操作的參數。 您可以選擇其他算法以最適合您的問題。 我將閱讀有關此選項結構的文檔,然后查看是否有任何適合您嘗試執行的操作。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM