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.