diff --git a/ARE-DYNAMIC.py b/ARE-DYNAMIC.py index aee3bee..ea04d37 100644 --- a/ARE-DYNAMIC.py +++ b/ARE-DYNAMIC.py @@ -59,7 +59,7 @@ TypeGrilleInitiale = 3 Iteration = 0 # nombre max d'itérations -MaxIterations = 4 +MaxIterations = 100 # stratégie par défaut StratParDefaut = 0 @@ -96,10 +96,7 @@ def gen_matrice_initiale(): def partie1v1(joueur, adversaire): """ - Joueur^2 -> int - Effectue une partie à deux joueurs - Renvoie: paire (prison_joueur, prison_adversaire) """ stratj = ListeStrategies[joueur["strategie"]] @@ -141,12 +138,8 @@ def partie1v1(joueur, adversaire): joueur["annees_de_prison"] += ans_prison[0] adversaire["annees_de_prison"] += ans_prison[1] - return ans_prison - def partie8tours(x,y): - """ - Coord -> NoneType - + """ Effectue huit parties 1v1 entre le joueur et chacun de ses voisins l'un après l'autre """ for i in range (-1,2): @@ -166,13 +159,12 @@ def partie_globale(): partie8tours(i,j) # Changement des stratégies - # On parcourt une copie de la grille pour avoir accès aux anciennes stratégies et non pas aux nouvelles adoptées - copie_grille = np.copy(Grille) + for x in range(len(copie_grille)): for y in range(len(copie_grille[0])): - #(x,y) : joueur dont on va modifier la stratégie, si besoin + # (x,y) : joueur dont on va modifier la stratégie, si besoin min_prison = copie_grille[x][y]["annees_de_prison"] new_strat = copie_grille[x][y]["strategie"] for i in range (-1,2): @@ -184,10 +176,7 @@ def partie_globale(): # Réinitialisation du nb d'années de prison for j in range(len(Grille[0])): - Grille[i][j]['annees_de_prison'] = 0 - - return Grille - + Grille[i][j]['annees_de_prison'] = 0 ##################################### @@ -201,9 +190,7 @@ def matrice_init_vide(): return [[dict() for x in range(TailleGrilleX)] for y in range(TailleGrilleY)] def matrice_init_meme_strat(): - """ - int -> array - + """ Index: 0 Crée la matrice des joueurs où chacun a la même stratégie @@ -213,7 +200,6 @@ def matrice_init_meme_strat(): histo_strat = [StratParDefaut] matrice = matrice_init_vide() - for i in range(TailleGrilleY): for j in range(TailleGrilleX): etat = random.randint(0, 1) @@ -223,9 +209,7 @@ def matrice_init_meme_strat(): return matrice def matrice_init_nie_sauf_un(): - """ - int -> array - + """ Index: 1 Crée la matrice des joueurs tel que chaque joueurs @@ -248,9 +232,7 @@ def matrice_init_nie_sauf_un(): return matrice def matrice_init_avoue_sauf_un(): - """ - int -> array - + """ Index: 2 Créer la matrice des joueurs tel que chaque joueur avoue, @@ -298,7 +280,7 @@ def matrice_init_equitable(): count_joueurs += 1 places_vides -= 1 - for i in range(TailleGrilleY): #on vérifie qu'il n'y a pas d'index vides + for i in range(TailleGrilleY): #on vérifie qu'il ne reste pas d'index vides for j in range(TailleGrilleX): #si oui, on le rempli avec une strat aléatoire if matrice_strat[i][j] == -1: matrice_strat[i][j] = random.randint(0, len(ListeStrategies)) @@ -314,9 +296,7 @@ def matrice_init_equitable(): return matrice def matrice_init_pourcents_choisis(): - """ - list[float] -> array - + """ Index: 4 ListePourcents contient des float de 0.0 à 1.0. @@ -367,9 +347,7 @@ def matrice_init_pourcents_choisis(): ### Fonction stratégies def strat_toujours_nier(joueur, adversaire): - """ - Joueur^2 -> int - + """ Index: 0 Toujours nier (coopération) @@ -377,9 +355,7 @@ def strat_toujours_nier(joueur, adversaire): return 0 # 0 : coop def strat_toujours_avouer(joueur, adversaire): - """ - Joueur^2 -> int - + """ Index: 1 Toujours avouer (trahir) @@ -387,9 +363,7 @@ def strat_toujours_avouer(joueur, adversaire): return 1 #1 : traître def strat_altern(joueur, adversaire): - """ - Joueur^2 -> int - + """ Index: 2 Le joueur alterne entre nier et avouer @@ -398,9 +372,7 @@ def strat_altern(joueur, adversaire): return 1 - joueur['etat'] def strat_precedent_adversaire(joueur, adversaire): - """ - Joueur^2 -> int - + """ Index: 3 Le joueur avoue/nie si durant la partie locale précédente, son adversaire avait avoué/nié (on utilise l'hisorique des états) @@ -408,9 +380,7 @@ def strat_precedent_adversaire(joueur, adversaire): return adversaire['historique_etats'][len(adversaire['historique_etats'])-1] == 0 def strat_principal_adversaire(joueur, adversaire): - """ - Joueur^2 -> int - + """ Index: 4 Le joueur avoue/nie si l’adversaire avait majoritairement avoué/nié durant ses parties précédentes (on utilise l'hisorique des états) @@ -440,6 +410,7 @@ def init_complete(): """ Rajoute à ListeStrategies toutes les fonctions stratégies Rajoute à ListeGenGrille toutes les fonctions de génération de grille + Initialise la grille et StratsResultats """ ListeGenGrille.append(matrice_init_meme_strat) # 0 @@ -471,6 +442,7 @@ def init_complete(): def simulation(): global Iteration global HistoriqueGrilles + Iteration = 0 @@ -489,7 +461,7 @@ def simulation(): for y in range(TailleGrilleY): if Grille[x][y]["strategie"] == i: StratsResultats[i][2][Iteration][0] += 1 - + return Grille @@ -498,14 +470,15 @@ def simulation(): def matRecup(i, param): - """array*str-> array - Récupère la matrice avec seulement le paramètre stratégie pour chaque joueur , à litération i voulue""" + """ + array * str -> array + Récupère la matrice avec seulement le paramètre stratégie pour chaque joueur , à litération i voulue + """ + matR = np.random.randint(0,1,(TailleGrilleX,TailleGrilleY)) - matrice = HistoriqueGrilles[i] - for ligne in range (0,TailleGrilleX): #int ligne for colonne in range (0, TailleGrilleY): #int colonne matR[ligne][colonne]=matrice[ligne][colonne][param] @@ -514,6 +487,7 @@ def matRecup(i, param): def afficher_strat_dynamique(): + fig=plt.figure() fig.suptitle('Animation des stratégies') @@ -523,7 +497,7 @@ def afficher_strat_dynamique(): norm=mpl.colors.BoundaryNorm(bounds, cmap.N) img=plt.imshow(matRecup(0, 'strategie'), interpolation = "nearest", cmap = cmap , norm = norm) - cb=plt.colorbar(img , cmap=cmap , norm=norm , boundaries = bounds , ticks=bounds) + cb=plt.colorbar(img , cmap = cmap , norm=norm , boundaries = bounds , ticks = bounds) labels = np.arange(0, 5, 1) cb.set_ticklabels(labels) @@ -537,6 +511,7 @@ def afficher_strat_dynamique(): def afficher_etat_dynamique(): + fig=plt.figure() fig.suptitle('Animation des états') @@ -546,7 +521,7 @@ def afficher_etat_dynamique(): norm=mpl.colors.BoundaryNorm(bounds, cmap.N) img=plt.imshow(matRecup(0, 'etat'), interpolation = "nearest", cmap = cmap , norm = norm) - cb=plt.colorbar(img , cmap=cmap , norm=norm , boundaries = bounds , ticks=bounds) + cb=plt.colorbar(img , cmap = cmap , norm = norm , boundaries = bounds , ticks = bounds) labels = np.arange(0, 2, 1) cb.set_ticklabels(labels) @@ -560,34 +535,24 @@ def afficher_etat_dynamique(): def affichage_strats_resultats_totaux(): - """array->graph - Retourne les diagrammes en baton qui mettent en évidence le nombre moyen d'années - de prison en fonction de la stratégie et le nombre d'utilisation de chaque stratégies """ - + #initialisation des paramètres - #list gain gain=[] - #list strat stratUtili=[] #nb_utilisations utilisateurs=list() - #uti[strat][iter] = nb - #iteration + #iterations iteration=[] - for i in range(5): - gain.append(0) - stratUtili.append(0) - - for i in range(0,len(ListeStrategies)): - stratUtili[i]=StratsResultats[i][0] + for i in range(len(ListeStrategies)): + stratUtili.append(StratsResultats[i][0]) if StratsResultats[i][0]==0: - gain[i] + gain.append(0) else: - gain[i]=StratsResultats[i][1]/StratsResultats[i][0] + gain.append(StratsResultats[i][1]/StratsResultats[i][0]) utilisateurs.append([]) for i in range(0,MaxIterations+1): @@ -628,23 +593,22 @@ def affichage_strats_resultats_totaux(): plt.legend() -if __name__ == "__main__": - init_complete() - simulation() - affichage_strats_resultats_totaux() - - +# fonction de debug, ne pas utiliser """ def _ext(M): K = np.ndarray((TailleGrilleX, TailleGrilleY)) for x in range(len(M)): for y in range(len(M[0])): - K[x][y] = M[x][y]["strategie"] + K[x][y] = M[x][y]["etat"] return K -print(_ext(simulation())) """ +if __name__ == "__main__": + init_complete() + simulation() + afficher_strat_dynamique() +