跳到主要内容

起点与终点约束定义

起点约束描述了第一个优化变量 v1v_1 的等式约束, 比如在车辆轨迹规划问题中的车辆初始状态约束.

终点约束描述了最后一个优化变量 vNv_N 的等式约束, 比如在火箭着陆轨迹规划问题中的末端零速度约束.

OPTIMake对起点和终点支持以下类型的等式约束:

  • general_equality: 通用类型, 通过表达式直接定义
  • external_general_equality: 通用类型, 通过外部C/C++函数定义

在完成约束定义后, 通过以下接口添加起点与终点约束:

prob.start_equality(eq, weight_soft, penalty_type)
prob.end_equality(eq, weight_soft, penalty_type)

其中, start_equality/end_equality接口的函数入参的定义如下 (约束软化下详见 建模接口 > 约束软化) :

  • eq: 等式约束, 类型为general_equality, external_general_equality
  • weight_soft: 该约束软化时的惩罚权重list, 必须为非负, 可以为常数或关于参数pp的表达式, 默认值为全inf, 表示硬约束
  • penalty_type: 该约束软化的惩罚类型list, 可选值为'none', 'quadratic', 'l1', 默认值为全'none', 表示硬约束
信息
  • 当约束类型为external_general_equality时, 只能调用一次prob.start_equality/end_equality设置约束
  • 当约束为其他类型时, 可调用多次prob.start_equality/end_equality添加多个约束

general_equality

下面为通过general_equality定义起点与终点约束的例子:

# x0, y0, phi0为已定义的parameter
start_eq = general_equality(expr = [x - x0, y - y0, phi - phi0])
prob.start_equality(start_eq)

# xN, yN, phiN为已定义的parameter
end_eq = general_equality(expr = [x - xN, y - yN, phi - phiN])
prob.end_equality(end_eq)

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

  • expr: 约束的表达式的list

external_general_equality

下面为通过external_general_equality定义起点与终点约束的例子:

eq_spy_jac = \
[[1, 0, 0, 0],
[0, 1, 0, 0],
[0, 0, 1, 0]]
eq_spy_hess = \
[[0, 0, 0, 0],
[0, 0, 0, 0],
[0, 0, 0, 0],
[0, 0, 0, 0]]

start_eq = external_general_equality(
dim = 3,
sparsity_jacobian=seq_spy_jac,
sparsity_hessian=seq_spy_hess)

end_eq = external_general_equality(
dim = 3,
sparsity_jacobian=seq_spy_jac,
sparsity_hessian=seq_spy_hess)

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

  • dim: 该约束的维度
  • sparsity_jacobian (optional): f(v,p)f(v, p)的Jacoboian的sparsity pattern, 维度为dim×nv\times n_{v}的矩阵, 0代表稀疏, 1代表稠密;其默认值为全1.0
  • sparsity_hessian (optional): yTf(v,p)y^T f(v, p)的Hessian的sparsity pattern (z为维度为dim×1\times 1的拉格朗日乘子), 维度为nv×nvn_{v} \times n_{v}的对称矩阵, 0代表稀疏, 1代表稠密;其默认值为全1.0