跳到主要内容

objective定义

objective为需要最小化的目标函数. OPTIMake支持以下类型的objective定义:

  • general_objective: 通用类型, 通过表达式直接定义
  • least_square_objective: least square类型
  • external_general_objective: 通用类型, 通过外部C/C++函数定义

在完成objective定义后, 通过以下接口最小化该objective:

prob.objective(obj)

同理, 通过以下接口加入对最后一个点的objective:

prob.end_objective(obj)
信息
  • 只能调用一次prob.objective或prob.end_objective设置objective

general_objective

下面为通过表达式直接定义objective的例子:

# wyref, wphi为已定义的parameter
obj = general_objective(wxref * (x * sin(phi) - xref)**2 + wyref * (y - yref)**2 + wphi * phi**2 + 0.01 * delta**2 + 0.1 * v**2)
prob.objective(obj)

least_square_objective

当objective为以下形式时, 可通过least square接口定义, 其中rj(v,p)r_j(v, p)为残差项, wj(p)w_j(p)为其对应的权重项.

l(vi,p)=12jwj(p)rj2(vi,p) l(v_i, p) = \frac{1}{2}\sum_{j}w_j(p) r^2_j(v_i, p)

下面为通过least square接口定义objective的例子:

r = [x * sin(phi) - xref, y - yref, phi, delta, v]
w = [wxref, wyref, wphi, 0.01, 0.1]
obj = least_square_objective(residuals=r, weights=w)
prob.objective(obj)

其中, least_square_objective接口的函数入参的定义如下:

  • residuals: 残差项, 对应r(v,p)r(v, p), 类型为list
  • weights (optional): 残差权重, 对应w(p)w(p), 可以为常数或关于参数pp的表达式的list, 其默认值为全为1.0的list
信息

当objective通过least square接口定义时, 其Hessian通过Gauss-Newton方式近似计算.

external_general_objective

通过外部C/C++函数定义的general_objective. 在建模时, 可以指定其Hessian的稀疏性加速运算.

下面为通过external_general_objective接口定义objective的例子:

obj_spy_hess = \
[[1, 0, 0, 0],
[0, 1, 0, 0],
[0, 0, 1, 0],
[0, 0, 0, 1]]
obj = external_general_objective(sparsity_hessian=obj_spy_hess)
prob.objective(obj)

其中, external_general_objective接口的入参如下:

  • sparsity_hessian (optional): objective的Hessian的sparsity pattern, 维度为nv×nvn_{v} \times n_{v}的对称矩阵, 0代表稀疏, 1代表稠密;该参数为optional参数, 其默认值为全1.0