2016-09-28 46 views
1

我要解決多重啓動不會產生所有最佳點

min f(x) s.t. x in X 

其中

1)f(x)具有多於一個局部最小值

2)f(x)是平滑的,我可以計算梯度f(x)

3)XR的緊湊子集

我使用MultiStartMatLab找到所有局部最小值f(x)。根據documentationGlobalSearchMultiStart的比較,我覺得我們可以用MultiStart找到所有局部最小值。但是,當我運行一個簡單的測試函數時,MultiStart僅輸出全局最小值和全局最小值處的函數值。我的問題是:使用MultiStart,我如何獲得所有最小值?我的例子是f(x) = x^4 - x^2 + 1X=[-10,10]。在X,f(x)有兩個局部最小值:x* = 2^{-0.5}x* = -2^{-0.5}。兩者實際上都是全球最低標準,並且f(x*) =0.75。我的示例代碼如下。 Multistart僅輸出x* = 2^{-0.5}(初始值爲x0 = 1),並且不輸出x* = -2^{-0.5}。有沒有辦法輸出這兩種解決方案?

ms = MultiStart; 
ms.Display = 'iter'; 
options_fmincon = optimoptions('fmincon','Display','off','GradObj','on','GradConstr','off','Algorithm','sqp'); 
problem = createOptimProblem('fmincon','objective',@(x)test_function(x),'x0',1,'lb',-10,'ub',10,'options',options_fmincon); 
[x_multi,val_multi]= run(ms,problem,50) 

function [val,grad] = test_function(x) 
val = x^4-x^2+1; 
if nargout>1 
    grad = 4*x^3-2*x; 
end 
end 

回答

0

要回答我的問題:通過多頭找到了一組局部最小值是在run(MultiStart,problem,50)第五輸出參數。

run(MultiStart,problem,50)有兩個以上輸出變量。特別是,有五個輸出:

[out1,out2,out3,out4,out5] = run(MultiStart,problem,50) 

其中

out1是當地最好的極小 - 這是最大化f(x)出一套局部極小的,該計劃發現

的一個out2是目標函數在out值:out2 = f(out1)

out3一個出口標誌,告訴我們,爲什麼我們的公關圖收斂/不能收斂

out4列出了關於迭代次數等信息。

out5是一個包含所有相關輸出信息的結構,包括程序找到的局部最小值列表。