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接口定义, 其中为残差项, 为其对应的权重项.
下面为通过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: 残差项, 对应, 类型为list
- weights (optional): 残差权重, 对应, 可以为常数或关于参数的表达式的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, 维度为的对称矩阵, 0代表稀疏, 1代表稠密;该参数为optional参数, 其默认值为全1.0