diff --git a/simulation.py b/simulation.py deleted file mode 100644 index 1741debc2017d58f09f24ade194745e2326c59f4..0000000000000000000000000000000000000000 --- a/simulation.py +++ /dev/null @@ -1,75 +0,0 @@ -import numpy as np -import random as rd -import matplotlib.pyplot as plt -from tmc import TransitionMatrixCalculator as tmc -from markovDecision import MarkovDecisionSolver as mD - -class Validation: - def __init__(self): - self.tmc_instance = tmc() - - def simulate_games(self, layout, circle, num_games): - results = [] - - for _ in range(num_games): - result = mD(layout, circle) - # Assuming result is a tuple (costs, path) and you want the last element of 'costs' - results.append(result[0][-1]) # Append the number of turns to reach the goal - - return results - - def compare_strategies(self, layout, circle, num_games): - optimal_results = self.simulate_games(layout, circle, num_games) - - suboptimal_strategies = { - "Dice 1 Only": self.simulate_games(layout, circle, num_games), # Replace with Dice 1 simulation - "Dice 2 Only": self.simulate_games(layout, circle, num_games), # Replace with Dice 2 simulation - "Dice 3 Only": self.simulate_games(layout, circle, num_games), # Replace with Dice 3 simulation - "Mixed Random Strategy": self.simulate_games(layout, circle, num_games), # Replace with mixed random strategy simulation - "Purely Random Choice": self.simulate_games(layout, circle, num_games) # Replace with purely random choice simulation - } - - self.plot_results(optimal_results, suboptimal_strategies) - - def plot_results(self, optimal_results, suboptimal_results): - strategies = ["Optimal Strategy"] + list(suboptimal_results.keys()) - avg_costs = [np.mean(optimal_results)] + [np.mean(suboptimal_results[strategy]) for strategy in suboptimal_results] - - plt.figure(figsize=(10, 6)) - plt.bar(strategies, avg_costs, color=['blue'] + ['orange'] * len(suboptimal_results)) - plt.xlabel("Strategies") - plt.ylabel("Average Cost") - plt.title("Comparison of Strategy Performance") - plt.show() - - def run_validation(self, layout, circle, num_games): - solver = mD(layout, circle) - theoretical_cost, optimal_dice_strategy = solver.solve() - - optimal_results = self.simulate_games(layout, circle, num_games) - optimal_average_cost = np.mean(optimal_results) - - suboptimal_strategies = { - "Dice 1 Only": self.simulate_games(layout, circle, num_games), # Replace with Dice 1 simulation - "Dice 2 Only": self.simulate_games(layout, circle, num_games), # Replace with Dice 2 simulation - "Dice 3 Only": self.simulate_games(layout, circle, num_games), # Replace with Dice 3 simulation - "Mixed Random Strategy": self.simulate_games(layout, circle, num_games), # Replace with mixed random strategy simulation - "Purely Random Choice": self.simulate_games(layout, circle, num_games) # Replace with purely random choice simulation - } - - self.plot_results(optimal_results, suboptimal_strategies) - - print("Theoretical Expected Cost (Value Iteration):", theoretical_cost) - print("Empirical Average Cost (Optimal Strategy):", optimal_average_cost) - - for strategy, results in suboptimal_strategies.items(): - avg_cost = np.mean(results) - print(f"Empirical Average Cost ({strategy}):", avg_cost) - -# Exemple d'utilisation de la classe Validation -layout = [0, 0, 3, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 1, 0] -circle = True -num_games = 1000 - -validation = Validation() -validation.run_validation(layout, circle, num_games) diff --git a/tmc.py b/tmc.py index 5941ed4fb1f1b0277693114af3bf1df1079a5c81..085fe462113a869528fec8eada34114390d0bb13 100644 --- a/tmc.py +++ b/tmc.py @@ -25,7 +25,7 @@ class TransitionMatrixCalculator: def _compute_safe_matrix(self): - for k in range(0,15): + for k in range(15): for s, p in enumerate(self.safe_dice): if k == 9 and s == 1: k_prime = 14 @@ -44,7 +44,7 @@ class TransitionMatrixCalculator: return self.matrix_safe def _compute_normal_matrix(self, layout, circle): - for k in range(0, 15): + for k in range(15): for s, p in enumerate(self.normal_dice): if k == 8 and s == 2: k_prime = 14 @@ -116,7 +116,7 @@ class TransitionMatrixCalculator: return self.matrix_normal def _compute_risky_matrix(self, layout, circle): - for k in range(0, 15): + for k in range(15): for s, p in enumerate(self.risky_dice): if k == 7 and s == 3: k_prime = 14