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

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

最优化算法库 的协作图:

struct  rm::OptimalOptions
 无约束多维函数优化选项 更多...
 

类型定义

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

枚举

enum class  rm::DiffMode : uint8_t { rm::DiffMode::Central , rm::DiffMode::Ridders }
 梯度/导数计算模式 更多...
 
enum class  rm::FminMode : uint8_t { rm::FminMode::ConjGrad , rm::FminMode::Simplex }
 多维函数最优化模式 更多...
 
enum class  rm::LsqMode : uint8_t { rm::LsqMode::SGN , rm::LsqMode::GN , rm::LsqMode::LM }
 最小二乘求解模式 更多...
 
enum class  rm::RobustMode : uint8_t {
  rm::RobustMode::L2 , rm::RobustMode::Huber , rm::RobustMode::Tukey , rm::RobustMode::Cauchy ,
  rm::RobustMode::GM
}
 Robust 核函数 更多...
 

函数

double rm::derivative (Func1d func, double x, DiffMode mode=DiffMode::Central, double dx=1e-3)
 计算一元函数的导数
 
std::vector< double > rm::grad (FuncNd func, const std::vector< double > &x, DiffMode mode=DiffMode::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={})
 无约束多维函数的最小值搜索,可参考 多维无约束最优化方法
 
std::pair< std::vector< double >, double > rm::fmincon (FuncNd func, const std::vector< double > &x0, FuncNds c, FuncNds ceq, const OptimalOptions &options={})
 有约束多维函数的最小值搜索
 
std::vector< double > rm::lsqnonlin (const FuncNds &funcs, const std::vector< double > &x0, const OptimalOptions &options={})
 非线性最小二乘求解,实现与 [1] 类似的算法
 
std::vector< double > rm::lsqnonlinRKF (const FuncNds &funcs, const std::vector< double > &x0, RobustMode rb, const OptimalOptions &options={})
 带 Robust 核函数的非线性最小二乘求解
 

详细描述

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

类型定义说明

◆ Func1d

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

#include <rmvl/algorithm/numcal.hpp>

一元函数

◆ Func1ds

using rm::Func1ds = std::vector<std::function<double(double)>>

#include <rmvl/algorithm/numcal.hpp>

一元函数组

◆ FuncNd

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

#include <rmvl/algorithm/numcal.hpp>

多元函数

◆ FuncNds

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

#include <rmvl/algorithm/numcal.hpp>

多元函数组

枚举类型说明

◆ DiffMode

enum class rm::DiffMode : uint8_t
strong

#include <rmvl/algorithm/numcal.hpp>

梯度/导数计算模式

枚举值
Central 
Python: rm.DiffMode.Central

中心差商

Ridders 
Python: rm.DiffMode.Ridders

Richardson 外推 [16]

◆ FminMode

enum class rm::FminMode : uint8_t
strong

#include <rmvl/algorithm/numcal.hpp>

多维函数最优化模式

枚举值
ConjGrad 
Python: rm.FminMode.ConjGrad

共轭梯度法 [8]

Simplex 
Python: rm.FminMode.Simplex

单纯形法 [14]

◆ LsqMode

enum class rm::LsqMode : uint8_t
strong

#include <rmvl/algorithm/numcal.hpp>

最小二乘求解模式

枚举值
SGN 
Python: rm.LsqMode.SGN

改进的 Gauss-Newton 法,单次寻找最优步长的 Gauss-Newton 法

GN 
Python: rm.LsqMode.GN

Gauss-Newton 法

LM 
Python: rm.LsqMode.LM

Levenberg-Marquardt 法 [5] [11]

◆ RobustMode

enum class rm::RobustMode : uint8_t
strong

#include <rmvl/algorithm/numcal.hpp>

Robust 核函数

枚举值
L2 
Python: rm.RobustMode.L2

L2 核函数

Huber 
Python: rm.RobustMode.Huber

Huber 核函数 [9]

Tukey 
Python: rm.RobustMode.Tukey

Tukey 核函数 [17]

Cauchy 
Python: rm.RobustMode.Cauchy

Cauchy 核函数

GM 
Python: rm.RobustMode.GM

Geman-McClure 核函数 [7]

函数说明

◆ derivative()

double rm::derivative ( Func1d func,
double x,
DiffMode mode = DiffMode::Central,
double dx = 1e-3 )
Python:
rm.derivative(func, x[, mode[, dx]]) -> grad

#include <rmvl/algorithm/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 = {} )
Python:
rm.fminbnd(func, x1, x2[, options]) -> x, fval

#include <rmvl/algorithm/numcal.hpp>

一维函数最小值搜索

参数
[in]func一维约束函数
[in]x1搜索区间左端点
[in]x2搜索区间右端点
[in]options优化选项,可供设置的有 max_itertol
返回
[x, fval] 最小值点和最小值

◆ fmincon()

std::pair< std::vector< double >, double > rm::fmincon ( FuncNd func,
const std::vector< double > & x0,
FuncNds c,
FuncNds ceq,
const OptimalOptions & options = {} )
Python:
rm.fmincon(func, x0, c, ceq[, options]) -> x, fval

#include <rmvl/algorithm/numcal.hpp>

有约束多维函数的最小值搜索

参数
[in]func多维函数
[in]x0初始点
[in]c不等式约束 \(f_c(x)\le0\)
[in]ceq等式约束 \(f_{ceq}(x)=0\)
[in]optionsoptions 优化选项,可供设置的有 exteriorfmin_modemax_itertoldx
返回
[x, fval] 最小值点和最小值

◆ fminunc()

std::pair< std::vector< double >, double > rm::fminunc ( FuncNd func,
const std::vector< double > & x0,
const OptimalOptions & options = {} )
Python:
rm.fminunc(func, x0[, options]) -> x, fval

#include <rmvl/algorithm/numcal.hpp>

无约束多维函数的最小值搜索,可参考 多维无约束最优化方法

参数
[in]func多维约束函数
[in]x0初始点
[in]options优化选项,可供设置的有 fmin_modemax_itertoldx
返回
[x, fval] 最小值点和最小值

◆ grad()

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

#include <rmvl/algorithm/numcal.hpp>

计算多元函数的梯度

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

◆ lsqnonlin()

std::vector< double > rm::lsqnonlin ( const FuncNds & funcs,
const std::vector< double > & x0,
const OptimalOptions & options = {} )
Python:
rm.lsqnonlin(funcs, x0[, options]) -> x

#include <rmvl/algorithm/numcal.hpp>

非线性最小二乘求解,实现与 [1] 类似的算法

参数
[in]funcs最小二乘目标函数,满足

\[F(\pmb x_k)=\frac12\|\pmb f(\pmb x_k)\|_2^2=\frac12 \left(\texttt{funcs}[0]^2+\texttt{funcs}[1]^2+\cdots+\texttt{funcs}[n]^2\right)\]

[in]x0初始点
[in]options优化选项,可供设置的有 lsq_modemax_itertoldx
返回
最小二乘解

◆ lsqnonlinRKF()

std::vector< double > rm::lsqnonlinRKF ( const FuncNds & funcs,
const std::vector< double > & x0,
RobustMode rb,
const OptimalOptions & options = {} )
Python:
rm.lsqnonlinRKF(funcs, x0, rb[, options]) -> x

#include <rmvl/algorithm/numcal.hpp>

带 Robust 核函数的非线性最小二乘求解

参数
[in]funcs最小二乘目标函数,参考 rm::lsqnonlin
[in]x0初始点
[in]rbRobust 核函数模式,参考 rm::RobustMode ,选择 rm::RobustMode::L2 时退化为 rm::lsqnonlin
[in]options优化选项,可供设置的有 lsq_modemax_itertoldx
返回
最小二乘解

◆ region()

std::pair< double, double > rm::region ( Func1d func,
double x0,
double delta = 1 )
Python:
rm.region(func, x0[, delta]) -> a, b

#include <rmvl/algorithm/numcal.hpp>

采用进退法确定搜索区间

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