File numerics/src/tools/FischerBurmeister.h

Go to the source code of this file

Fischer Burmeister functions.

A set of routines to compute the Fischer-Burmeister function and its jacobian.

The Fischer-Burmeister function is defined as :

\[ \phi(z,w) = \sqrt( z^2 + w^2) - z - w \]

This function is used to solve MLCP, MCP and NCP. The inequalities are rewritten using Fischer function with \( w = F(z) \) and solved with a semi-smooth Newton algorithm.

For “mixed” problems (i.e. including equality constraints), the Fischer function is defined as :

\[\begin{split} \phi_{mixed}(z,F(z)) = \left\lbrace \begin{array}{c} F_e(z) \\ \sqrt( z^2 + F_i(z)^2) - z - F_i(z) \end{array}\right. \end{split}\]

where index “e” stands for equalities part in F and “i” for inequalities.

For details see the paper of Kanzow and Kleinmichel, “A New Class of Semismooth Newton-type Methods for Nonlinear

Complementarity Problems”, Computational Optimization and Applications 11, 227-251 (1998).

The notations below are more or less those of this paper.

Functions

void Jac_F_FB(int n1, int n2, double *restrict z, double *restrict F, double *restrict workV1, double *restrict workV2, NumericsMatrix *restrict nabla_F, NumericsMatrix *restrict H)

Computes an element of \(Jac \mathbf{F}_{\mathrm{FB}}\) (possibly mixed) Fischer-Burmeister function, see FacchineiPang (2003) p.

808

Parameters
  • [in] n1: number of equality constraints.

  • [in] n2: number of complementarity constraints.

  • [in] z: vector \(z\)

  • [in] F: vector \(F(z)\)

  • [in] workV1: work vector (value gets overwritten)

  • [in] workV2: work vector (value gets overwritten)

  • [in] nabla_F: \( \nabla_z F(z) \)

  • [inout] H: element of Jac_F_merit

void jacobianPhi_FB(int size, double *z, double *F, double *jacobianF, double *jacobianPhi)

Jacobian of the Fischer Burmeister function, \( \nabla_z \phi(z,F(z)) \).

Warning

this function looks broken !

Parameters
  • [in] size: of vector \( z \)

  • [in] z: vector \( z \)

  • [in] F: vector \( F(z) \)

  • [in] jacobianF: \( \nabla_z F(z) \)

  • [inout] jacobianPhi: \( \nabla_z \phi(z,F(z)) \).

void jacobianPhi_Mixed_FB(int sizeEq, int sizeIneq, double *z, double *F, double *jacobianF, double *jacobianPhi)

Jacobian of the mixed Fischer Burmeister function, \( \nabla_z \phi(z,F(z)) \).

Warning

this function looks broken !

Parameters
  • [in] sizeEq: number of equality constraints.

  • [in] sizeIneq: number of complementarity constraints.

  • [in] z: vector \(z\)

  • [in] F: vector \(F(z)\)

  • [in] jacobianF: \( \nabla_z F(z) \)

  • [inout] jacobianPhi: \( \nabla_z \phi(z,F(z)) \) .

void phi_FB(int size, double *restrict z, double *restrict F, double *restrict phi)

Fischer Burmeister function, \( \phi(z,F(z)) \).

Parameters
  • [in] size: of vector z

  • [in] z: vector \( z \)

  • [in] F: vector \( F(z) \)

  • [inout] phi: vector \( \phi(z,F(z)) \)

void phi_Mixed_FB(int sizeEq, int sizeIneq, double *restrict z, double *restrict F, double *restrict phi)

Mixed Fischer Burmeister function,

\[\begin{split} \phi(z,F(z)) = \left\lbrace \begin{array}{c} F(z) \\ \sqrt( z^2 + F(z)^2) - z - F(z) \end{array}\right. \end{split}\]
, the upper for equalities and the rest for inequalities.

Parameters
  • [in] sizeEq: number of equality constraints.

  • [in] sizeIneq: number of complementarity constraints.

  • [in] z: vector z (size = sizeEq + sizeIneq)

  • [in] F: vector F(z)

  • [inout] phi: \( \phi(z,F(z)) \).