Forum de mathématiques - Bibm@th.net
Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
Pages : 1
Discussion fermée
#1 27-03-2017 22:17:24
- Terces
- Membre
- Inscription : 16-07-2015
- Messages : 466
Puissance_4
Bonsoir,
J'ai essayé de programmer un puissance 4, voila le résultat si ca vous intéresse :
(il est possible qu'il arrive un problème mais il arrive rarement et je ne sais pas trop comment l'arranger simplement.)
from matplotlib import*
from matplotlib.pyplot import*
from numpy import*
from time import*
from random import*
taille = (8,8)
fig=figure(figsize=taille)
ax = fig.add_subplot(111)
axis('off')
grille=array([[0,0,0,0,0,0,0],
[0,0,0,0,0,0,0],
[0,0,0,0,0,0,0],
[0,0,0,0,0,0,0],
[0,0,0,0,0,0,0],
[0,0,0,0,0,0,0],
[0,0,0,0,0,0,0]])
for i in arange(-0.5,7.5,1):
plot([-0.5,6.5],[i,i],'k')
plot([i,i],[-0.5,6.5],'k')
def gagnant():
#ligne :
for x in range(0,4):
for y in range(0,7):
if grille[x,y]==grille[x+1,y]==grille[x+2,y]==grille[x+3,y]==1 :
return 1
#colonne :
for x in range(0,7):
for y in range(0,4):
if grille[x,y]==grille[x,y+1]==grille[x,y+2]==grille[x,y+3]==1 :
return 1
#diagonale1 :
for x in range(0,4):
for y in range(0,4):
if grille[x,y]==grille[x+1,y+1]==grille[x+2,y+2]==grille[x+3,y+3]==1 :
return 1
#diagonale2 :
for x in range(0,4):
for y in range(3,7):
if grille[x,y]==grille[x+1,y-1]==grille[x+2,y-2]==grille[x+3,y-3]==1 :
return 1
#ligne :
for x in range(0,4):
for y in range(0,7):
if grille[x,y]==grille[x+1,y]==grille[x+2,y]==grille[x+3,y]==-1 :
return -1
#colonne :
for x in range(0,7):
for y in range(0,4):
if grille[x,y]==grille[x,y+1]==grille[x,y+2]==grille[x,y+3]==-1 :
return -1
#diagonale1 :
for x in range(0,4):
for y in range(0,4):
if grille[x,y]==grille[x+1,y+1]==grille[x+2,y+2]==grille[x+3,y+3]==-1 :
return -1
#diagonale2 :
for x in range(0,4):
for y in range(3,7):
if grille[x,y]==grille[x+1,y-1]==grille[x+2,y-2]==grille[x+3,y-3]==-1 :
return -1
return 0
def ag():
for k in range(0,7):
print(grille[k,0],grille[k,1],grille[k,2],grille[k,3],grille[k,4],grille[k,5],grille[k,6])
def IA():
#print(xposs)
for x in range(0,7):
v=0
y=gravitéo(x)
if y!=10:
grille[x,y]=-1
for i in range(0,4):
for j in range(0,7):
if grille[i,j]==grille[i+1,j]==grille[i+2,j]==grille[i+3,j]==-1 :
v=1
for i in range(0,7):
for j in range(0,4):
if grille[i,j]==grille[i,j+1]==grille[i,j+2]==grille[i,j+3]==-1 :
v=1
for i in range(0,4):
for j in range(0,4):
if grille[i,j]==grille[i+1,j+1]==grille[i+2,j+2]==grille[i+3,j+3]==-1 :
v=1
for i in range(0,4):
for j in range(3,7):
if grille[i,j]==grille[i+1,j-1]==grille[i+2,j-2]==grille[i+3,j-3]==-1 :
v=1
grille[x,y]=0
if v==1 :
#print('--------------------ordi gg')
return x
v=0
grille[x,y]=1
for i in range(0,4):
for j in range(0,7):
if grille[i,j]==grille[i+1,j]==grille[i+2,j]==grille[i+3,j]==1 :
v=1
for i in range(0,7):
for j in range(0,4):
if grille[i,j]==grille[i,j+1]==grille[i,j+2]==grille[i,j+3]==1 :
v=1
for i in range(0,4):
for j in range(0,4):
if grille[i,j]==grille[i+1,j+1]==grille[i+2,j+2]==grille[i+3,j+3]==1 :
v=1
for i in range(0,4):
for j in range(3,7):
if grille[i,j]==grille[i+1,j-1]==grille[i+2,j-2]==grille[i+3,j-3]==1 :
v=1
grille[x,y]=0
if v==1 :
#print('--------------------block joueur')
return x
for i in range(1,5):
j=0
if grille[i-1,j]==0 and grille[i,j]==1 and grille[i+1,j]==1 and grille[i+2,j]==0:
#print('gauche ou droite')
return randrange(i-1,i+3,3)
for j in range(1,7):
if grille[i-1,j]==0 and grille[i,j]==1 and grille[i+1,j]==1 and grille[i+2,j]==0:
if abs(grille[i-1,j-1])==1 or abs(grille[i+2,j-1])==1 :
#print('gauche ou droite')
return randrange(i-1,i+3,3)
#print('random')
shuffle(xposs)
for x in range(0,len(xposs)):
v=0
x=xposs[x]
y1=gravitéo(x)
grille[x,y1]=-1
for k in range(0,len(xposs)):
k=xposs[k]
y2=gravitéo(k)
try :
grille[k,y2]=1
except : break
for i in range(0,4):
for j in range(0,7):
if grille[i,j]==grille[i+1,j]==grille[i+2,j]==grille[i+3,j]==1 :
v=1
for i in range(0,7):
for j in range(0,4):
if grille[i,j]==grille[i,j+1]==grille[i,j+2]==grille[i,j+3]==1 :
v=1
for i in range(0,4):
for j in range(0,4):
if grille[i,j]==grille[i+1,j+1]==grille[i+2,j+2]==grille[i+3,j+3]==1 :
v=1
for i in range(0,4):
for j in range(3,7):
if grille[i,j]==grille[i+1,j-1]==grille[i+2,j-2]==grille[i+3,j-3]==1 :
v=1
grille[k,y2]=0
grille[x,y1]=0
if v==0 :
#print('--------------------Logique',x)
return x
#else :
#print('--------------------PAS Logique',x)
h=randint(0,len(xposs)-1)
return xposs[h]
def gravitéj(x):
for y in range(0,7):
if grille[x,y]==0 :
return y
print('cette colonne est déjà pleine !')
return 0
def gravitéo(x):
for y in range(0,7):
if grille[x,y]==0 :
return y
try:
xposs.remove(x)
except ValueError : pass
return 10
xposs=[0,1,2,3,4,5,6]
def jeu(event):
x=int(event.xdata+0.5)
y=gravitéj(x)
grille[x,y]=1
plot(x,y,'ro',markersize=50)
gg=gagnant()
if gg==0 :
pass
elif gg==1 :
ax.set_title("Le joueur gagne",size=40,color='red')
elif gg==-1 :
ax.set_title("La machine gagne",size=40,color='blue')
draw()
x=IA()
y=gravitéo(x)
grille[x,y]=-1
plot(x,y,'bo',markersize=50)
gg=gagnant()
if gg==0 :
pass
elif gg==1 :
ax.set_title("Le joueur gagne",size=40,color='red')
elif gg==-1 :
ax.set_title("La machine gagne",size=40,color='blue')
draw()
cid = fig.canvas.mpl_connect('button_press_event', jeu)
La somme des inverses de la suite de Sylvester converge vers 1 plus vite que toute autre série somme infinie d'inverses d'entiers convergeant vers 1.
Hors ligne
#2 31-03-2017 23:47:03
- Terces
- Membre
- Inscription : 16-07-2015
- Messages : 466
Re : Puissance_4
Re,
Je me suis un peu renseigné sur les IA et le "deep learning", est-ce que vous pensez que c'est possible de creer un programme (pour commencer un puissance 4) qui joue au départ aléatoirement et on le laisse jouer contre lui même pendant une heure pour qu'il comprenne comment gagner ?
Le faire jouer contre lui même pendant une heure c'est pas compliqué mais pour qu'il s'améliore, je ne vois pas comment faire à première vue.
La somme des inverses de la suite de Sylvester converge vers 1 plus vite que toute autre série somme infinie d'inverses d'entiers convergeant vers 1.
Hors ligne
Pages : 1
Discussion fermée