SejeteralO — Modèle tarifaire Bézier
Tarification participative de l'eau : les citoyens façonnent une courbe prix/volume via des points de contrôle Bézier ; le prix d'inflexion $p_0$ est calculé automatiquement pour équilibrer les recettes de la commune.
1. Paramètres
Paramètres structurels (fixés par la commune)
| Paramètre | Signification |
| $v_\text{inf}$ | Volume d'inflexion — frontière entre les deux paliers (m³/an) |
| $v_\text{max}$ | Volume maximum de la courbe (m³/an) |
| $p_\text{max}$ | Prix au m³ en $v_\text{max}$ (€) |
| $R$ | Recettes cibles totales (€/an) |
| $\text{abo}_P, \text{abo}_S$ | Abonnements résidence principale / secondaire (€/an) |
Paramètres de forme (votés par les citoyens, 6 valeurs dans $[0,1]$)
| Param. | Rôle géométrique |
| $a$ | Hauteur du 2ᵉ point de contrôle du palier 1 (courbure initiale) |
| $b$ | Position horizontale du 3ᵉ point de contrôle du palier 1 |
| $c$ | Position horizontale du 1ᵉʳ point de contrôle du palier 2 |
| $d$ | Position horizontale du 2ᵉ point de contrôle du palier 2 |
| $e$ | Hauteur du 2ᵉ point de contrôle du palier 2 |
Variable calculée
$p_0$ — prix au m³ à l'inflexion — est toujours déduit de l'équilibre de recettes (§4).
2. Courbe Bézier cubique par paliers
La courbe prix/volume est définie de façon paramétrique : pour $t \in [0,1]$, on obtient un point $(v(t),\, p(t))$.
Palier 1 — $v \in [0,\, v_\text{inf}]$
$$v_1(t) = v_\text{inf}\,\bigl[(1-3b)\,t^3 + 3b\,t^2\bigr]$$
$$p_1(t) = p_0\,\bigl[(3a-2)\,t^3 + (3-6a)\,t^2 + 3a\,t\bigr]$$
Points de contrôle :
$P_1 = (0,\; 0)$
$P_2 = (0,\; a\,p_0)$
$P_3 = (b\,v_\text{inf},\; p_0)$
$P_4 = (v_\text{inf},\; p_0)$
Palier 2 — $v \in [v_\text{inf},\, v_\text{max}]$
Posons $w_\text{max} = v_\text{max} - v_\text{inf}$.
$$v_2(t) = v_\text{inf} + w_\text{max}\,\Bigl[\bigl(3(c+d-cd)-2\bigr)\,t^3 + 3(1-2c-d+cd)\,t^2 + 3c\,t\Bigr]$$
$$p_2(t) = p_0 + (p_\text{max}-p_0)\,\bigl[(1-3e)\,t^3 + 3e\,t^2\bigr]$$
Points de contrôle (partagent $P_4$ avec le palier 1) :
$P_4 = (v_\text{inf},\; p_0)$
$P_5 = (v_\text{inf}+c\,w_\text{max},\; p_0)$
$P_6 = \bigl(v_\text{inf}+w_\text{max}(1-d+cd),\; p_0+e(p_\text{max}-p_0)\bigr)$
$P_7 = (v_\text{max},\; p_\text{max})$
3. Facture d'un foyer
La facture annuelle d'un foyer de consommation $v$ est :
$$\text{Bill}(v) = \text{abo} + \int_0^v p(u)\,\mathrm{d}u$$
L'intégrale est calculée analytiquement par décomposition :
$$\int_0^v p(u)\,\mathrm{d}u = (\alpha_1 + \alpha_2)\,p_0 + \beta_2$$
où les trois coefficients dépendent uniquement de la forme de la courbe (paramètres $a$–$e$, $v_\text{inf}$, $v_\text{max}$, $p_\text{max}$) et de la consommation $v$, mais pas de $p_0$. Cela rend le calcul de $p_0$ linéaire.
Résolution cubique — inversion de la courbe
Pour évaluer les coefficients en un volume $v$ donné, on cherche $T$ tel que $v_i(T) = v$.
Palier 1 ($v \leq v_\text{inf}$) — résoudre en $T_1 \in [0,1]$ :
$$(1-3b)\,T_1^3 + 3b\,T_1^2 - \frac{v}{v_\text{inf}} = 0$$
Palier 2 ($v > v_\text{inf}$) — posons $w = v - v_\text{inf}$, résoudre en $T_2 \in [0,1]$ :
$$\bigl(3(c+d-cd)-2\bigr)\,T_2^3 + 3(1-2c-d+cd)\,T_2^2 + 3c\,T_2 - \frac{w}{w_\text{max}} = 0$$
Ces cubiques sont résolues par la formule de Cardano avec affinement Newton-Raphson.
Coefficient $\alpha_1$ — intégrale du palier 1
$$\alpha_1(T_1) = 3\,v_\text{inf}\left[
\frac{-9ab+3a+6b-2}{6}\,T_1^6
+\frac{24ab-6a-13b+3}{5}\,T_1^5
+\frac{3(-7ab+a+2b)}{4}\,T_1^4
+2ab\,T_1^3
\right]$$
Si $v \leq v_\text{inf}$ : on utilise le $T_1$ résolu ci-dessus. Si $v > v_\text{inf}$ : $\alpha_1 = \alpha_1(1)$ (palier 1 entier).
Coefficients $\alpha_2$ et $\beta_2$ — intégrale du palier 2
Posons l'auxiliaire :
$$u(T_2) =
\frac{-3cd+9ecd+3c-9ec+3d-9ed+6e-2}{6}\,T_2^6 \\[4pt]
+\frac{2cd-15ecd-4c+21ec-2d+15ed-12e+2}{5}\,T_2^5 \\[4pt]
+\frac{6ecd+c-15ec-6ed+6e}{4}\,T_2^4
+ec\,T_2^3$$
Alors :
$$\alpha_2 = (v - v_\text{inf}) - 3\,u(T_2)\,w_\text{max}$$
$$\beta_2 = 3\,p_\text{max}\,w_\text{max}\,u(T_2)$$
Si $v \leq v_\text{inf}$ : $\alpha_2 = \beta_2 = 0$.
4. Équilibre de recettes — calcul de $p_0$
En substituant la décomposition $(\alpha_1+\alpha_2)\,p_0+\beta_2$ dans la somme des factures :
$$R = \sum_{i} \text{abo}_i + \sum_{i}\bigl[(\alpha_{1,i}+\alpha_{2,i})\,p_0 + \beta_{2,i}\bigr]$$
Comme les $\alpha$ et $\beta$ ne dépendent pas de $p_0$, on obtient directement :
$$\boxed{p_0 = \frac{R - \displaystyle\sum_i \text{abo}_i - \displaystyle\sum_i \beta_{2,i}}{\displaystyle\sum_i (\alpha_{1,i} + \alpha_{2,i})}}$$
$p_0$ est calculé une fois par évaluation de la courbe. Si $\sum\alpha = 0$ (tous les foyers consomment 0), on pose $p_0 = 0$.
5. Résumé du pipeline de calcul
- Les citoyens placent des points de contrôle → paramètres $(a,b,c,d,e,v_\text{inf})$.
- Pour chaque foyer $i$, calculer $\alpha_{1,i}$, $\alpha_{2,i}$, $\beta_{2,i}$ par inversion cubique.
- Calculer $p_0$ par la formule d'équilibre.
- Facture de chaque foyer : $\text{Bill}_i = \text{abo}_i + (\alpha_{1,i}+\alpha_{2,i})\,p_0 + \beta_{2,i}$.
- Vérification : $\sum_i \text{Bill}_i = R$ (à précision numérique).
Sources : backend/app/engine/pricing.py · backend/app/engine/integrals.py · frontend/app/utils/bezier-math.ts