AI_Simhastha / scripts /generate_training_data.py
ayush200399391001's picture
Deploying Full Simhastha Crowd Intelligence System
6887bb9
Raw
History Blame Contribute Delete
2.73 kB
import sys
import os
import random
import csv
from pathlib import Path
# Add project root to path
sys.path.append(str(Path(__file__).resolve().parent.parent))
from config.settings import EVENT_FACTORS, WEATHER_FACTORS
from ingestion.dummy_cctv import DummyCCTVProvider
from ingestion.dummy_gate import DummyGateProvider
from ingestion.dummy_gps import DummyGPSProvider
from ingestion.dummy_qr import DummyQRProvider
from ingestion.dummy_volunteer import DummyVolunteerProvider
from ingestion.dummy_weather import DummyWeatherProvider
from fusion.engine import FusionEngine
def generate_data(
num_ticks: int = 15000, output_file: str = "training_data.csv"
):
providers = [
DummyGateProvider(seed=42),
DummyCCTVProvider(seed=42),
DummyQRProvider(seed=42),
DummyGPSProvider(seed=42),
DummyVolunteerProvider(seed=42),
DummyWeatherProvider(),
]
fusion_engine = FusionEngine()
scenarios = list(EVENT_FACTORS.keys())
weathers = list(WEATHER_FACTORS.keys())
current_scenario = "normal_day"
current_weather = "clear"
output_path = Path(output_file)
with open(output_path, "w", newline="") as f:
writer = csv.writer(f)
writer.writerow(
["tick", "node_id", "scenario", "weather", "fused_occupancy"]
)
for tick in range(num_ticks):
if tick % 1000 == 0:
print(f"Generating tick {tick}/{num_ticks}...")
if random.random() < 0.005:
current_scenario = random.choice(scenarios)
if random.random() < 0.01:
current_weather = random.choice(weathers)
all_signals = []
for provider in providers:
try:
signals = provider.emit(
scenario=current_scenario, weather=current_weather
)
all_signals.extend(signals)
except Exception as e:
print(f"Provider error: {e}")
fused_states = fusion_engine.fuse(
all_signals,
current_scenario,
current_weather,
approved_closures=set(),
)
for node_id, state in fused_states.items():
writer.writerow(
[
tick,
node_id,
current_scenario,
current_weather,
round(state.fused_occupancy, 2),
]
)
print(
f"Successfully generated {num_ticks} ticks of data into {output_file}"
)
if __name__ == "__main__":
generate_data()