See also
This manual refers to Codac v1, but a new v2 implementation is currently in progress… an update of this manual will be available soon. See more.
Catalog of contractors for static constraints
The domains previously presented will be reduced by means of contractors: operators designed to eliminate unfeasible solutions according to constraints. We distinct two categories of contractors: those that are time-related (and that involve tubes) and the static ones presented in this chapter.
Mathematically, a contractor \(\mathcal{C}\) on a box \([\mathbf{x}]\in\mathbb{IR}^n\) is an operator \(\mathbb{IR}^{n}\to\mathbb{IR}^{n}\) such that
In Codac, a contractor is applied on a box by calling the .contract(…)
method.
Static contractors
The following contractors apply on intervals and boxes:
See also: codac-unsupported.
Combining contractors
Union, intersection, Cartesian product, or inversion of contractors is achievable. See for instance:
from codac import *
from vibes import vibes
# Define some non-linear function
f = Function('x', 'y', 'x*cos(x-y)+y')
# Build the separator associated to the constraint f(x,y) < 0
sep = SepFwdBwd(f, CmpOp.LEQ)
# Example of Cartesian product of two contractors
c3 = cart_prod([ctc_1, ctc_2])
// todo
How a contractor is implemented
Contractors are C++/Python objects. Some of them can be instantiated according to the problem to deal with. All of them will contract domains with the .contract()
method.
Pre-defined contractors
For ease of use, some contractor objects that do not require parameters are predefined in the namespace ctc
.
They can be used directly without instantiation.
Contractor |
Type |
Code |
Doc |
---|---|---|---|
\(\mathcal{C}_{\textrm{polar}}\) |
Static |
ctc::polar for C++ctc.polar for Python |
|
\(\mathcal{C}_{\textrm{dist}}\) |
Static |
ctc::dist for C++ctc.dist for Python |
|
\(\mathcal{C}_{\frac{d}{dt}}\) |
Dynam. |
ctc::deriv for C++ctc.deriv for Python |
|
\(\mathcal{C}_{\textrm{eval}}\) |
Dynam. |
ctc::eval for C++ctc.eval for Python |
|
\(\mathcal{C}_{\textrm{delay}}\) |
Dynam. |
ctc::delay for C++ctc.delay for Python |
– |