ARE_Dynamic_2017/ARE-DYNAMIC.py

244 lines
6.0 KiB
Python
Raw Normal View History

2017-03-01 11:12:18 +01:00
# -*- coding:utf-8 -*-
2017-03-01 10:03:21 +01:00
############################
### ARE-DYNAMIC.py
###
### Auteurs:
2017-03-01 11:56:05 +01:00
### Julian Barathieu (3670170)
### Lucie Hoffmann (3671067)
2017-03-01 19:53:11 +01:00
### Nicolas Boussenina (3670515)
2017-03-01 11:56:05 +01:00
### Constance Poulain (3671006)
###
### Projet: Théorie des Jeux, Dilemne du Prisonier
### ARE-DYNAMIC 2016-2017 UPMC MIPI
2017-03-01 10:03:21 +01:00
###
2017-03-01 10:56:58 +01:00
######################
### Importations
import numpy
2017-03-01 10:34:59 +01:00
######################
2017-03-01 10:03:21 +01:00
### Variables Globales
2017-03-01 10:34:59 +01:00
2017-03-01 10:56:58 +01:00
# Grille
Grille = numpy.ndarray()
2017-03-01 10:34:59 +01:00
# taille de la grille
2017-03-01 10:03:21 +01:00
TailleGrilleX = 15
TailleGrilleY = 15
2017-03-01 10:34:59 +01:00
# historique des grilles aux itérations précédentes
# utilisé durant l'affichage dynamique
2017-03-01 10:39:48 +01:00
HistoriqueGrilles = list()
2017-03-01 10:34:59 +01:00
2017-03-01 11:06:44 +01:00
# chaque StratsResultats[i] est un triplet [nb_utilisations, total_ans_prisons, utilisation_detail] avec:
# i = index de la stratégie en question
2017-03-01 10:34:59 +01:00
# nb_utilisations = nombre total d'utilisations de la stratégie
# total_ans_prisons = total d'années de prisons subies par les utilisateurs de la stratégie
# utilisation_detail = une liste de paires (iter, uti) représentant le nombre d'utilisateurs à l'itération "iter"
2017-03-01 10:03:21 +01:00
StratsResultats = list()
2017-03-01 11:18:29 +01:00
# liste des stratégies (fonctions Joueur^2 -> {0, 1} décidant si un joueur nie ou non en fonction de son adversaire)
2017-03-01 11:12:18 +01:00
ListeStrategies = list()
2017-03-01 10:34:59 +01:00
# liste des fonctions génératrices de grille
2017-03-01 10:25:40 +01:00
ListeGenGrille = list()
2017-03-01 10:34:59 +01:00
# génératrice de grille à utiliser
2017-03-01 10:25:40 +01:00
TypeGrilleInitiale = 0
2017-03-01 10:18:47 +01:00
2017-03-01 10:34:59 +01:00
"""
Types:
2017-03-08 08:47:11 +01:00
Coord = tuple(x, y)
Joueur = dict("etat", "historique_etats", "strategie", "annees_de_prison", "historique_strategies")
2017-03-01 10:34:59 +01:00
GrilleJoueurs = matrice2d(Joueur)
"""
2017-03-01 10:18:47 +01:00
2017-03-01 11:06:44 +01:00
#####################################
2017-03-01 10:18:47 +01:00
### Génération de la matrice initiale
def gen_matrice_initiale():
"""
2017-03-01 10:25:40 +01:00
NoneType -> GrilleJoueurs
2017-03-01 10:18:47 +01:00
"""
2017-03-01 11:12:18 +01:00
fonction_gen = ListeGenGrille[TypeGrilleInitiale]
2017-03-01 10:18:47 +01:00
return fonction_gen()
2017-03-01 11:06:44 +01:00
##############################
2017-03-01 10:18:47 +01:00
### Execution des tours / jeux
2017-03-01 11:06:44 +01:00
2017-03-01 10:51:38 +01:00
def partie1v1(joueur, adversaire):
2017-03-01 10:18:47 +01:00
"""
2017-03-01 10:51:38 +01:00
Joueur^2 -> int
Effectue une partie à deux joueurs
Renvoie: paire (prison_joueur, prison_adversaire)
2017-03-01 10:18:47 +01:00
"""
2017-03-01 10:51:38 +01:00
stratj = ListeStrategies[joueur["strategie"]]
strata = ListeStrategies[adversaire["strategie"]]
etatj = stratj(joueur, adversaire)
2017-03-01 11:12:18 +01:00
etata = strata(adversaire, joueur)
2017-03-01 10:51:38 +01:00
# 1 = avouer
# 0 = nier
if etatj == 0:
if etata == 0:
# nie-nie
2017-03-01 11:06:44 +01:00
ans_prison = (2, 2)
2017-03-01 10:51:38 +01:00
else:
# nie-avoue
2017-03-01 11:06:44 +01:00
ans_prison = (10, 0)
2017-03-01 10:51:38 +01:00
else:
if etata == 0:
# avoue-nie
2017-03-01 11:06:44 +01:00
ans_prison = (0, 10)
2017-03-01 10:51:38 +01:00
else:
# avoue-avoue
2017-03-01 11:06:44 +01:00
ans_prison = (5, 5)
2017-03-01 11:37:27 +01:00
(StratsResultats[joueur["strategie"]])[0] += 1
(StratsResultats[joueur["strategie"]])[1] += ans_prison[0]
2017-03-01 12:35:05 +01:00
(StratsResultats[adversaire["strategie"]])[0] += 1
(StratsResultats[adversaire["strategie"]])[1] += ans_prison[1]
2017-03-01 11:06:44 +01:00
2017-03-01 11:09:00 +01:00
joueur["annees_de_prison"] += ans_prison[0]
adversaire["annees_de_prison"] += ans_prison[1]
2017-03-01 11:06:44 +01:00
return ans_prison
2017-03-01 10:18:47 +01:00
def partie8tours(coord_joueur):
"""
Coord ->
"""
pass
def partie_globale(mat):
"""
2017-03-01 10:25:40 +01:00
GrilleJoueurs -> GrilleJoueurs
2017-03-01 10:18:47 +01:00
"""
pass
2017-03-01 11:06:44 +01:00
##############
2017-03-01 10:18:47 +01:00
### Simulation
2017-03-01 11:06:44 +01:00
2017-03-01 10:18:47 +01:00
def simulation():
pass
2017-03-01 11:06:44 +01:00
####################################
### Affichage et interface graphique
2017-03-01 10:18:47 +01:00
2017-03-01 11:06:44 +01:00
#####################################
2017-03-01 10:18:47 +01:00
### Fonction génératrices de matrices
2017-03-01 10:21:12 +01:00
2017-03-08 09:16:52 +01:00
def matrice_init_meme_strat(strat):
pass
def matrice_init_nie_sauf_un(strat):
pass
def matrice_init_avoue_sauf_un(strat):
pass
def matrice_init_equitable():
pass
def matrice_init_pourcents_choisis(list_pourcent):
pass
2017-03-01 10:25:40 +01:00
def init_liste_gen_grilles():
"""
NoneType -> NoneType
Rajoute à ListeGenGrille toutes les fonctions de génération de grille
"""
2017-03-08 09:30:58 +01:00
ListeGenGrille[0] = matrice_init_meme_strat
ListeGenGrille[1] = matrice_init_nie_sauf_un
ListeGenGrille[2] = matrice_init_avoue_sauf_un
ListeGenGrille[3] = matrice_init_equitable
ListeGenGrille[4] = matrice_init_pourcents_choisis
2017-03-01 10:25:40 +01:00
2017-03-01 11:06:44 +01:00
#######################
2017-03-01 10:18:47 +01:00
### Fonction stratégies
2017-03-01 11:26:39 +01:00
def strat_toujours_nier(joueur, adversaire):
"""
Joueur^2 -> int
Index: 0
Toujours nier (coopération)
"""
return 0 # 0 : coop
def strat_toujours_avouer(joueur, adversaire):
"""
Joueur^2 -> int
Index: 1
Toujours avouer (trahir)
"""
return 1 #1 : traître
def strat_altern(joueur, adversaire):
"""
Joueur^2 -> int
Index: 2
Le joueur alterne entre nier et avouer
"""
2017-03-08 08:47:11 +01:00
return 1 - joueur['etat']
2017-03-01 11:26:39 +01:00
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)
"""
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 ladversaire avait majoritairement avoué/nié durant ses parties précédentes (on utilise l'hisorique des états)
Si aucun état nest majoritaire, la coopération lemporte (le joueur nie)
"""
s = 0 # somme des entiers représentant les états
for i in adversaire['historique_etat']:
s += i
if len(adversaire['historique_etat']) == 0:
return 0
elif (s/len(adversaire['historique_etat'])) > 0.5:
return 1
else:
return 0
2017-03-01 10:18:47 +01:00
2017-03-01 10:25:40 +01:00
def init_liste_strategies():
"""
NoneType -> NoneType
Rajoute à ListeStrategies toutes les fonctions stratégies
"""
2017-03-01 11:26:39 +01:00
ListeStrategies[0] = strat_toujours_nier
ListeStrategies[1] = strat_toujours_avouer
ListeStrategies[2] = strat_altern
ListeStrategies[3] = strat_precedent_adversaire
ListeStrategies[4] = strat_principal_adversaire
###############################################################################