Skip to content
Extraits de code Groupes Projets
plot.py 2,84 ko
Newer Older
  • Learn to ignore specific revisions
  • Adrien Payen's avatar
    Adrien Payen a validé
    import matplotlib.pyplot as plt
    from validation import validation
    import numpy as np
    
    # Example layout and circle settings
    layout = [0, 0, 3, 0, 2, 0, 2, 0, 0, 0, 3, 0, 0, 1, 0]
    circle = False
    
    # Create an instance of validation
    validation_instance = validation(layout, circle)
    
    
    # Plotting function for strategy comparison
    def plot_strategy_comparison(num_games=1000):
        strategy_costs = validation_instance.compare_strategies(num_games=num_games)
    
        # Bar plot for strategy comparison
        plt.figure(figsize=(10, 6))
        plt.bar(strategy_costs.keys(), strategy_costs.values(), color=['blue', 'green', 'orange', 'red', 'purple'])
        plt.xlabel('Strategies')
        plt.ylabel('Average Cost')
        plt.title('Comparison of Strategies')
        plt.savefig('strategy_comparison.png')  # Save the plot
        plt.show()
    
    # Plotting function for state-based average turns for all strategies on the same plot
    def plot_state_based_turns(save=True):
        strategies = [validation_instance.optimal_strategy,
                      validation_instance.safe_strategy,
                      validation_instance.normal_strategy,
                      validation_instance.risky_strategy,
                      validation_instance.random_strategy]
        strategy_names = ['Optimal', 'SafeDice', 'NormalDice', 'RiskyDice', 'Random']
        
        plt.figure(figsize=(12, 6))
        for strategy, name in zip(strategies, strategy_names):
            mean_turns = validation_instance.simulate_state(strategy, layout, circle)
            plt.plot(range(len(mean_turns)), mean_turns, marker='o', linestyle='-', label=name)
    
        plt.xlabel('State')
        plt.ylabel('Average Turns')
        plt.title('Average Turns per State for Different Strategies')
        plt.grid(True)
        plt.legend()
    
        #if save:
             #plt.savefig('state_based_turns_all_strategies.png')  # Save the plot
    
        plt.show()
    
    def plot_state_based_comparison(validation_instance, num_games=1000):
        optimal_turns, empirical_turns = validation_instance.compare_state_based_turns(num_games=num_games)
    
        # Plotting the state-based average turns comparison
        plt.figure(figsize=(12, 6))
    
        # Plot optimal strategy turns
        plt.plot(range(len(optimal_turns)), optimal_turns, marker='o', linestyle='-', label='ValueIteration')
    
        # Plot empirical strategy turns
        plt.plot(range(len(empirical_turns)), empirical_turns, marker='x', linestyle='-', label='Empirical')
    
        plt.xlabel('State')
        plt.ylabel('Average Turns')
        plt.title('Average Turns per State - ValueIteration vs. Empirical')
        plt.grid(True)
        plt.legend()
    
        plt.show()
    
    
    
    
    # Main function to generate and save plots
    if __name__ == '__main__':
        # Example of strategy comparison plot
        plot_strategy_comparison(num_games=1000)
    
        # Example of state-based average turns plot for all strategies on the same plot
        plot_state_based_turns(save=True)
    
        plot_state_based_comparison(validation_instance, num_games=1000)