{ "cells": [ { "cell_type": "code", "execution_count": null, "id": "c6991ab8", "metadata": {}, "outputs": [], "source": [ "# Préparation commune des TP Python\n", "# Le notebook utilise uniquement les ressources fournies dans le dossier codes/.\n", "from pathlib import Path\n", "import importlib.util\n", "import subprocess\n", "import sys\n", "\n", "REQUIRED_PACKAGES = {'numpy': 'numpy', 'pandas': 'pandas', 'matplotlib': 'matplotlib'}\n", "missing = [package for module, package in REQUIRED_PACKAGES.items()\n", " if importlib.util.find_spec(module) is None]\n", "if missing:\n", " print(\"Installation des paquets manquants :\", \", \".join(missing))\n", " subprocess.check_call([sys.executable, \"-m\", \"pip\", \"install\", *missing])\n", "\n", "WORKDIR = Path.cwd().resolve()\n", "CODES_DIR = WORKDIR.parent if WORKDIR.name == \"correction\" else WORKDIR\n", "TOOLBOX_DIR = CODES_DIR / \"toolbox\"\n", "DATA_DIR = CODES_DIR / \"data\"\n", "if not CODES_DIR.is_dir():\n", " raise FileNotFoundError(\"Exécutez le notebook depuis le dossier codes/.\" )\n", "if TOOLBOX_DIR.is_dir():\n", " sys.path.insert(0, str(TOOLBOX_DIR))\n", "\n", "DICE_FILE = TOOLBOX_DIR / \"DICE.py\"\n", "if not DICE_FILE.is_file():\n", " raise FileNotFoundError(\n", " f\"Module du cours introuvable : {DICE_FILE}. \"\n", " \"Téléchargez le dossier codes complet, avec toolbox/.\"\n", " )\n", "\n", "print(\"Environnement prêt :\", CODES_DIR)\n" ] }, { "cell_type": "markdown", "id": "3891191a", "metadata": {}, "source": [ "# TP2 — Modèle climatique simplifié et sensibilité\n", "\n", "**Date de la séance :** mercredi 2 septembre 2026, 10:45–12:45\n", "\n", "**Objectifs**\n", "- Prendre en main le modèle climat-économie DICE\n", "- Simuler une trajectoire de référence 2015-2100\n", "- Étudier l'effet de la sensibilité climatique (T2XCO2) sur la température\n", "- Comprendre l'inertie du système climatique\n", "\n", "**Prérequis** : TP1, notions de base sur les modèles climatiques simplifiés (bloc carbone / bloc température)." ] }, { "cell_type": "code", "execution_count": null, "id": "7859268b", "metadata": {}, "outputs": [], "source": [ "import numpy as np, pandas as pd, matplotlib.pyplot as plt\n", "import DICE" ] }, { "cell_type": "markdown", "id": "a9d28fa6", "metadata": {}, "source": [ "## Partie 1 — Prise en main du modèle DICE" ] }, { "cell_type": "markdown", "id": "199c1788", "metadata": {}, "source": [ "**Question 1.** Importez DICE, créez les paramètres par défaut et lancez une simulation de référence.\n", "\n", "*Note technique* : `DICE.update_path` s'utilise avec la signature `update_path(sim, timevec, p)`, où `timevec` est la liste des indices de temps à simuler (typiquement `range(1, p.nT)`, car l'indice 0 correspond à l'état initial 2015)." ] }, { "cell_type": "code", "execution_count": null, "id": "5fb8f6a9", "metadata": {}, "outputs": [], "source": [ "p = DICE.Params()\n", "path = DICE.init_states(p)\n", "timevec = range(1, p.nT)\n", "path = DICE.update_path(path, timevec, p)\n", "print(f\"Simulation de {p.t0} à {p.tT} — {p.nT} périodes de {p.Delta} ans\")" ] }, { "cell_type": "markdown", "id": "0a449ff1", "metadata": {}, "source": [ "**Question 2.** Tracez les trajectoires de T_AT (température), E (émissions), M_AT (CO2 atmosphérique) de 2015 à 2100." ] }, { "cell_type": "code", "execution_count": null, "id": "6c6b52af", "metadata": {}, "outputs": [], "source": [ "# YOUR CODE HERE" ] }, { "cell_type": "markdown", "id": "624056a6", "metadata": {}, "source": [ "## Partie 2 — Sensibilité climatique" ] }, { "cell_type": "markdown", "id": "ef027602", "metadata": {}, "source": [ "**Question 3.** La sensibilité climatique T2XCO2 mesure le réchauffement à l'équilibre pour un doublement du CO2. Simulez le modèle avec T2XCO2 = 1.5, 3.1 (référence), 4.5. Tracez les trajectoires de T_AT pour les trois cas." ] }, { "cell_type": "code", "execution_count": null, "id": "dc0b9ad4", "metadata": {}, "outputs": [], "source": [ "sensitivities = [1.5, 3.1, 4.5]\n", "labels = ['T2XCO2 = 1.5°C (faible)', 'T2XCO2 = 3.1°C (référence)', 'T2XCO2 = 4.5°C (élevée)']\n", "paths = []\n", "for T2X in sensitivities:\n", " p_s = DICE.Params(T2XCO2=T2X)\n", " path_s = DICE.init_states(p_s)\n", " timevec_s = range(1, p_s.nT)\n", " path_s = DICE.update_path(path_s, timevec_s, p_s)\n", " paths.append(path_s)" ] }, { "cell_type": "code", "execution_count": null, "id": "ccbd17c5", "metadata": {}, "outputs": [], "source": [ "# YOUR CODE HERE: tracez les trajectoires T_AT pour les trois cas" ] }, { "cell_type": "markdown", "id": "bc8cc040", "metadata": {}, "source": [ "**Question 4.** Calculez l'écart de température en 2100 entre le cas le plus favorable et le plus défavorable. Que représente cet écart pour la gestion des risques ?" ] }, { "cell_type": "code", "execution_count": null, "id": "15406a0d", "metadata": {}, "outputs": [], "source": [ "# YOUR CODE HERE" ] }, { "cell_type": "markdown", "id": "f1e8762a", "metadata": {}, "source": [ "## Partie 3 — Inertie climatique" ] }, { "cell_type": "markdown", "id": "8fade537", "metadata": {}, "source": [ "**Question 5.** Simulez un scénario où les émissions tombent à 0 en 2030 (mu=1 à partir de 2030). La température continue-t-elle de monter ? Pourquoi ?" ] }, { "cell_type": "code", "execution_count": null, "id": "33e1c57e", "metadata": {}, "outputs": [], "source": [ "# YOUR CODE HERE" ] }, { "cell_type": "markdown", "id": "7f45d529", "metadata": {}, "source": [ "## Interprétation\n", "\n", "Répondez en quelques phrases :\n", "1. Quelle est la température atmosphérique prévue en 2100 dans le scénario de référence ?\n", "2. Pourquoi la sensibilité climatique est-elle une source d'incertitude majeure ?\n", "3. Qu'est-ce que l'inertie climatique et quelles sont ses implications pour les risques à long terme ?\n", "4. Dans quel sens cette incertitude affecte-t-elle la tarification d'un produit d'assurance catastrophe ?" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "name": "python", "version": "3.10" } }, "nbformat": 4, "nbformat_minor": 5 }