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

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

最优化算法库 的协作图:

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

类型定义

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

枚举

enum class  rm::DiffMode : uint8_t { rm::DiffMode::Central , rm::DiffMode::Ridders }
 梯度/导数计算模式 更多...
 
enum class  rm::FminMode : uint8_t { rm::FminMode::ConjGrad , rm::FminMode::Simplex }
 多维函数最优化模式 更多...
 

函数

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={})
 无约束多维函数的最小值搜索 [4] [8] ,可参考 多维无约束最优化方法
 
std::pair< std::vector< double >, double > rm::fmincon (FuncNd func, const std::vector< double > &x0, const FuncNds &c, const FuncNds &ceq, const OptimalOptions &options={})
 有约束多维函数的最小值搜索
 
std::vector< double > rm::lsqnonlin (const FuncNds &funcs, const std::vector< double > &x0, const OptimalOptions &options={})
 无约束非线性最小二乘求解
 

详细描述

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

类型定义说明

◆ Func1d

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

#include <rmvl/core/numcal.hpp>

一元函数

◆ Func1ds

using rm::Func1ds = std::vector<Func1d>

#include <rmvl/core/numcal.hpp>

一元函数组

◆ FuncNd

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

#include <rmvl/core/numcal.hpp>

多元函数

◆ FuncNds

using rm::FuncNds = std::vector<FuncNd>

#include <rmvl/core/numcal.hpp>

多元函数组

枚举类型说明

◆ DiffMode

enum class rm::DiffMode : uint8_t
strong

#include <rmvl/core/numcal.hpp>

梯度/导数计算模式

枚举值
Central 

中心差商

Ridders 

Richardson 外推

◆ FminMode

enum class rm::FminMode : uint8_t
strong

#include <rmvl/core/numcal.hpp>

多维函数最优化模式

枚举值
ConjGrad 

共轭梯度法

Simplex 

单纯形法

函数说明

◆ derivative()

double rm::derivative ( Func1d func,
double x,
DiffMode mode = DiffMode::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优化选项
返回
[x, fval] 最小值点和最小值

◆ fmincon()

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

#include <rmvl/core/numcal.hpp>

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

参数
[in]func多维函数
[in]x0初始点
[in]c不等式约束 \(f_c(x)\le0\)
[in]ceq等式约束 \(f_{ceq}(x)=0\)
[in]optionsoptions 优化选项
返回
[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优化选项
返回
[x, fval] 最小值点和最小值

◆ grad()

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

#include <rmvl/core/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 = {} )

#include <rmvl/core/numcal.hpp>

无约束非线性最小二乘求解

参数
[in]funcs多维最小二乘约束函数,满足 \(F(\pmb x_k)=\frac12\|\pmb f(\pmb x_k)\|_2^2\)
[in]x0初始点
[in]options优化选项
返回
最小二乘解

◆ 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搜索步长
返回
搜索区间