【问题标题】:How to use find_min_single_variable of DLIB in C++如何在 C++ 中使用 DLIB 的 find_min_single_variable
【发布时间】:2017-12-12 17:22:19
【问题描述】:

我正在尝试在 C++ 中使用 DLIB 中的函数 find_min_single_variable。 对于我的示例,我需要计算 sin(X) com 0

#include <iostream>
#include <cstdio>
#include <dlib/optimization.h>
#include <cmath>

using namespace dlib;

double my_sin(double x)
{
    return std::sin(x);
}

void main()
{
    // declare variables
    const double begin = 0.0;
    const double end = 6.28318530718;
    double starting_point = 0.0;
    const double eps = 1e-3;
    const long max_iter = 100;
    const double initial_search_radius = 0.01;
    // print variables
    std::cout << "result: \n" << find_min_single_variable(my_sin, starting_point, begin, end, eps, max_iter, initial_search_radius) << std::endl;
    std::printf("press any key to continue \n");
    std::getchar();
}

提前谢谢你

【问题讨论】:

    标签: c++ optimization dlib minimization


    【解决方案1】:

    发生这种情况是因为 0 是 sin(x) 在 0 附近的局部最小化器,左边界为 0。所以它在做正确的事情,因为 dlib::find_min_single_variable() 是一个局部优化器。它找到离起点最近的局部最小化器。

    但您真正想要的是全局优化器。 github 上最新的 dlib 代码包括一个针对这种情况的新优化器。如果您获得新的 dlib 代码并尝试以下操作:

    auto result = dlib::find_min_global(my_sin, begin, end, max_function_calls(30));
    cout << result.x/pi << endl;
    cout << result.y << endl;
    

    您将看到它找到了 x==1.5*pi 的全局最小值,并根据需要给出 sin(x)==-1。 dlib::find_min_global() 也不需要您指定任何起点或其他繁琐的参数。

    【讨论】:

      猜你喜欢
      • 2015-11-08
      • 2016-08-25
      • 2017-07-02
      • 2017-01-28
      • 2017-02-09
      • 2018-04-05
      • 2019-06-21
      • 2019-09-04
      • 2016-06-26
      相关资源
      最近更新 更多