Loading [MathJax]/extensions/TeX/AMSmath.js
SuperSCS  1.3.2
All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
Directions

Table of Contents

Fixed-point residual

This is the most trivial choice where d_k = -Rx_k, but typically does not lead to high performance.

Restarted Broyden

Directions are computed according to the following procedure:

  1. Inputs: y=y_k, r=Rx_k, s=s_k, \bar{\theta}, m (memory)
  2. Buffer: (\mathbf{s}, \mathbf{u})
  3. Returns: Direction d_\star (and updates the (\mathbf{s}, \mathbf{u})-buffer)
  4. d_\star \gets -r
  5. s_\star \gets y
  6. m'\gets current cursor position
  1. for i=0,\ldots, m'-1,
    1. s_\star \gets s_\star + \langle \mathbf{s}_i, s_\star\rangle \mathbf{u}_i
    2. d_\star \gets d_\star + \langle \mathbf{s}_i, d_\star\rangle \mathbf{u}_i
  2. \theta \gets \begin{cases}1,&\text{if } |\langle s, s_\star \rangle| \geq \bar{\theta} \|s\|^2\\ \frac{\|s\|^2(1-\mathrm{sgn}(\langle s, s_\star \rangle) \bar{\theta})}{\|s\|^2-\langle s, s_\star \rangle},&\text{otherwise}\end{cases}
  3. s_\star \gets (1-\theta)s + \theta s_\star
  4. u_\star \gets \frac{s-s_\star}{\langle s, s_\star \rangle} and push it into the buffer
  5. d_\star \gets d_\star + \langle s, d_\star\rangle u_\star
  6. Add s into the buffer and move the cursor forward or empty/reset it if it is full

Anderson's Acceleration

In Anderson's acceleration, we update a cache of past values of vectors y_i and s_i.

We need to solve a linear system whose LHS matrix is l\times m, where m is the memory length. We do so using the SVD decomposition.

The direction is computed by

\begin{eqnarray*} d_k = -Rx_k - (S_k-Y_k)t_k, \end{eqnarray*}

where t_k is a solution of the linear system Y_kt_k = Rx_k, or, if the system does not have a solution, a solution of the corresponding least-squares problem (solved using SVD).

Matrices Y_k and S_k are buffers of past vectors y_k and s_k respectively, that is

\begin{eqnarray*} S_k = \begin{bmatrix} s_k & s_{k-1} & \cdots & s_{k-m+1} \end{bmatrix}\\ Y_k = \begin{bmatrix} y_k & y_{k-1} & \cdots & y_{k-m+1} \end{bmatrix} \end{eqnarray*}

Lastly, R is the fixed point operator.

Note
All directions which require a finite-memory cache are supported by scs_direction_cache.

Full Broyden

Full Broyden method (for experimental purposes only, not recommended unless the problem is of very low dimension).