| import streamlit as st |
| import numpy as np |
| import matplotlib.pyplot as plt |
| import pandas as pd |
| from scipy import linalg |
| import plotly.graph_objects as go |
| from plotly.subplots import make_subplots |
| import time |
|
|
| def show_introduction(): |
| """Affiche l'introduction aux concepts de jumeaux numériques""" |
| |
| st.header("📚 Introduction aux Jumeaux Numériques") |
| |
| col1, col2 = st.columns([2, 1]) |
| |
| with col1: |
| st.markdown(""" |
| ### Définition et concepts clés |
| |
| Un **jumeau numérique** est une réplique virtuelle d'un système physique qui : |
| |
| 1. **Intègre des modèles physiques** de différentes fidélités |
| 2. **Assimile des données** issues de capteurs en temps réel |
| 3. **Permet le pilotage** du système physique |
| 4. **Évolue avec le système** tout au long de son cycle de vie |
| |
| ### Composants essentiels |
| |
| - **Modèles de connaissance** : équations de la mécanique |
| - **Capteurs et données** : mesures réelles du système |
| - **Algorithmes d'estimation** : Filtre de Kalman |
| - **Algorithmes de contrôle** : PID, contrôle optimal |
| - **Interfaces** : visualisation, interaction |
| """) |
| |
| with col2: |
| st.image("https://via.placeholder.com/400x300/4A90E2/FFFFFF?text=Digital+Twin+Architecture", |
| caption="Architecture d'un jumeau numérique") |
| |
| |
| st.subheader("🔄 Démonstration interactive") |
| |
| col1, col2, col3 = st.columns(3) |
| |
| with col1: |
| model_fidelity = st.slider("Fidélité du modèle", 0.1, 1.0, 0.7, 0.1, |
| help="Compromis précision/coût calcul") |
| |
| with col2: |
| sensor_noise = st.slider("Bruit des capteurs", 0.0, 0.5, 0.1, 0.05, |
| help="Niveau de bruit de mesure") |
| |
| with col3: |
| control_gain = st.slider("Gain de contrôle", 0.1, 2.0, 1.0, 0.1, |
| help="Agressivité du contrôleur") |
| |
| |
| fig = go.Figure() |
| |
| |
| t = np.linspace(0, 10, 100) |
| system_response = np.sin(t) + np.random.normal(0, sensor_noise, len(t)) |
| |
| |
| model_response = model_fidelity * np.sin(t) + 0.1 |
| |
| fig.add_trace(go.Scatter(x=t, y=system_response, |
| mode='lines', name='Système réel', |
| line=dict(color='blue', dash='dash'))) |
| |
| fig.add_trace(go.Scatter(x=t, y=model_response, |
| mode='lines', name='Jumeau numérique', |
| line=dict(color='red'))) |
| |
| fig.update_layout(title="Comparaison système réel / jumeau numérique", |
| xaxis_title="Temps (s)", |
| yaxis_title="Réponse du système", |
| height=400) |
| |
| st.plotly_chart(fig, use_container_width=True) |