Multistart不会产生所有最佳点

时间:2016-09-28 13:47:02

标签: matlab optimization

我想解决

SELECT * FROM information_schema.processlist;
CALL kill_other_processes();
SELECT * FROM information_schema.processlist;

,其中

1)min f(x) s.t. x in X 有多个本地最低

2)f(x)是平滑的,我可以计算f(x)

的渐变

3)f(x)X

的紧凑子集

我在R中使用MultiStart来查找MatLab的所有本地最小值。根据比较f(x)GlobalSearch的{​​{3}},在我看来,我们可以使用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}

1 个答案:

答案 0 :(得分:0)

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

run(MultiStart,problem,50)有两个以上的输出变量。特别是,有五个输出:

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

,其中

out1是最好的本地最小值 - 它是从程序找到的本地最小值集合中最大化f(x)的那个

out2out的目标函数的值:out2 = f(out1)

out3是一个退出标志,告诉我们为什么我们的程序收敛/未能收敛

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

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