跳到主要内容

支持的问题形式

OPTIMake求解以下的优化问题:

minv1,,vNi=1Nl(vi,p)+le(vN,p)subject tofs(v1,p)=0,f(vi,vi+1,p)=0,i=1,,N1,fe(vN,p)=0,g(vi,p)0,i=1,,N\begin{split} &\quad \quad \quad \min_{v_1,\cdots,v_N} \sum_{i=1}^{N} l(v_i, p) + l_e(v_N, p) \\ &\begin{split} \text{subject to} &\quad f_s(v_1, p) = 0,\\ &\quad f(v_{i}, v_{i+1}, p) = 0,\quad i=1,\cdots,N - 1,\\ &\quad f_e(v_N, p) = 0,\\ &\quad g(v_i, p) \geq 0,\quad i=1,\cdots,N \end{split} \end{split}

该优化问题为一个具有 NN 个stage的优化问题, 该优化问题可能为一个非线性非凸的优化问题. 其中:

  • v1,,vNRnvv_1,\cdots,v_N \in \mathbb{R}^{n_{v}} 为优化变量
  • pRnpp\in \mathbb{R}^{n_{p}} 为参数
  • l:Rnv×RnpRl: \mathbb{R}^{n_{v}} \times \mathbb{R}^{n_{p}} \rightarrow \mathbb{R} 为stage objective
  • le:Rnv×RnpRl_e: \mathbb{R}^{n_{v}} \times \mathbb{R}^{n_{p}} \rightarrow \mathbb{R} 为终点处额外的objective
  • fs:Rnv×RnpRnfsf_s: \mathbb{R}^{n_{v}} \times \mathbb{R}^{n_{p}} \rightarrow \mathbb{R}^{n_{f_s}} 为起点等式约束
  • f:Rnv×Rnv×RnpRnff: \mathbb{R}^{n_{v}} \times \mathbb{R}^{n_{v}} \times \mathbb{R}^{n_{p}} \rightarrow \mathbb{R}^{n_{f}} 为转移等式约束
  • fe:Rnv×RnpRnfef_e: \mathbb{R}^{n_{v}} \times \mathbb{R}^{n_{p}} \rightarrow \mathbb{R}^{n_{f_e}} 为终点等式约束
  • g:Rnv×RnpRngg: \mathbb{R}^{n_{v}} \times \mathbb{R}^{n_{p}} \rightarrow \mathbb{R}^{n_{g}} 为不等式约束

问题定义

下面为定义问题的例子, 该例子指定了问题的名称为vehicle且具有最大10个stage:

prob = multi_stage_problem(name='vehicle', N=10)

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

  • name: str 问题的名称, 该名称会用在生成代码的文件名, 函数名等

  • N: int 问题的最大stage数目, 必须大于等于1

信息
  • 因为上述的优化问题为一个多stage的优化问题, 等式约束与不等式约束的表达式在所有stage上都一致, 所以不需要在每个stage上都单独定义, 只需要定义一次该表达式即可 (参数与优化变量同理)
  • N为最大stage数, OPTIMake支持动态stage数, 即在求解时可以指定有效的stage数小于N, 但不能大于N

在完成问题名称和stage数的定义后, 下面说明如何定义优化问题中的参数, 优化变量及约束.