Skip to content
Extraits de code Groupes Projets
Valider 9f373841 rédigé par Adrien Payen's avatar Adrien Payen
Parcourir les fichiers

commit Adrien

parent c682c832
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
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)
...@@ -25,7 +25,7 @@ class TransitionMatrixCalculator: ...@@ -25,7 +25,7 @@ class TransitionMatrixCalculator:
def _compute_safe_matrix(self): def _compute_safe_matrix(self):
for k in range(0,15): for k in range(15):
for s, p in enumerate(self.safe_dice): for s, p in enumerate(self.safe_dice):
if k == 9 and s == 1: if k == 9 and s == 1:
k_prime = 14 k_prime = 14
...@@ -44,7 +44,7 @@ class TransitionMatrixCalculator: ...@@ -44,7 +44,7 @@ class TransitionMatrixCalculator:
return self.matrix_safe return self.matrix_safe
def _compute_normal_matrix(self, layout, circle): 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): for s, p in enumerate(self.normal_dice):
if k == 8 and s == 2: if k == 8 and s == 2:
k_prime = 14 k_prime = 14
...@@ -116,7 +116,7 @@ class TransitionMatrixCalculator: ...@@ -116,7 +116,7 @@ class TransitionMatrixCalculator:
return self.matrix_normal return self.matrix_normal
def _compute_risky_matrix(self, layout, circle): 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): for s, p in enumerate(self.risky_dice):
if k == 7 and s == 3: if k == 7 and s == 3:
k_prime = 14 k_prime = 14
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter