RMVL  1.3.0
Robotic Manipulation and Vision Library
载入中...
搜索中...
未找到
最优化算法库

包含一维函数最小值搜索、无约束多维函数最小值搜索等最优化算法 更多...

最优化算法库 的协作图:

struct  rm::OptimalOptions
 优化选项 更多...
 

类型定义

using rm::Func1d = std::function<double(double)>
 一维函数
 
using rm::FuncNd = std::function<double(const std::vector<double> &)>
 多维函数
 

枚举

enum  rm::DiffMode : uint8_t { rm::Diff_Central , rm::Diff_Ridders }
 梯度/导数计算模式 更多...
 
enum  rm::OptimizeMode : uint8_t { rm::Optm_ConjGrad , rm::Optm_Simplex }
 多维函数最优化模式 更多...
 

函数

double rm::derivative (Func1d func, double x, DiffMode mode=Diff_Central, double dx=1e-3)
 计算一元函数的导数
 
std::vector< double > rm::grad (FuncNd func, const std::vector< double > &x, DiffMode mode=Diff_Central, double dx=1e-3)
 计算多元函数的梯度
 
std::pair< double, double > rm::region (Func1d func, double x0, double delta=1)
 采用进退法确定搜索区间
 
std::pair< double, double > rm::fminbnd (Func1d func, double x1, double x2, const OptimalOptions &options={})
 一维函数最小值搜索
 
std::pair< std::vector< double >, double > rm::fminunc (FuncNd func, const std::vector< double > &x0, const OptimalOptions &options={})
 无约束多维函数最小值搜索 [4] [8]
 

详细描述

包含一维函数最小值搜索、无约束多维函数最小值搜索等最优化算法

类型定义说明

◆ Func1d

using rm::Func1d = std::function<double(double)>

#include <rmvl/core/numcal.hpp>

一维函数

◆ FuncNd

using rm::FuncNd = std::function<double(const std::vector<double> &)>

#include <rmvl/core/numcal.hpp>

多维函数

枚举类型说明

◆ DiffMode

enum rm::DiffMode : uint8_t

#include <rmvl/core/numcal.hpp>

梯度/导数计算模式

枚举值
Diff_Central 

中心差商

Diff_Ridders 

Richardson 外推

◆ OptimizeMode

enum rm::OptimizeMode : uint8_t

#include <rmvl/core/numcal.hpp>

多维函数最优化模式

枚举值
Optm_ConjGrad 

共轭梯度法

Optm_Simplex 

单纯形法

函数说明

◆ derivative()

double rm::derivative ( Func1d func,
double x,
DiffMode mode = Diff_Central,
double dx = 1e-3 )

#include <rmvl/core/numcal.hpp>

计算一元函数的导数

参数
[in]func多元函数
[in]x指定位置的自变量
[in]mode导数计算模式,默认为中心差商 Diff_Central
[in]dx坐标的微小增量,默认为 1e-3
返回
函数在指定点的导数

◆ fminbnd()

std::pair< double, double > rm::fminbnd ( Func1d func,
double x1,
double x2,
const OptimalOptions & options = {} )

#include <rmvl/core/numcal.hpp>

一维函数最小值搜索

参数
[in]func一维函数
[in]x1搜索区间左端点
[in]x2搜索区间右端点
[in]options优化选项,默认为 1e-4 的误差容限和 100 的最大迭代次数
返回
[x, fval] 最小值点和最小值

◆ fminunc()

std::pair< std::vector< double >, double > rm::fminunc ( FuncNd func,
const std::vector< double > & x0,
const OptimalOptions & options = {} )

#include <rmvl/core/numcal.hpp>

无约束多维函数最小值搜索 [4] [8]

参数
[in]func多维函数
[in]x0初始点
[in]options优化选项,默认为 1e-4 的误差容限和 100 的最大迭代次数
返回
[x, fval] 最小值点和最小值

◆ grad()

std::vector< double > rm::grad ( FuncNd func,
const std::vector< double > & x,
DiffMode mode = Diff_Central,
double dx = 1e-3 )

#include <rmvl/core/numcal.hpp>

计算多元函数的梯度

参数
[in]func多元函数
[in]x指定位置的自变量
[in]mode梯度计算模式,默认为中心差商 Diff_Central
[in]dx计算偏导数时,坐标的微小增量,默认为 1e-3
返回
函数在指定点的梯度向量

◆ region()

std::pair< double, double > rm::region ( Func1d func,
double x0,
double delta = 1 )

#include <rmvl/core/numcal.hpp>

采用进退法确定搜索区间

参数
[in]func一维函数
[in]x0初始点
[in]delta搜索步长
返回
搜索区间