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

阿姆

我已经编写了代码,使用模拟退火算法来查找函数的全局最小值(下图),但是如何使用同一算法来查找函数的所有局部最大值

我寻找当地最低的函数,注意我一无所知,我问功能代码交互器用于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. 将算法放在函数内:

    double my_unknown_function(double x)
    {
      cout << "? " << fixed << setprecision(6) << x << endl;
      cin >> fx;
    
      return fx;
    }
    
    using function = double(double);
    
    double minimum(function func)
    {
      double x, fx, xMin;
    
      /* ... */
    
      for(double T = 1000; T>1; T*=.995)
      {
        x = myRand(-100,100);
        fx = func(x);
    
        /* ... */
      }
    
      return xMin;
    }
    

    这样,您可以简单地获得多个局部最小值:

    std::vector<double> lm;
    for (int i(0); i < 100; ++i)
      lm.push_back(minimum(my_unknown_function));
    

    如评论中所述,模拟退火是一种优化启发式方法。不是一个详尽的搜索也没有找到所有的最小值

    无论如何,minimum多次调用都可以得到不同的结果,因为它是随机的。可以预期的是,如果重启次数足够多,则任何本地搜索方法总有一天会为您提供实际的全局最小值。

  2. 不要重写用于最大化任务的算法:您可能会引入错误,并且测试更加困难。

    只需采取相反的功能:

    double my_unknown_function(double x)
    {
      cout << "? " << fixed << setprecision(6) << x << endl;
      cin >> fx;
    
      return -fx;
    }
    

同时考虑:

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

优化算法以查找所有局部最大值

来自分类Dev

快速找到C ++中的所有局部最大值

来自分类Dev

使用局部最小值和全局最大值查找范围内的所有数字

来自分类Dev

查找局部最大值之前的正值

来自分类Dev

查找采用两个输入变量的函数的局部最大值,每个变量具有不同的间隔

来自分类Dev

查找局部最小值和局部最大值

来自分类Dev

查找局部最大值的最大4个值

来自分类Dev

查找局部最大值的最大4个值

来自分类Dev

如何在列表中找到所有局部最大值和最小值

来自分类Dev

Excel-查找具有多像元峰的局部最大值

来自分类Dev

我将如何通过检查周围的所有数字是否小于它来查找局部最大值来遍历二维数组?

来自分类Dev

Python,找到数组的所有局部最大值,调整测量中的缺陷

来自分类Dev

查找一个值,该值给出采用两个输入变量的函数的局部最大值

来自分类Dev

在numpy数组中查找局部最大值

来自分类Dev

在MATLAB中使用逻辑索引查找局部最大值

来自分类Dev

查找给定数据集的局部最大值

来自分类Dev

如何使用fminsearch查找局部最大值?

来自分类Dev

查找所有li项的数据属性值的最大值

来自分类Dev

查找共享在汇总步骤中找到的最大值(值)的所有文档

来自分类Dev

SQL-查找值相同或下一个最大值的所有行

来自分类Dev

返回所有组的最大值?

来自分类Dev

查找数组中的最大值与查询匹配的所有Mongo文档

来自分类Dev

查找24小时范围内的最大值,并提取该行的所有属性

来自分类Dev

根据不同的第一列查找所有列的最大值

来自分类Dev

查找函数的最小值和最大值

来自分类Dev

查找矩阵中两个值之间的局部最小值和局部最大值

来自分类Dev

用于在图中查找局部最小值/最大值的爬山算法的时间复杂度

来自分类Dev

熊猫数据框查找局部最大值和最小值之和

来自分类常见问题

Scala Spark使用Window函数查找最大值

Related 相关文章

  1. 1

    优化算法以查找所有局部最大值

  2. 2

    快速找到C ++中的所有局部最大值

  3. 3

    使用局部最小值和全局最大值查找范围内的所有数字

  4. 4

    查找局部最大值之前的正值

  5. 5

    查找采用两个输入变量的函数的局部最大值,每个变量具有不同的间隔

  6. 6

    查找局部最小值和局部最大值

  7. 7

    查找局部最大值的最大4个值

  8. 8

    查找局部最大值的最大4个值

  9. 9

    如何在列表中找到所有局部最大值和最小值

  10. 10

    Excel-查找具有多像元峰的局部最大值

  11. 11

    我将如何通过检查周围的所有数字是否小于它来查找局部最大值来遍历二维数组?

  12. 12

    Python,找到数组的所有局部最大值,调整测量中的缺陷

  13. 13

    查找一个值,该值给出采用两个输入变量的函数的局部最大值

  14. 14

    在numpy数组中查找局部最大值

  15. 15

    在MATLAB中使用逻辑索引查找局部最大值

  16. 16

    查找给定数据集的局部最大值

  17. 17

    如何使用fminsearch查找局部最大值?

  18. 18

    查找所有li项的数据属性值的最大值

  19. 19

    查找共享在汇总步骤中找到的最大值(值)的所有文档

  20. 20

    SQL-查找值相同或下一个最大值的所有行

  21. 21

    返回所有组的最大值?

  22. 22

    查找数组中的最大值与查询匹配的所有Mongo文档

  23. 23

    查找24小时范围内的最大值,并提取该行的所有属性

  24. 24

    根据不同的第一列查找所有列的最大值

  25. 25

    查找函数的最小值和最大值

  26. 26

    查找矩阵中两个值之间的局部最小值和局部最大值

  27. 27

    用于在图中查找局部最小值/最大值的爬山算法的时间复杂度

  28. 28

    熊猫数据框查找局部最大值和最小值之和

  29. 29

    Scala Spark使用Window函数查找最大值

热门标签

归档