File: relay.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 (105 lines) | stat: -rw-r--r-- 2,757 bytes parent folder | download
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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
.. index::
   single: Relay or box-constrained AVI problems
   
.. contents::

.. _lcp_problem:

Relay or box-constrained AVI problems
*************************************

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

Find :math:`(z,w)` such that:

.. math::

    \begin{equation*}
    \left\lbrace \begin{array}{l}
    w = M z + q\\
    -w \in \mathcal{N}_{K}(z)\\
    \end{array}, \right.
    \end{equation*}

where M is an ( :math:`n \times n` )-matrix, q, z and w are n-dimensional vectors, K is the box defined by :math:`K=\{x\in\mathbb{R}^n\mid lb_i\leq x_i\leq ub_i,i=1,...,n\}` and :math:`\mathcal{N}_K(z)` is the normal cone to :math:`K` at :math:`z` .

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

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

The generic driver for all Relay problems is :func:`relay_driver()`.

Solvers list  :enum:`RELAY_SOLVER`

.. _relay_solvers:

Relay available solvers
=======================

Direct solvers
--------------

Enumerative solver (:enumerator:`SICONOS_RELAY_ENUM`)
"""""""""""""""""""""""""""""""""""""""""""""""""""""

The relay problem is reformulated as a LCP and solved with enum method, see :ref:`lcp_solvers`.

driver: :func:`relay_enum()`

parameters: same as :enumerator:`SICONOS_LCP_ENUM`.

Lemke solver (:enumerator:`SICONOS_RELAY_LEMKE`)
""""""""""""""""""""""""""""""""""""""""""""""""

The relay problem is reformulated as a LCP and solved with Lemke's method, see :ref:`lcp_solvers`.

driver: :func:`relay_lexicolemke()`

parameters: same as :enumerator:`SICONOS_LCP_ENUM`.


PATH (:enumerator:`SICONOS_RELAY_PATH`)
"""""""""""""""""""""""""""""""""""""""

The relay problem is reformulated as a LCP and solved with the PATH solver

*Works only if Siconos has been built with path support (if PathFerris or PathVI has been found, see :ref:`siconos_install_guide`)**

driver: :func:`relay_path()`

parameters : none.

AVI reformulation
-----------------

AVI, Cao/Ferris solver (:enumerator:`SICONOS_RELAY_AVI_CAOFERRIS`)
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

Based on an algorithm by Cao and Ferris for AVI with a polytopic set :math:`K` .

driver:  :func:`relay_avi_caoferris()`

parameters: same as :enumerator:`SICONOS_AVI_CAOFERRIS`, see :ref:`avi_solvers`.


There also exists a test version :enumerator:`SICONOS_RELAY_AVI_CAOFERRIS_TEST` with 

driver:  :func:`relay_avi_caoferris_test()`

parameters: same as :enumerator:`SICONOS_AVI_CAOFERRIS`, see :ref:`avi_solvers`.


Iterative solvers
-----------------

Projected Gauss-Seidel (:enumerator:`SICONOS_RELAY_PGS`)
""""""""""""""""""""""""""""""""""""""""""""""""""""""""

driver: :func:`relay_pgs()`

parameters:

* iparam[SICONOS_IPARAM_MAX_ITER] = 1000
* dparam[SICONOS_DPARAM_TOL] = 1e-6