ARE_Dynamic_2017/parties/Initialisation_matrices.py

181 lines
6.5 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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 lon 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.