Skip to content
Extraits de code Groupes Projets
Validation_2.py 3,46 ko
Newer Older
  • Learn to ignore specific revisions
  • Adrien Payen's avatar
    Adrien Payen a validé
    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)