File: mcp.rst

package info (click to toggle)
siconos 4.3.1%2Bdfsg-2
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 82,496 kB
  • sloc: cpp: 159,693; ansic: 108,665; fortran: 33,248; python: 20,709; xml: 1,244; sh: 385; makefile: 226
file content (89 lines) | stat: -rw-r--r-- 3,149 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
.. index::
   single: Mixed (Non Linear) Complementarity problem (MCP)
   
.. contents::

.. _mcp_problem:

Mixed (Non Linear) Complementarity problem (MCP)
************************************************

Problem statement
=================

Given a sufficiently smooth function :math:`{F} \colon {{\mathrm{I\!R}}}^{n+m} \to {{\mathrm{I\!R}}}^{n+m}` , the Mixed Complementarity problem (MCP) is to find two vectors :math:`(z,w \in {{\mathrm{I\!R}}}^{n+m})` such that:

.. math::

    \begin{align*} w &= \begin{pmatrix}w_e\\w_i\end{pmatrix} = F(z) \\ w_e &=0 \\ 0 &\le w_i \perp z_i \ge 0, \end{align*}

where "i" (resp. "e") stands for inequalities (resp. equalities). The vector :math:`z` is splitted like :math:`w` :

.. math::

    \begin{equation*}z =\begin{pmatrix}z_e\\z_i\end{pmatrix}.\end{equation*}

The vectors :math:`z_i,w_i` are of size ``sizeEqualities`` , the vectors :math:`z_e,w_e` are of size ``sizeInequalities`` and :math:`F` is a non linear function that must be user-defined.

A Mixed Complementarity problem (MCP) is a :ref:`ncp_problem` "augmented" with equality constraints.

Implementation in numerics
==========================

Structure to define the problem: :class:`MixedLinearComplementarityProblem`.

The generic driver for all MCP is :func:`mcp_driver()`.

Solvers list  :enum:`MCP_SOLVER`

.. _mcp_error:

.. _mcp_solvers:

MCP available solvers
=====================

Newton, Fisher-Burmeister (:enumerator:`SICONOS_MCP_NEWTON_FB_FBLSA`)
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

Solver based on Fischer-Burmeister reformulation and line search (VFBLSA in Facchinei--Pang 2003 p. 834)

driver: :func:`mcp_newton_FB_FBLSA()`

parameters:

* iparam[SICONOS_IPARAM_MAX_ITER] = 1000
* iparam[SICONOS_IPARAM_LSA_NONMONOTONE_LS] = 0;
* iparam[SICONOS_IPARAM_LSA_NONMONOTONE_LS_M] = 0;
* iparam[SICONOS_IPARAM_STOPPING_CRITERION] = SICONOS_STOPPING_CRITERION_USER_ROUTINE;
* dparam[SICONOS_DPARAM_TOL] = 1e-10
* dparam[SICONOS_DPARAM_LSA_ALPHA_MIN] = 1e-16;

Newton (min), Fisher-Burmeister (:enumerator:`SICONOS_MCP_NEWTON_MIN_FB_FBLSA`)
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

Solver based on Fischer-Burmeister reformulation and line search.
The descent direction is found using a min reformulation (minFBLSA in Facchinei--Pang 2003 p. 855)

driver: :func:`mcp_newton_min_FB_FBLSA()`

parameters:

* iparam[SICONOS_IPARAM_MAX_ITER] = 1000
* iparam[SICONOS_IPARAM_LSA_NONMONOTONE_LS] = 0;
* iparam[SICONOS_IPARAM_LSA_NONMONOTONE_LS_M] = 0;
* iparam[SICONOS_IPARAM_STOPPING_CRITERION] = SICONOS_STOPPING_CRITERION_USER_ROUTINE;
* dparam[SICONOS_DPARAM_TOL] = 1e-10
* dparam[SICONOS_DPARAM_LSA_ALPHA_MIN] = 1e-16;
Newton, Fisher-Burmeister (:enumerator:`SICONOS_MCP_OLD_FB`)
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

Solver based on Fischer-Burmeister reformulation, old (outdated) version, for the records.

driver: :func:`mcp_old_FischerBurmeister()`

parameters:

* iparam[SICONOS_IPARAM_MAX_ITER] = 10
* iparam[SICONOS_IPARAM_STOPPING_CRITERION] = SICONOS_STOPPING_CRITERION_USER_ROUTINE;
* dparam[SICONOS_DPARAM_TOL] = 1e-7