AlgoRep/code/config.py
paul.roost ab902bad5f SimPy implementation with 3000 rounds - complete refactor
- Migrate from simple loop to SimPy discrete event simulator
- Implement node_mobility_process() as parallel SimPy processes
- LEACH: distributed CH election with probability p
- LEACH-C: centralized BS-optimized CH selection
- 6 test scenarios with comprehensive results
- 3000 rounds per scenario for long-term viability testing
- All metrics calculated: FDN, FMR, DLBI, RSPI
- 5 PNG graphs generated with analysis
- Full rapport updated with 3000-round results
- Code cleaned: no .log or .md files, no __pycache__
2025-11-03 11:09:08 +01:00

75 lines
2.2 KiB
Python

"""
Configuration et Constantes pour la Simulation LEACH/LEACH-C
"""
# ============= PARAMÈTRES DE SIMULATION =============
# Dimensions du champ
FIELD_WIDTH = 100 # mètres
FIELD_HEIGHT = 100 # mètres
# Position de la station de base
BS_POSITION = (0, -100)
# Nombre de nœuds (par scénario)
NUM_NODES_DEFAULT = 100
# Énergie initiale par nœud
INITIAL_ENERGY = 0.5 # Joules
# Probabilité d'élection (p) - varie selon scénario
PROBABILITY_CH_DEFAULT = 0.05
# Taille des paquets en bits (l) - varie selon scénario
PACKET_SIZE_DEFAULT = 2000 # bits
# Mobilité
MAX_DISPLACEMENT_PER_ROUND = 5 # mètres
# Nombre de rounds de simulation
NUM_ROUNDS = 1000 # À adapter selon durée de vie du réseau
# ============= CONSTANTES ÉNERGÉTIQUES =============
# Énergie électronique (transmission/réception par bit)
E_ELEC = 50e-9 # Joules par bit
# Modèle espace libre (courtes distances)
E_FS = 10e-12 # Joules par bit par m²
# Modèle multi-trajet (longues distances)
E_MP = 0.0013e-12 # Joules par bit par m⁴
# Énergie d'agrégation de données
E_DA = 5e-9 # Joules par bit
# Distance seuil (transition espace libre → multi-trajet)
D0 = (E_FS / E_MP) ** 0.5
# ============= SCÉNARIOS DE TEST =============
SCENARIOS = [
{"l": 2000, "p": 0.05, "n": 100, "name": "Scenario_1_Small_Low"},
{"l": 2000, "p": 0.5, "n": 100, "name": "Scenario_2_Small_Medium"},
{"l": 2000, "p": 0.95, "n": 100, "name": "Scenario_3_Small_High"},
{"l": 4000, "p": 0.05, "n": 100, "name": "Scenario_4_Large_Low"},
{"l": 4000, "p": 0.05, "n": 200, "name": "Scenario_5_Large_Low_200nodes"},
{"l": 4000, "p": 0.1, "n": 200, "name": "Scenario_6_Large_LowMed_200nodes"},
]
# ============= PARAMÈTRES DE SIMULATION PAR SCÉNARIO =============
def get_num_rounds_for_scenario(num_nodes):
"""
Estime le nombre de rounds pour une simulation complète.
Plus de nœuds = plus d'énergie disponible = plus de rounds.
Avec SimPy, visant ~3000 rounds par scénario.
"""
return 3000 + (num_nodes - 100) * 10 # Augmenté pour plus de données
# ============= FLAGS DE DEBUG/LOGGING =============
DEBUG = False
LOG_LEVEL = "INFO" # DEBUG, INFO, WARNING, ERROR