使用 matlab 寻找全局最小值?
Finding global minima using matlab?
我正在尝试使用以下代码找到峰值函数的全局最小值:
opts = optimoptions(@fmincon,'Algorithm','interior-point');
problem = createOptimProblem('fmincon','objective',...
@(x) ...
3*(1-x(1)).^2.*exp(-(x(1).^2) - (x(2)+1).^2) ...
- 10*(x(1)/5 - x(1).^3 - x(2).^5).*exp(-x(1).^2-x(2).^2) ...
- 1/3*exp(-(x(1)+1).^2 - x(2).^2),...
'x0',[0,0],'lb',[-Inf,-Inf],'ub',[Inf,Inf],'options',opts);
gs = GlobalSearch;
[x,f] = run(gs,problem);
x
我得到了:
x =
4.2454 2.3345
这不应该是正确答案。 (根据网上教程)
我可能错了什么?谢谢。
Matlab 的示例在 [-3,3]、[-3,3] 区域使用边界约束。如果您将代码更改为以下内容,您将获得 Matlab 的答案
problem = createOptimProblem('fmincon','objective',...
@(x) ...
3*(1-x(1)).^2.*exp(-(x(1).^2) - (x(2)+1).^2) ...
- 10*(x(1)/5 - x(1).^3 - x(2).^5).*exp(-x(1).^2-x(2).^2) ...
- 1/3*exp(-(x(1)+1).^2 - x(2).^2),...
'x0',[0,0],'lb',[-3,-3],'ub',[3,3],'options',opts);
顺便说一句,如果你想解决一个不受约束的问题,那么请改用 fminunc
。
我正在尝试使用以下代码找到峰值函数的全局最小值:
opts = optimoptions(@fmincon,'Algorithm','interior-point');
problem = createOptimProblem('fmincon','objective',...
@(x) ...
3*(1-x(1)).^2.*exp(-(x(1).^2) - (x(2)+1).^2) ...
- 10*(x(1)/5 - x(1).^3 - x(2).^5).*exp(-x(1).^2-x(2).^2) ...
- 1/3*exp(-(x(1)+1).^2 - x(2).^2),...
'x0',[0,0],'lb',[-Inf,-Inf],'ub',[Inf,Inf],'options',opts);
gs = GlobalSearch;
[x,f] = run(gs,problem);
x
我得到了:
x =
4.2454 2.3345
这不应该是正确答案。 (根据网上教程)
我可能错了什么?谢谢。
Matlab 的示例在 [-3,3]、[-3,3] 区域使用边界约束。如果您将代码更改为以下内容,您将获得 Matlab 的答案
problem = createOptimProblem('fmincon','objective',...
@(x) ...
3*(1-x(1)).^2.*exp(-(x(1).^2) - (x(2)+1).^2) ...
- 10*(x(1)/5 - x(1).^3 - x(2).^5).*exp(-x(1).^2-x(2).^2) ...
- 1/3*exp(-(x(1)+1).^2 - x(2).^2),...
'x0',[0,0],'lb',[-3,-3],'ub',[3,3],'options',opts);
顺便说一句,如果你想解决一个不受约束的问题,那么请改用 fminunc
。