#!/usr/bin/env python3 """Figure ch08 — sensibilité des effets de valeur du zonage (DONNÉES SYNTHÉTIQUES / hypothèses déclarées) : (a) prime espérée d'un rezonage probable selon la probabilité p et le délai T (grille, en milliers de $) ; (b) valeur du surplus de revenu protégé par droits acquis V_Δ = ΔRNE/(R+λ) selon le taux de risque λ, pour trois R. Sortie : assets/figures/ch08/ch08-fig-option-sensibilite.pdf""" import sys, pathlib ROOT = pathlib.Path(__file__).resolve().parents[3] sys.path.insert(0, str(ROOT / "analysis/python")); sys.path.insert(0, str(ROOT / "analysis/python/cases")) import numpy as np, matplotlib.pyplot as plt from traite.style import setup, palette, savefig, LARGEUR import ch08_zonage as cas def main(): setup() res = cas.exemple_complet() E = cas.EXEMPLE probs = np.array([0.10, 0.25, 0.40, 0.50, 0.60, 0.75, 0.90, 1.00]); delais = np.array([0.5, 1.0, 1.5, 2.0, 3.0, 4.0]) G = cas.grille_attendue(E["lot"]["v_actuel"], res["redev"]["valeur_residuelle"], probs, delais, E["option"]["r"]) / 1000 fig, (a, b) = plt.subplots(1, 2, figsize=(LARGEUR, 3.2), gridspec_kw={"width_ratios": [1.15, 1]}) im = a.imshow(G, cmap=palette.cmap_seq(), aspect="auto", origin="lower") a.set_xticks(range(len(delais))); a.set_xticklabels([f"{t:g}" for t in delais]); a.set_yticks(range(len(probs))); a.set_yticklabels([f"{p*100:.0f} %" for p in probs]) a.set_xlabel("Délai T avant l'autorisation (années)"); a.set_ylabel("Probabilité p d'obtenir le changement"); a.grid(False) for i in range(len(probs)): for j in range(len(delais)): a.text(j, i, f"{G[i, j]:.0f}", ha="center", va="center", fontsize=7, color="white" if G[i, j] > G.mean() else palette.ink) a.set_title("(a) prime espérée du rezonage (k$)", loc="left") lam = np.linspace(0, 0.08, 81); dn = res["delta_noi"] for k, R in enumerate([0.045, 0.055, 0.070]): b.plot(lam * 100, [cas.valeur_surplus_derogatoire(dn, R, l) / 1000 for l in lam], color=palette.cat[k], label=f"R = {R*100:.1f} %") b.plot(lam * 100, [cas.valeur_surplus_horizon(dn, 0.055, l, E["droits_acquis"]["horizon"]) / 1000 for l in lam], color=palette.cat[1], linestyle="--", label="R = 5,5 %, horizon 25 ans") b.set_xlabel("Taux de risque d'extinction λ (% par an)"); b.set_ylabel("V_Δ (milliers de $)") b.set_title("(b) surplus dérogatoire : ΔRNE = 3 300 $", loc="left"); b.legend(fontsize=7, loc="upper right") fig.tight_layout() savefig(fig, "ch08/ch08-fig-option-sensibilite.pdf") if __name__ == "__main__": main()