跳到主要内容

约束软化

OPTIMake中内置了对约束软化的支持, 通过该接口能够减少内存占用与计算时间.

约束软化可分为对等式约束的软化与对不等式约束的软化, OPTIMake在以下接口中提供了约束软化支持:

  • variable (变量的上下限, 不等式约束)
  • inequality (不等式约束)
  • equality (等式约束)
  • start_equality (等式约束)
  • end_equality (等式约束)

软化的惩罚类型支持:

  • 'quadratic'
  • 'l1'

上面的问题定义章节中介绍了如何使用这些接口软化约束, 我们以以下的通用问题形式介绍OPTIMake中约束软化的问题设定. 需要注意的是, 下面的pp代表slack变量而非参数.

minvl(v)s.t.f(v)=0,g(v)0 \begin{split} \quad \quad &\quad \min_{v} l(v) \\ &\begin{split} \text{s.t.} \quad f(v) &= 0,\\ \quad g(v) &\geq 0 \end{split} \end{split}

等式约束软化

当软化的惩罚类型为'quadratic'时, 软化问题的定义如下 (wiw_i 为惩罚权重, pp为约束软化的slack变量):

minv,pl(v)+i12wipi2s.t.f(v)=p,g(v)0 \begin{split} \quad \quad &\quad \min_{v,p} l(v) + \sum_{i}\frac{1}{2}w_i p_i^2 \\ &\begin{split} \text{s.t.} \quad f(v) &= p,\\ \quad g(v) &\geq 0 \end{split} \end{split}

当软化的惩罚类型为'l1'时, 软化问题的定义如下 (wiw_i 为惩罚权重, p,np,n为约束软化的slack变量):

minv,p,nl(v)+iwi(pi+ni)s.t.f(v)=pn,g(v)0,p0,n0 \begin{split} \quad \quad &\quad \min_{v,p,n} l(v) + \sum_{i}w_i (p_i + n_i) \\ &\begin{split} \text{s.t.} \quad f(v) &= p - n,\\ \quad g(v) &\geq 0, \\ \quad p &\geq 0,\\ \quad n &\geq 0 \end{split} \end{split}

不等式约束软化

当软化的惩罚类型为'quadratic'时, 软化问题的定义如下 (wiw_i 为惩罚权重, pp为约束软化的slack变量):

minv,pl(v)+i12wipi2s.t.f(v)=0,g(v)+p0 \begin{split} \quad \quad &\quad \min_{v,p} l(v) + \sum_{i}\frac{1}{2}w_i p_i^2 \\ &\begin{split} \text{s.t.} \quad f(v) &= 0,\\ \quad g(v) + p &\geq 0 \end{split} \end{split}

当软化的惩罚类型为'l1'时, 软化问题的定义如下 (wiw_i 为惩罚权重, pp为约束软化的slack变量):

minv,p,nl(v)+iwipis.t.f(v)=0,g(v)+p0,p0 \begin{split} \quad \quad &\quad \min_{v,p,n} l(v) + \sum_{i}w_i p_i \\ &\begin{split} \text{s.t.} \quad f(v) &= 0,\\ \quad g(v) + p &\geq 0, \\ \quad p &\geq 0 \end{split} \end{split}