Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
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)