File size: 3,140 Bytes
774e2a4 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 | 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_simulator():
"""Simulateur principal intégré"""
st.header("🧪 Simulateur intégré - Jumeau Numérique Complet")
# Configuration du système
st.markdown("### 1. Configuration du système physique")
system_config = st.selectbox("Système à simuler",
["Masse-ressort 1D", "Poutre en flexion",
"Système 2DDL", "Système personnalisé"])
# Paramètres communs
col1, col2, col3 = st.columns(3)
with col1:
st.markdown("**Physique**")
simulate_physics = st.checkbox("Simuler la physique", True)
fidelity = st.slider("Fidélité du modèle", 1, 3, 2,
help="1: Basse fidélité, 2: Moyenne, 3: Haute")
with col2:
st.markdown("**Capteurs**")
sensor_count = st.slider("Nombre de capteurs", 1, 10, 2)
sensor_noise_level = st.slider("Bruit des capteurs", 0.0, 0.2, 0.05, 0.01)
with col3:
st.markdown("**Contrôle**")
control_enabled = st.checkbox("Activer le contrôle", True)
control_type = st.selectbox("Algorithme de contrôle",
["PID", "LQR", "MPC", "Adaptatif"])
# Configuration du jumeau numérique
st.markdown("### 2. Configuration du jumeau numérique")
twin_config = st.columns(4)
with twin_config[0]:
use_kalman = st.checkbox("Filtre de Kalman", True)
kalman_type = st.selectbox("Type", ["Standard", "Étendu", "Unscented"])
with twin_config[1]:
use_model_update = st.checkbox("Mise à jour modèle", False)
update_frequency = st.slider("Fréquence MAJ", 1, 100, 10)
with twin_config[2]:
use_data_assimilation = st.checkbox("Assimilation de données", True)
assimilation_method = st.selectbox("Méthode", ["Kalman", "Particle", "Ensemble"])
with twin_config[3]:
real_time_simulation = st.checkbox("Simulation temps réel", False)
visualization_level = st.selectbox("Niveau de visualisation", ["Basique", "Détaillé", "Expert"])
# Bouton de lancement
if st.button("🚀 Lancer le jumeau numérique", type="primary"):
st.info("Simulation du jumeau numérique en cours...")
# Simulation placeholder
progress_bar = st.progress(0)
for i in range(100):
time.sleep(0.01)
progress_bar.progress(i + 1)
st.success("Simulation terminée !")
st.balloons()
# Résultats fictifs
col1, col2, col3 = st.columns(3)
with col1:
st.metric("Précision du modèle", "95.2%", "↗️ +2.1%")
with col2:
st.metric("Performance contrôle", "87.8%", "↗️ +5.3%")
with col3:
st.metric("Qualité estimation", "92.1%", "↗️ +1.8%") |