[英]How to use find_min_single_variable of DLIB in C++
我正在嘗試使用C ++中 DLIB的功能find_min_single_variable 。 對於我的示例,我需要計算sin(X)com的最小值0 <X <2 * pi。 結果應為-1。 但是結果始終為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();
}
先感謝您
發生這種情況是因為0是0附近的sin(x)的局部最小化器,左邊界為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()也不需要您指定任何起點或其他繁瑣的參數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.