Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
T
Tp_Ia_Distrib
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Requirements
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Locked files
Build
Pipelines
Jobs
Pipeline schedules
Test cases
Artifacts
Deploy
Releases
Package registry
Container registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Code review analytics
Issue analytics
Insights
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Cire Ba
Tp_Ia_Distrib
Commits
a888a73b
Commit
a888a73b
authored
3 months ago
by
Cire Ba
Browse files
Options
Downloads
Patches
Plain Diff
Equilibre de Nash OK
parent
6004ec0b
No related branches found
No related tags found
No related merge requests found
Changes
2
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
TP1/#Définition_des_actions_possibles.py
+43
-0
43 additions, 0 deletions
TP1/#Définition_des_actions_possibles.py
TP1/Equilibre_De_Nash.py
+123
-0
123 additions, 0 deletions
TP1/Equilibre_De_Nash.py
with
166 additions
and
0 deletions
TP1/#Définition_des_actions_possibles.py
0 → 100644
+
43
−
0
View file @
a888a73b
# Définition des actions possibles
actions
=
[
"
avoue
"
,
"
nie
"
]
# Représentation des pertes (peines) par un dictionnaire
pertes
=
{
(
"
avoue
"
,
"
avoue
"
):
(
3
,
3
),
(
"
avoue
"
,
"
nie
"
):
(
0
,
10
),
(
"
nie
"
,
"
avoue
"
):
(
10
,
0
),
(
"
nie
"
,
"
nie
"
):
(
1
,
1
)
}
# Implémentation de la fonction dilemme_prisonnier
def
dilemme_prisonnier
(
matrice_pertes
,
action_joueur1
,
action_joueur2
):
"""
Fonction qui calcule les pertes pour chaque joueur selon leurs actions.
Args:
matrice_pertes: dictionnaire des pertes
action_joueur1: action du joueur 1
action_joueur2: action du joueur 2
Returns:
tuple des pertes (perte_joueur1, perte_joueur2)
"""
return
matrice_pertes
[(
action_joueur1
,
action_joueur2
)]
# Main pour tester le code
if
__name__
==
"
__main__
"
:
print
(
"
Dilemme du Prisonnier
"
)
print
(
"
=====================
"
)
print
(
"
\n
Actions possibles :
"
,
actions
)
print
(
"
\n
Dictionnaire des pertes :
"
)
for
situation
,
peines
in
pertes
.
items
():
print
(
f
"
Situation
{
situation
}
: Peines
{
peines
}
"
)
print
(
"
\n
Tests de la fonction dilemme_prisonnier :
"
)
print
(
f
"
Les deux avouent :
{
dilemme_prisonnier
(
pertes
,
'
avoue
'
,
'
avoue
'
)
}
"
)
print
(
f
"
Joueur 1 avoue, Joueur 2 nie :
{
dilemme_prisonnier
(
pertes
,
'
avoue
'
,
'
nie
'
)
}
"
)
print
(
f
"
Joueur 1 nie, Joueur 2 avoue :
{
dilemme_prisonnier
(
pertes
,
'
nie
'
,
'
avoue
'
)
}
"
)
print
(
f
"
Les deux nient :
{
dilemme_prisonnier
(
pertes
,
'
nie
'
,
'
nie
'
)
}
"
)
\ No newline at end of file
This diff is collapsed.
Click to expand it.
TP1/Equilibre_De_Nash.py
0 → 100644
+
123
−
0
View file @
a888a73b
# Définition des actions possibles
actions
=
[
"
avoue
"
,
"
nie
"
]
# Représentation des pertes (peines) par différents dictionnaires
pertes1
=
{
(
"
avoue
"
,
"
avoue
"
):
(
3
,
3
),
(
"
avoue
"
,
"
nie
"
):
(
0
,
10
),
(
"
nie
"
,
"
avoue
"
):
(
10
,
0
),
(
"
nie
"
,
"
nie
"
):
(
1
,
1
)
}
# Deuxième matrice de pertes
pertes2
=
{
(
"
avoue
"
,
"
avoue
"
):
(
5
,
0
),
(
"
avoue
"
,
"
nie
"
):
(
5
,
1
),
(
"
nie
"
,
"
avoue
"
):
(
4
,
3
),
(
"
nie
"
,
"
nie
"
):
(
3
,
4
)
}
# Troisième matrice de pertes
pertes3
=
{
(
"
avoue
"
,
"
avoue
"
):
(
2
,
2
),
(
"
avoue
"
,
"
nie
"
):
(
5
,
1
),
(
"
nie
"
,
"
avoue
"
):
(
1
,
5
),
(
"
nie
"
,
"
nie
"
):
(
3
,
3
)
}
def
dilemme_prisonnier
(
matrice_pertes
,
action_joueur1
,
action_joueur2
):
"""
Fonction qui calcule les pertes pour chaque joueur selon leurs actions.
Args:
matrice_pertes: dictionnaire des pertes
action_joueur1: action du joueur 1
action_joueur2: action du joueur 2
Returns:
tuple des pertes (perte_joueur1, perte_joueur2)
"""
return
matrice_pertes
[(
action_joueur1
,
action_joueur2
)]
def
equilibre_nash
(
matrice_pertes
,
actions
):
"""
Fonction qui identifie les situations à l
'
équilibre de Nash.
Args:
matrice_pertes: dictionnaire des pertes
actions: liste des actions possibles
Returns:
liste des situations à l
'
équilibre de Nash
"""
equilibres
=
[]
# Pour chaque combinaison d'actions possible
for
action1
in
actions
:
for
action2
in
actions
:
situation
=
(
action1
,
action2
)
perte1
,
perte2
=
matrice_pertes
[
situation
]
# Vérifier si le joueur 1 peut améliorer sa situation en changeant d'action
meilleure_action_joueur1
=
True
for
autre_action1
in
actions
:
if
autre_action1
!=
action1
:
autre_perte1
=
matrice_pertes
[(
autre_action1
,
action2
)][
0
]
if
autre_perte1
<
perte1
:
# Si une autre action donne une perte plus faible
meilleure_action_joueur1
=
False
break
# Vérifier si le joueur 2 peut améliorer sa situation en changeant d'action
meilleure_action_joueur2
=
True
for
autre_action2
in
actions
:
if
autre_action2
!=
action2
:
autre_perte2
=
matrice_pertes
[(
action1
,
autre_action2
)][
1
]
if
autre_perte2
<
perte2
:
# Si une autre action donne une perte plus faible
meilleure_action_joueur2
=
False
break
# Si aucun des deux joueurs ne peut améliorer sa situation, c'est un équilibre de Nash
if
meilleure_action_joueur1
and
meilleure_action_joueur2
:
equilibres
.
append
(
situation
)
return
equilibres
# Main pour tester le code
if
__name__
==
"
__main__
"
:
print
(
"
Dilemme du Prisonnier et Équilibre de Nash
"
)
print
(
"
=========================================
"
)
print
(
"
\n
Actions possibles :
"
,
actions
)
print
(
"
\n
1. Matrice de pertes initiale :
"
)
for
situation
,
peines
in
pertes1
.
items
():
print
(
f
"
Situation
{
situation
}
: Pertes
{
peines
}
"
)
print
(
"
\n
Tests de la fonction dilemme_prisonnier (matrice 1) :
"
)
print
(
f
"
Les deux avouent :
{
dilemme_prisonnier
(
pertes1
,
'
avoue
'
,
'
avoue
'
)
}
"
)
print
(
f
"
Joueur 1 avoue, Joueur 2 nie :
{
dilemme_prisonnier
(
pertes1
,
'
avoue
'
,
'
nie
'
)
}
"
)
print
(
f
"
Joueur 1 nie, Joueur 2 avoue :
{
dilemme_prisonnier
(
pertes1
,
'
nie
'
,
'
avoue
'
)
}
"
)
print
(
f
"
Les deux nient :
{
dilemme_prisonnier
(
pertes1
,
'
nie
'
,
'
nie
'
)
}
"
)
print
(
"
\n
Équilibres de Nash pour la matrice initiale :
"
)
equilibres1
=
equilibre_nash
(
pertes1
,
actions
)
for
eq
in
equilibres1
:
print
(
f
"
Situation
{
eq
}
: Pertes
{
pertes1
[
eq
]
}
"
)
print
(
"
\n
2. Deuxième matrice de pertes :
"
)
for
situation
,
peines
in
pertes2
.
items
():
print
(
f
"
Situation
{
situation
}
: Pertes
{
peines
}
"
)
print
(
"
\n
Équilibres de Nash pour la deuxième matrice :
"
)
equilibres2
=
equilibre_nash
(
pertes2
,
actions
)
for
eq
in
equilibres2
:
print
(
f
"
Situation
{
eq
}
: Pertes
{
pertes2
[
eq
]
}
"
)
print
(
"
\n
3. Troisième matrice de pertes :
"
)
for
situation
,
peines
in
pertes3
.
items
():
print
(
f
"
Situation
{
situation
}
: Pertes
{
peines
}
"
)
print
(
"
\n
Équilibres de Nash pour la troisième matrice :
"
)
equilibres3
=
equilibre_nash
(
pertes3
,
actions
)
for
eq
in
equilibres3
:
print
(
f
"
Situation
{
eq
}
: Pertes
{
pertes3
[
eq
]
}
"
)
\ No newline at end of file
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment