ARE_Dynamic_2017/Initialisation_matrices.py

131 lines
4.1 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
HistoriqueGrille = list()
StratsResultats = 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
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 initials ? 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):
matrice[i][j] = dict('etat' : 0, 'strategie' : strat, 'annees_de_prison' : 0,\
'historique_strategies' : histo_strat, 'historique_etats' : [0])
return matrice
def matrice_init_pourcent_choisis(list_strat, list_pourcent):
"""
int*int*list[functions]*list[float] -> array
Crée la matrice des joueurs tel que le pourcentage de
chaque stratégie est choisi.