""" Test all 5 predefined scenarios from the project requirements. """ from src.core.simulation import Simulator from src.core.scenarios import ( get_scenario_1, get_scenario_2, get_scenario_3, get_scenario_4, get_scenario_5_variations ) def print_separator(char="=", length=80): """Print a separator line.""" print(char * length) def print_results(scenario_name: str, results, config): """Print simulation results in a formatted way.""" print(f"\n{scenario_name}") print_separator("-") print(f"\nšŸ“Š Configuration:") print(f" Ī» = {config.arrival_rate:.6f} req/ms") print(f" μc = {config.coordinator_service_rate:.6f} req/ms") print(f" p = {config.coordinator_exit_probability:.3f}") print(f" Servers: {len(config.server_service_rates)}") for i, (mu, q) in enumerate(zip(config.server_service_rates, config.server_routing_probs)): print(f" Server {i+1}: μ={mu:.6f}, q={q:.3f}") # Theoretical utilizations lambda_ext = config.arrival_rate rho_c = lambda_ext / config.coordinator_service_rate print(f"\nšŸ“ Theoretical Utilizations:") print(f" ρc = {rho_c:.4f}") for i, (mu, q) in enumerate(zip(config.server_service_rates, config.server_routing_probs)): lambda_i = lambda_ext * q rho_i = lambda_i / mu status = "āœ… STABLE" if rho_i < 1 else "āŒ UNSTABLE" print(f" ρ{i+1} = {rho_i:.4f} {status}") # Simulation results print(f"\nšŸ“ˆ Simulation Results:") print(f" Requests completed: {results.total_requests_completed}") print(f" Average system time: {results.average_system_time:.2f} ms") print(f"\n Coordinator:") coord = results.coordinator_stats print(f" Utilization: {coord['utilization']:.4f}") print(f" Avg wait: {coord['average_wait_time']:.2f} ms") print(f" Avg service: {coord['average_service_time']:.2f} ms") for server_id, stats in results.server_stats.items(): print(f"\n {server_id}:") print(f" Utilization: {stats['utilization']:.4f}") print(f" Avg wait: {stats['average_wait_time']:.2f} ms") print(f" Avg service: {stats['average_service_time']:.2f} ms") print(f" Requests processed: {stats['total_departures']}") def main(): print_separator() print("QUEUEING NETWORK SIMULATION - ALL SCENARIOS TEST") print_separator() # Scenario 1 print("\n\nšŸ”“ SCENARIO 1: Single Fast Server (Instability Test)") print_separator() config1 = get_scenario_1() sim1 = Simulator(config1) results1 = sim1.run() print_results("Scenario 1 Results", results1, config1) # Scenario 2 print("\n\n🟔 SCENARIO 2: Fast + Slow Server") print_separator() config2 = get_scenario_2() sim2 = Simulator(config2) results2 = sim2.run() print_results("Scenario 2 Results", results2, config2) # Scenario 3 print("\n\n🟢 SCENARIO 3: Three Slow Servers") print_separator() config3 = get_scenario_3() sim3 = Simulator(config3) results3 = sim3.run() print_results("Scenario 3 Results", results3, config3) # Scenario 4 print("\n\nšŸ”µ SCENARIO 4: Fast + Medium Server") print_separator() config4 = get_scenario_4() sim4 = Simulator(config4) results4 = sim4.run() print_results("Scenario 4 Results", results4, config4) # Scenario 5 - Parameter variations print("\n\n🟣 SCENARIO 5: Parameter Sensitivity Analysis") print_separator() variations = get_scenario_5_variations() for desc, config5 in variations: print(f"\n\n Variation: {desc}") print(" " + "-" * 76) sim5 = Simulator(config5) results5 = sim5.run() print_results(f" {desc}", results5, config5) # Summary comparison print("\n\n" + "=" * 80) print("SUMMARY COMPARISON (Scenarios 1-4)") print("=" * 80) scenarios_data = [ ("Scenario 1", results1, config1), ("Scenario 2", results2, config2), ("Scenario 3", results3, config3), ("Scenario 4", results4, config4), ] print(f"\n{'Scenario':<15} {'Servers':<10} {'Avg Time (ms)':<15} {'Completed':<12} {'Coord ρ':<10} {'Max Server ρ':<15}") print("-" * 80) for name, results, config in scenarios_data: num_servers = len(config.server_service_rates) avg_time = results.average_system_time completed = results.total_requests_completed coord_util = results.coordinator_stats['utilization'] max_server_util = max(s['utilization'] for s in results.server_stats.values()) print(f"{name:<15} {num_servers:<10} {avg_time:<15.2f} {completed:<12} {coord_util:<10.4f} {max_server_util:<15.4f}") print("\n" + "=" * 80) print("āœ… All scenarios completed successfully!") print("=" * 80) if __name__ == "__main__": main()