查找函数的所有局部最大值

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了查找函数的所有局部最大值相关的知识,希望对你有一定的参考价值。

我已经编写了代码,使用模拟退火算法来找到一个函数的全局最小值—下方—但是如何使用相同的算法找到一个函数的所有局部最大值]?]

我的代码,用于找到函数的局部最小值,请注意,我对函数一无所知,我要向[[interactor

索取f(x)处的x,即特定点处函数的成本。 #include <bits/stdc++.h> using namespace std; double myRand(double fMin, double fMax) { double f = (double)rand() / RAND_MAX; return fMin + f * (fMax - fMin); } int main() { cout.flush(); double x,fx,xMin; double fMin; cout << "? "<<fixed << setprecision(6) << -1<<endl; cin>>fMin; for(double T = 1000; T>1; T*=.995) { x=myRand(-100,100); cout << "? "<<fixed << setprecision(6) << x <<endl; cin>>fx; if (fx<fMin) { fMin=fx; xMin = x; } else { double P=exp((fMin-fx)/T); if (P>myRand(1,100)) { fMin=fx; xMin=x; } } } cout << "! "<<fixed << setprecision(6)<<xMin<<endl; return 0; }
我尝试找到局部最大值的方法是

#include <bits/stdc++.h> using namespace std; double myRand(double fMin, double fMax) { double f = (double)rand() / RAND_MAX; return fMin + f * (fMax - fMin); } int main() { cout.flush(); double x,fx,xMax; double fMax; int n; double a,b; cin>>n>>a>>b; double answer[n]; for(int i=0; i<n; i++) { cout << "? "<<fixed << setprecision(6) << a+i/5 <<endl; cin>>fMax; for(double T = 1000; T>1; T*=.995) { x=myRand(a,b); // i am avoiding to get the same local max twice while(i>0&&answer[i-1]==x) x=myRand(a,b); cout << "? "<<fixed << setprecision(6) << x <<endl; cin>>fx; if (fx>fMax) { fMax=fx; xMax = x; } else { double P=exp((fMax-fx)/T); if (P<myRand(0,1)) { fMax=fx; xMax=x; } } } answer[i]=xMax; } cout << "!"; for(int i=0; i<n; i++) { cout<<" "<<fixed << setprecision(6)<<answer[i]; } return 0; }

我已经编写了代码,使用模拟退火算法来找到一个函数的全局最小值(下图所示),但是如何使用相同的算法来找到一个函数的所有局部最大值?我的代码...
答案
  1. [放置算法

    内部

以上是关于查找函数的所有局部最大值的主要内容,如果未能解决你的问题,请参考以下文章

在 1D-NumPy 数组中查找奇异值/局部最大值/最小值集(再次)

查找主函数局部变量的地址

SQL - 查询帮助:查找局部最大值

寻找局部最大值和最小值

在 nxn 的二维数组中查找局部最大值

Python在离散数据上查找局部最大值和最小值[重复]