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

问题描述 投票:1回答:1

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

我的代码,用于找到函数的局部最小值,请注意,我对函数一无所知,我要向[[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; }

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

    内部

© www.soinside.com 2019 - 2024. All rights reserved.