J'ai réalisé un petit programme d'étude de jeux à 3 stratégies.
Il calcule plein de choses utiles quand on fait de la théorie des jeux. Il prend en entrée la matrice des gains du jeu.
En soi, il n'intéressera pas grand monde, mais j'ai plusieurs petites questions sur ce qui peut se faire en Basic Nspire CAS:
Show/Hide spoilerAfficher/Masquer le spoiler
- Code: Select all
Define study_game(a)=
Prgm
DelVar x,y,z
vars:=[[x][y][z]]
dxyz:=a*vars
dx:=dxyz[1,1]
dy:=dxyz[2,1]
dz:=dxyz[3,1]
Disp "Gains moyens:"
Disp "∆x: ",dx
Disp "∆y: ",dy
Disp "∆z: ",dz
d:=dx*x+dy*y+dz*z
Disp "∆: ",d
Disp "Equations du réplicateur:"
Disp "x' = x(",expand(dx-d),")"
Disp "y' = y(",expand(dy-d),")"
Disp "z' = y(",expand(dz-d),")"
sys:=system(x+y+z=1,x*(dx-d)=0,y*(dy-d)=0)
equs:=solve(sys,x,y)
ms:=exp▶list(equs,{x,y,z})
n:=dim(ms)[1]
Disp n," points d'équilibre: ",ms
vars2:=[[x][y][1-x-y]]
dxyz2:=a*vars2
dx2:=dxyz2[1,1]
dy2:=dxyz2[2,1]
dz2:=dxyz2[3,1]
d2:=dx2*x+dy2*y+dz2*(1-x-y)
j:=[[(x*(dx2-d2),x),(x*(dx2-d2),y)][(y*(dy2-d2),x),(y*(dy2-d2),y)]]
Disp "Matrice Jacobienne en 2D: "
Disp j
Disp "Stabilité des points d'équilibre:"
For a,1,n
x:=ms[a,1]
y:=ms[a,2]
z:=ms[a,3]
de:=det(j)
tr:=trace(j)
delta:=tr^(2)-4*de
If de>0 and tr>0 Then
If delta>0
isp:="==> C'est un noeud instable !"
If delta<0
isp:="==> C'est un foyer instable !"
If delta=0
isp:="==> C'est un noeud dégénéré ou étoile instable !"
EndIf
If de>0 and tr<0 Then
If delta>0
isp:="==> C'est un noeud asymptotiquement stable !"
If delta<0
isp:="==> C'est un foyer asymptotiquement stable !"
If delta=0
isp:="==> C'est un noeud dégénéré ou étoile asymptotiquement stable !"
EndIf
If de<0
isp:="==> C'est un point selle !"
If de=0 Then
If tr=0 Then
isp:="Mouvement continu"
Else
isp:="==> C'est un point non hyperbolique !"
EndIf
EndIf
If tr=0 and de>0
isp:="==> La linéarisation prévoit des centres."
Disp "En (",x,",",y,",",z,"), J=",j," det(J) =",de," tr(J) =",tr," ∆=",delta,isp
EndFor
EndPrgm
J'aimerais faire deux choses:
- Etendre à la dimension n, pour des jeux à n stratégies,
- Afficher des trajectoires en 2 ou 3D
Mes deux problèmes principaux sont donc:
- Est-ce qu'il est possible de dire explicitement à la commande solve() le domaine dans lequel on attend les solutions ? Par exemple ici, je veux x, y et z entre 0 et 1, et je ne sais pas comment le lui dire.
- Est-il possible de créer un vecteur de variables inconnues de taille sur demande ? Ici, j'ai posé
vars := [ [x],[y],[z] ]
, si je veux avoir un vecteur de n inconnues, n dépendant de la dimension de la matrice passée en entrée, comment faire ? - Est-il possible de dessiner (graphiquement) le triangle des solutions de x+y+z=1 facilement à partir du programme ? Si c'est trop compliqué, tant pis, ce n'est pas essentiel.
Question subsidiaire: vu qu'il a rejoint les archives TI-Planet ce matin, y'a-t-il une façon d'indiquer que le classeur est réservé aux machines CAS ?
archives_voir.php?id=869145
Merci !