Aide projet python
Répondre à la discussion
Affichage des résultats 1 à 5 sur 5

Aide projet python



  1. #1
    invitef939ada6

    Aide projet python


    ------

    Bonjour, je dois concevoir un programme intitulé "evacuation d'une salle" en python. Dans ce programme, je définis la salle comme une matrice de 0 dans lequel un automate (symbolisé par le nombre 1 dans la matrice) doit se deplacer le + rapidement possible jusqu'à la sortie. Il y'a des obstacles (symbolisé par le nombre 8 danss la matrice) qu'il doit éviter.
    Voici ce que j'ai fait pour l'instant:


    Code:
    import numpy as N 
    from pylab import * 
    import random 
    import math 
    x==1 #position initiale horizontale de lautomate 
    y==0 #position initiale verticale de lautomate 
    xo==3 #position initiale horizontale de lobstacle 
    yo==3 #position initiale verticale de lobstacle 
    xs==5 #coordonnee horizontale de la sortie 
    ys==5 #coordonnee verticale de la sortie 
    t==N.arange(20) #definition du vecteur temps 
    dt==1 #definition du pas de temps 
    tab==N.zeros((5,10),dtype=int) #definition du tableau representant la salle ou se deplacent les automates 
    newtab==N.zeros((5,10),dtype=int) 
    
    def ComputeNewRoom(tab): #fonction qui renvoie un nouveau tableau (newtab) a partir du precedent (tab). La position de lautomate est indiquee par 1 et les cases vides du tableau par 0 
    newtab=tab.copy() # le nouveau tableau est copie a partir du precedent 
    newtab[newtab==1]=0 #la case occuppee par lautomate sur le precedent tableau est vide sur le nouveau tableau 
    mymen=N.where(tab==1)# la position de lautomate est determinee par 1 dans le tableau 
    myblocks=N.where(tab==8) #la position de lobstacle est determinee par 8 dans le tableau 
    for coord in mymen: 
    x,y=FastWalk(coord[0],coord[1],tab,newtab)#on doit faire appel a la fonction Fastwalk pour avoir les coordonnees de la position delautomate 
    newtab[x,y]=1 # les coordonnees x et y determinees sont les coordonees de 1 dans le tableau 
    for coord in myblocks: #on doit faire appel a la fonction Wall pour avoir les coordonnes de la position des obstacles 
    xo,yo=Wall(coord[0],coord[1],tab,newtab) 
    newtab[xo,yo]=8 # les coordonnees xo et yo determinees sont les coordonnees de 8 dans le tableau 
    return newtab 
    
    def Wall(xo,yo,tab,newtab): # position de lobstacle 
    xo=3 
    yo=4 
    return xo,yo 
    
    def FastWalk(x,y,tab,newtab): #fonction qui code le deplacement intelligent de lautomate qui doit rejoindre la sortie le plus rapidement.. 
    a==N.random.randint(0,2,20) 
    if xs-x<ys-y: 
    if a.any==0: 
    x==x+1 #deplacement horizontal de lautomate 
    
    elif a.any==1: 
    x==x+1 # deplacement en diagonal vers le haut de lautomate 
    y==y+1 
    
    elif ys-y<xs-x: 
    if a.any==0: 
    if ys>y: 
    y==y+1 #deplacement vertical positif de lautomate 
    if ys<y: 
    y==y-1 #deplacement vertical negatif de lautomate 
    elif a.any==1: 
    if ys>y: 
    x==x+1 #deplacement diagonal positif de lautomate 
    y==y+1 
    elif ys<y: 
    x==x+1 #deplacement diagonal negatif de lautomate 
    y==y-1 
    elif ys-y==xs-x: 
    x==x+1 #deplacement diagonal positif de lautomate 
    y==y+1 
    elif ys-y==x-xs: 
    x==x+1 #deplacement diagonal negatif vers le bas de lautomate 
    y==y-1 
    return x,y 
    
    
    
    for i in t: #boucle qui va faire appel a toutes les autres fonctions pour passer de letat t a letat t+dt 
    
    print newtab 
    
    
    
    
    # cette boucle contient les conditions dans le cas ou les positions finales sont atteintes 
    if y==ys: #conditions a respecter a chaque fois que lautomate atteint la coordonnee horizontale et ou verticale de la sortie 
    if x==xs: 
    print "sortie atteinte" 
    else: 
    x==x+1 
    if x==xs: 
    print "sortie atteinte" 
    elif x==xs: 
    if y==ys: 
    print "sortie atteinte" 
    elif ys>y: 
    y==y+1 
    if y==ys: 
    print "sortie atteinte" 
    elif y>ys: 
    y==y-1 
    if y==ys: 
    print "sortie atteinte"	
    elif x+1==xo:	 # conditions a respecter lorsque lautomate rencontre un obstacle 
    if y<ys: 
    y==y+1 
    if y>ys: 
    y==y-1 
    elif y+1==yo: 
    x==x+1 
    elif y-1==yo: 
    x==x+1
    Ma question est la suivante: Quelles lignes de codes je dois mettre dans la boucle sur le temps pour que à chaque pas de temps,mon programme affiche le nouveau tableau copié du précédent et que donc dans cette succession de tableau affichés on puisse voir le déplacement de l'automate du départ jusqu'à la sortie ?


    Merci d'avance

    -----
    Dernière modification par yoda1234 ; 05/01/2012 à 05h32.

  2. #2
    polo974

    Re : Aide projet python

    comme en python, c'est l'indentation qui fait tout, merci d'utiliser la balise code (aller en mode avancer, et c'est le bouton #)
    Jusqu'ici tout va bien...

  3. #3
    invitef939ada6

    Que mettre dans la boucle sur le temps ?

    Bonjour, je dois concevoir un programme intitulé "evacuation d'une salle" en python. Dans ce programme, je définis la salle comme une matrice de 0 dans lequel un automate (symbolisé par le nombre 1 dans la matrice) doit se deplacer le + rapidement possible jusqu'à la sortie. Il y'a des obstacles (symbolisé par le nombre 8 danss la matrice) qu'il doit éviter.
    Voici ce que j'ai fait pour l'instant:

    Code:
    import numpy as N              
    from pylab import *
    import random
    import math
    x==1             #position initiale horizontale de lautomate
    y==0             #position initiale verticale de lautomate
    xo==3            #position initiale horizontale de lobstacle
    yo==3            #position initiale verticale de lobstacle
    xs==5                  #coordonnee horizontale de la sortie
    ys==5                  #coordonnee verticale de la sortie
    t==N.arange(20)         #definition du vecteur temps
    dt==1            #definition du pas de temps 
    tab==N.zeros((5,10),dtype=int)  #definition du tableau representant la salle ou se deplacent les automates
    newtab==N.zeros((5,10),dtype=int)
    
    def ComputeNewRoom(tab):    #fonction qui renvoie un nouveau tableau (newtab) a partir du precedent (tab). La position de lautomate est indiquee par 1 et les cases vides du tableau par 0 
    	newtab=tab.copy()   # le nouveau tableau est copie a partir du precedent
    	newtab[newtab==1]=0  #la case occuppee par lautomate sur le precedent tableau est vide sur le nouveau tableau
    	mymen=N.where(tab==1)# la position de lautomate est determinee par 1 dans le tableau
    	myblocks=N.where(tab==8) #la position de lobstacle est determinee par 8 dans le tableau
    	for coord in mymen:
              x,y=FastWalk(coord[0],coord[1],tab,newtab)#on doit faire appel a la fonction Fastwalk pour avoir les coordonnees de la position delautomate 
    	  newtab[x,y]=1                             # les coordonnees x et y determinees sont les coordonees de 1 dans le tableau
    	for coord in myblocks:    #on doit faire appel a la fonction Wall pour avoir les coordonnes de la position des obstacles
              xo,yo=Wall(coord[0],coord[1],tab,newtab)
              newtab[xo,yo]=8 # les coordonnees xo et yo determinees sont les coordonnees de 8 dans le tableau
    	return newtab
    
    def Wall(xo,yo,tab,newtab):  # position de lobstacle
    	xo=3
            yo=4        
    	return xo,yo
    
    def FastWalk(x,y,tab,newtab):  #fonction qui code le deplacement intelligent de lautomate qui doit rejoindre la sortie le plus rapidement..
    	  a==N.random.randint(0,2,20)
    	  if xs-x<ys-y:
    	    if a.any==0:           
    	      x==x+1           #deplacement horizontal de lautomate
    	      	             	    	          	
    	    elif a.any==1:         
    	      x==x+1           # deplacement en diagonal vers le haut de lautomate
    	      y==y+1
    	                  	 
    	  elif ys-y<xs-x:
    	    if a.any==0:  
    	       if ys>y:     
    	         y==y+1          #deplacement vertical positif de lautomate
    	       if ys<y:
    		 y==y-1          #deplacement vertical negatif de lautomate 
    	    elif a.any==1:
    	      if ys>y: 	    
    	        x==x+1             #deplacement diagonal positif de lautomate
    	        y==y+1
    	      elif ys<y:
    		x==x+1          #deplacement diagonal negatif de lautomate
    		y==y-1      
    	  elif ys-y==xs-x:
    	    x==x+1          	#deplacement diagonal positif de lautomate  
    	    y==y+1
    	  elif ys-y==x-xs:
    	    x==x+1             #deplacement diagonal negatif vers le bas de lautomate
    	    y==y-1    	       	          	  
                return x,y
    
    
    
    for i in t:    #boucle qui va faire appel a toutes les autres fonctions pour passer de letat t a letat t+dt
      
        print newtab
        
        
        	
    
                   # cette boucle contient les conditions dans le cas ou les positions finales sont atteintes
        if y==ys:         #conditions a respecter a chaque fois que lautomate atteint la coordonnee horizontale et ou verticale de la sortie
          if x==xs:        	
            print "sortie atteinte"
          else:
            x==x+1
            if x==xs:
              print "sortie atteinte"
        elif x==xs:
          if y==ys:
            print "sortie atteinte"
          elif ys>y:
            y==y+1
            if y==ys:
    	  print "sortie atteinte" 
          elif y>ys:
            y==y-1
            if y==ys:
              print "sortie atteinte"	 
        elif x+1==xo:	                    # conditions a respecter lorsque lautomate rencontre un obstacle
          if y<ys:
            y==y+1     	   
          if y>ys:
            y==y-1
        elif y+1==yo:
          x==x+1
        elif y-1==yo:
          x==x+1


    Ma question est la suivante: Quelles lignes de codes je dois mettre dans la boucle sur le temps pour que à chaque pas de temps,mon programme affiche le nouveau tableau copié du précédent et que donc dans cette succession de tableau affichés on puisse voir le déplacement de l'automate du départ jusqu'à la sortie ?


    Merci d'avance

  4. #4
    polo974

    Re : Que mettre dans la boucle sur le temps ?

    Tu aurais pu poster dans la suite de ton premier message...
    Tu n'as sans doute pas testé ton code.

    Sinon le == (double =) est un opérateur de comparaison, pas d'affectation, donc quand tu écris:

    x==1 #position initiale horizontale de lautomate

    tu dois te manger une erreur, car tu utilise x pour une comparaison alors qu'il n'a jamais été affecté.

    x=1 #affectation
    x==1 #test
    Jusqu'ici tout va bien...

  5. A voir en vidéo sur Futura
  6. #5
    JPL
    Responsable des forums

    Re : Aide projet python

    Fusion des deux discussions.
    Rien ne sert de penser, il faut réfléchir avant - Pierre Dac

Discussions similaires

  1. aide en python maths
    Par invite0bc113ed dans le forum Logiciel - Software - Open Source
    Réponses: 0
    Dernier message: 10/01/2010, 10h19
  2. aide projet
    Par inviteb3a7e449 dans le forum Chimie
    Réponses: 0
    Dernier message: 02/10/2009, 18h46
  3. Aide projet
    Par invite5618529c dans le forum Électronique
    Réponses: 3
    Dernier message: 25/05/2009, 13h53
  4. Aide Python
    Par darkpilou1 dans le forum Logiciel - Software - Open Source
    Réponses: 2
    Dernier message: 23/10/2006, 12h09
  5. aide programmation python
    Par Elek dans le forum Logiciel - Software - Open Source
    Réponses: 30
    Dernier message: 10/06/2006, 12h58