[英]Matlab fmincon Not Yielding Global Maximum/Minimum
我是Matlab的新手,如果這個問題很傻,我深表歉意。 我正在使用fmincon
函數來導出a的元素 矩陣(X),它將在非負約束的約束下最大化以下目標函數和:
哪里
在我用來執行此代碼的代碼中,使用了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
但這不是全局最小值-正如邊際條件在全局最小值中指定的那樣(對於第一行):
以此類推。 同樣,我們將為每一列:
對於第一列,依此類推。 這些條件都不滿足所產生的矩陣。 我已經看過堆棧溢出中的相關問題以及文檔,並且我對如何獲得更好的結果一無所知。 代碼有問題嗎? 可以對代碼進行調整以獲得更好的結果嗎?
我可以將邊際條件作為停止條件嗎?我該如何去做。 或可以以某種方式使用雅可比行列式嗎? 任何幫助,將不勝感激。 謝謝。
沒有任何優化技術可以保證返回全局最小值。 如果Hessian是正定的,則可以保證某些算法找到局部最小值,但是,如果局部最小值是全局最小值,則沒有數學方法只能從函數值及其n階導數中確定。
現在,您的終止條件。 您可以將選項結構傳遞給fmincon,該結構具有控制fmincon操作的參數。 您可以選擇其他算法以最適合您的問題。 我將閱讀有關此選項結構的文檔,然后查看是否有任何適合您嘗試執行的操作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.