我要解決多重啓動不會產生所有最佳點
min f(x) s.t. x in X
其中
1)f(x)
具有多於一個局部最小值
2)f(x)
是平滑的,我可以計算梯度f(x)
3)X
是R
的緊湊子集
我使用MultiStart
在MatLab
找到所有局部最小值f(x)
。根據documentation對GlobalSearch
和MultiStart
的比較,我覺得我們可以用MultiStart
找到所有局部最小值。但是,當我運行一個簡單的測試函數時,MultiStart
僅輸出全局最小值和全局最小值處的函數值。我的問題是:使用MultiStart
,我如何獲得所有最小值?我的例子是f(x) = x^4 - x^2 + 1
X=[-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