181 lines
6.5 KiB
Python
181 lines
6.5 KiB
Python
|
|
|||
|
import random
|
|||
|
import numpy as np
|
|||
|
import matplotlib as mpl
|
|||
|
from matplotlib import pyplot
|
|||
|
|
|||
|
|
|||
|
|
|||
|
# état = 0 : le joueur est COOP
|
|||
|
# état = 1 : le joueur est TRAITRE
|
|||
|
|
|||
|
|
|||
|
TailleGrilleX = 15
|
|||
|
TailleGrilleY = 15
|
|||
|
GrilleInitiale = 0
|
|||
|
HistoriqueGrilles = list()
|
|||
|
StratsResultats = list()
|
|||
|
ListeStrategies = list()
|
|||
|
|
|||
|
# Je pense que je vais avoir un gros problème de typage !!!
|
|||
|
# En effet, j'initialise des matrices avec des entiers pour ensuite remplacer les
|
|||
|
# entiers par des dictionnaires, peu de chances que ça passe
|
|||
|
|
|||
|
# Je dois penser, si variable globale ListeStrategies il y a bien, à retirer tous les
|
|||
|
# list_strat des paramètres et les remplancer par ListeStrategies dans le corps
|
|||
|
# des fonctions
|
|||
|
|
|||
|
|
|||
|
def init_matrice_meme_strat(strat):
|
|||
|
"""
|
|||
|
int*int*int -> array
|
|||
|
Crée la matrice des joueurs où chacun a la même stratégie
|
|||
|
mais commence avec des statuts différents, générés aléatoirement
|
|||
|
"""
|
|||
|
|
|||
|
histo_strat = [strat]
|
|||
|
matrice = np.zeros((TailleGrilleX, TailleGrilleY))
|
|||
|
|
|||
|
|
|||
|
for i in range(TailleGrilleY):
|
|||
|
for j in range(TailleGrilleX):
|
|||
|
etat = random.randint(0, 2)
|
|||
|
matrice[i][j] = dict('etat' : etat, 'strategie' : strat, 'annees_de_prison' : 0,\
|
|||
|
'historique_strategies' : histo_strat, 'historique_etats' : [etat])
|
|||
|
|
|||
|
return matrice
|
|||
|
|
|||
|
|
|||
|
def matrice_init_liars(strat):
|
|||
|
"""
|
|||
|
int*int*int -> array
|
|||
|
Crée la matrice des joueurs tel que chaque joueurs
|
|||
|
nie, sauf un qui avoue. Chaque joueur à la même
|
|||
|
stratégie
|
|||
|
"""
|
|||
|
|
|||
|
histo_strat = [strat]
|
|||
|
matrice = np.zeros((TailleGrilleX, TailleGrilleY))
|
|||
|
|
|||
|
for i in range(TailleGrilleY):
|
|||
|
for j in range(TailleGrilleX):
|
|||
|
matrice[i][j] = dict('etat' : 1, 'strategie' : strat, 'annees_de_prison' : 0,\
|
|||
|
'historique_strategies' : histo_strat, 'historique_etats' : [1])
|
|||
|
|
|||
|
index_aleatoirex = [random.randint(0,TailleGrilleX-1)]
|
|||
|
index_aleatoirey = [random.randint(0,TailleGrilleY-1)]
|
|||
|
(matrice[index_aleatoirex][index_aleatoirey])['etat'] = 0
|
|||
|
|
|||
|
return matrice
|
|||
|
|
|||
|
def matrice_init_coop(strat):
|
|||
|
"""
|
|||
|
int*int*int -> array
|
|||
|
Crée la matrice des joueurs tel que chaque joueur avoue,
|
|||
|
sauf un qui nie. Tous les joueurs ont la même strategie
|
|||
|
"""
|
|||
|
|
|||
|
hito = [strat]
|
|||
|
matrice = np.zeros(TailleGrilleX, TailleGrilleY)
|
|||
|
|
|||
|
for i in range(TailleGrilleY):
|
|||
|
for j in range(TailleGrilleX):
|
|||
|
matrice[i][j] = dict('etat' : 0, 'strategie' : strat, 'annees_de_prison' : 0,\
|
|||
|
'historique_strategies' : histo_strat, 'historique_etats' : [0])
|
|||
|
|
|||
|
index_aleatoirex = [random.randint(0,TailleGrilleX-1)]
|
|||
|
index_aleatoirey = [random.randint(0,TailleGrilleY-1)]
|
|||
|
(matrice[index_aleatoirex][index_aleatoirey])[etat] = 1
|
|||
|
|
|||
|
return matrice
|
|||
|
|
|||
|
def matrice_init_pourcent_equitable(list_strat):
|
|||
|
"""
|
|||
|
int*int*list[functions] -> array
|
|||
|
Crée la matrice des joueurs tel que le pourcentage de chaque
|
|||
|
stratégie est équitable. Les états initiaux de chaque
|
|||
|
joueur sont aléatoires.
|
|||
|
"""
|
|||
|
|
|||
|
matrice_strat = np.zeros((TailleGrilleX, TailleGrilleY))
|
|||
|
nb_de_joueurs_de_chaque = (TailleGrilleX*TailleGrilleY)/len(list_strat)
|
|||
|
|
|||
|
for e in range(len(list_strat)):
|
|||
|
count_joueurs = 0
|
|||
|
while count_joueurs <= nb_de_joueurs_de_chaque:
|
|||
|
index_aleatoirex = [random.randint(0,TailleGrilleX-1)]
|
|||
|
index_aleatoirey = [random.randint(0,TailleGrilleY-1)]
|
|||
|
if matrice_strat[index_aleatoirex][index_aleatoirey] != 0:
|
|||
|
continue
|
|||
|
matrice_strat[index_aleatoirex][index_aleatoirey] = e
|
|||
|
count_joueurs += 1
|
|||
|
for i in range(TailleGrilleY): #on vérifie qu'il n'y a pas d'index vides
|
|||
|
for j in range(TailleGrilleX): #si oui, on le rempli avec une strat aléatoire
|
|||
|
if matrice_strat[i][j] == 0:
|
|||
|
matrice_strat[i][j] = list_strat[random.randint(0, 6)]
|
|||
|
|
|||
|
matrice = np.zeros((TailleGrilleX, TailleGrilleY))
|
|||
|
|
|||
|
for i in range(TailleGrilleY):
|
|||
|
for j in range(TailleGrilleX):
|
|||
|
etat = random.randint(0, 2)
|
|||
|
matrice[i][j] = dict('etat' : etat, 'strategie' : matrice_strat[i][j], 'annees_de_prison' : 0,\
|
|||
|
'historique_strategies' : histo_strat, 'historique_etats' : [etat])
|
|||
|
|
|||
|
return matrice
|
|||
|
|
|||
|
|
|||
|
def matrice_init_pourcent_choisis(list_strat, list_pourcent):
|
|||
|
"""
|
|||
|
int*int*list[functions]*list[float] -> array
|
|||
|
list_pourcent contient des float de 0.0 à 1.0.
|
|||
|
Crée la matrice des joueurs tel que le pourcentage de
|
|||
|
chaque stratégie est choisi. Les états initiaux sont
|
|||
|
choisis aléatoirement.
|
|||
|
"""
|
|||
|
matrice_strat = np.zeros((TailleGrilleX, TailleGrilleY))
|
|||
|
nb_de_joueurs_strat0 = (TailleGrilleX*TailleGrilleY)*list_pourcent[0]
|
|||
|
nb_de_joueurs_strat1 = (TailleGrilleX*TailleGrilleY)*list_pourcent[1]
|
|||
|
nb_de_joueurs_strat2 = (TailleGrilleX*TailleGrilleY)*list_pourcent[2]
|
|||
|
nb_de_joueurs_strat3 = (TailleGrilleX*TailleGrilleY)*list_pourcent[3]
|
|||
|
nb_de_joueurs_strat4 = (TailleGrilleX*TailleGrilleY)*list_pourcent[4]
|
|||
|
nb_de_joueurs_strat5 = (TailleGrilleX*TailleGrilleY)*list_pourcent[5]
|
|||
|
|
|||
|
list_nb_joueurs = [nb_de_joueurs_strat0, nb_de_joueurs_strat1, nb_de_joueurs_strat2\
|
|||
|
nb_de_joueurs_strat3, nb_de_joueurs_strat4, nb_de_joueurs_strat5]
|
|||
|
|
|||
|
for e in range(list_nb_joueurs):
|
|||
|
count_joueurs = 0
|
|||
|
while count_joueurs <= list_nb_joueurs[e]:
|
|||
|
index_aleatoirex = [random.randint(0,TailleGrilleX-1)]
|
|||
|
index_aleatoirey = [random.randint(0,TailleGrilleY-1)]
|
|||
|
if matrice_strat[index_aleatoirex][index_aleatoirey] != 0:
|
|||
|
continue
|
|||
|
matrice_strat[index_aleatoirex][index_aleatoirey] = e
|
|||
|
count_joueurs += 1
|
|||
|
|
|||
|
for i in range(TailleGrilleY): #on vérifie qu'il n'y a pas d'index vides
|
|||
|
for j in range(TailleGrilleX): #si oui, on le rempli avec une strat aléatoire
|
|||
|
if matrice_strat[i][j] == 0:
|
|||
|
matrice_strat[i][j] = random.randint(0, list_nb_joueurs)
|
|||
|
|
|||
|
matrice = np.zeros((TailleGrilleX, TailleGrilleY))
|
|||
|
|
|||
|
for i in range(TailleGrilleY):
|
|||
|
for j in range(TailleGrilleX):
|
|||
|
etat = random.randint(0, 2)
|
|||
|
matrice[i][j] = dict('etat' : etat, 'strategie' : matrice_strat[i][j], 'annees_de_prison' : 0,\
|
|||
|
'historique_strategies' : histo_strat, 'historique_etats' : [etat])
|
|||
|
|
|||
|
return matrice
|
|||
|
|
|||
|
|
|||
|
# Pour la grille définie par : 'Une grille où les stratégies que l’on sait “mauvaises” sont en très forte (ou faible) proportion',
|
|||
|
# je pense qu'il s'agit simplement d'utiliser la dernière fonction, et de lui mettre en paramètre des pourcentages plus élevés
|
|||
|
# pour certaines stratégies.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|