grame / src /introduction /__init__.py
tiffank1802
Replace local image references with placeholders for deployment
f08f17f
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")
# Démonstration interactive simple
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")
# Visualisation simple
fig = go.Figure()
# Système réel (simulé)
t = np.linspace(0, 10, 100)
system_response = np.sin(t) + np.random.normal(0, sensor_noise, len(t))
# Modèle du jumeau numérique
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)