diff --git a/parties/ARE_code1.py b/parties/ARE_code1.py new file mode 100644 index 0000000..c3ebd40 --- /dev/null +++ b/parties/ARE_code1.py @@ -0,0 +1,180 @@ + +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. + + + + +