首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多重启动并不能产生所有的最佳点。

多重启动并不能产生所有的最佳点。
EN

Stack Overflow用户
提问于 2016-09-28 13:47:01
回答 1查看 431关注 0票数 1

我想解决

代码语言:javascript
复制
min f(x) s.t. x in X

哪里

1) f(x)有一个以上的局部最小值

2) f(x)是光滑的,可以计算f(x)的梯度。

3) XR的紧子集

我使用MultiStartMatLab中寻找f(x)的所有局部极小值。根据文档关于GlobalSearchMultiStart的比较,在我看来,我们可以使用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}。有办法同时输出这两种解决方案吗?

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-09-28 16:45:25

要回答我自己的问题:通过MultiStart找到的局部极小值集在run(MultiStart,problem,50)的第五个输出参数中。

run(MultiStart,problem,50)有两个以上的输出变量。具体而言,有五项产出:

代码语言:javascript
复制
[out1,out2,out3,out4,out5] = run(MultiStart,problem,50)

哪里

out1是最好的局部极小值--它是将f(x)从程序找到的局部极小集合中最大化的方法。

out2outout2 = f(out1)中目标函数的值。

out3是一个退出标志,它告诉我们为什么我们的程序收敛/失败了。

out4列出了关于迭代次数等的信息。

out5是一个包含所有相关输出信息的结构,包括程序找到的局部极小值列表。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39749411

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档