Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2383 connectés 

  FORUM HardWare.fr
  Programmation
  Python

  Threading

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Threading

n°2180906
kucrapoc83
Posté le 16-03-2013 à 18:26:36  profilanswer
 

Bonjour tout le monde!
 
J'ai quelques problèmes concernant les Threads, surement du au fait que je n'ai toujours pas compris comment animer de nombreux objets simultanément dans un canevas à l'aide des Threads...
 
L'objectif du programme est de tenter de créer une colonie de fourmis (pour les connaisseurs, ant colony optimisation), celles-ci doivent partir chercher de la nourriture, et une fois trouvée, doivent la rapporter au nid en laissant derrière elles des phéromones, de manière à ce que les autres suivent le chemin (ou plus précisément l'odeur des phéromones)
 
Je vous passe le code de la création des fourmis étape par étape, tout en sautant la partie lourde du canvas et des créations de moultes obstacles, et si quelqu'un veut bien m'expliquer comment réussir les Threads (car ici pour faire bouger toutes les fourmis, je les prend une par une moi même), je lui en serait infiniment reconnaissant  :love:  
 
 
PS: Je tiens à m'excuser pour ma manière de coder, je débute un peu, surtout en Python =/
     Et pour ceux qui en ont besoin, je peux leur fournir le reste du code, même si l'architecture de celui-ci est à vomir  :sweat:  
 
 
 
 
#### Les fourmis sont créées sur la création du nid ici ####
 
 
 
def ajoutnid(nbfourmi, x, y) :  
 global can1, ID, fourmi
 nid = can1.create_oval(x-15,y-15,x+15,y+15,fill='brown', tag="NID" )
 print(nid)
 can1.tag_raise(nid)
 acc = nbfourmi
 while(acc>0) :
  ID = acc + nid
  fourmi = creerfourmi(can1, x, y)
  can1.fourmi=fourmi
  acc = acc - 1
 
 
 
 
 
#### Et ici la partie thread des fourmis ####
 
 
 
 
class creerfourmi(threading.Thread) :
 
 directions = [
  ('N', (0, -5)),
  ('E', (5, 0)),
  ('S', (0, 5)),
  ('W', (-5, 0)),
  ('NE', (5, -5)),
  ('NO', (-5, -5)),
  ('SW', (-5, 5)),
  ('SE', (5, 5))
  ]
   
   
 def __init__(self, can1, x, y) : # virer l'id via des threads
  self.posX, self.posY = x, y  #coordonnées initiales OK, déplacement à revoir, thread mal engagé?
  self.portnourriture = 0
  self.endurance=50
  self.vitesse=vitesse
  self.couleur=couleur
  self._stopevent=threading.Event( )
  r1 = random.uniform(-20,20)
  r2 = random.uniform(-20,20)
  self.ID=can1.create_oval(x+r1-3,y+r2+1,x+r1+3,y+r2-1,fill=couleur, tag="fourmi" )
  threading.Thread.__init__(self, target=self.move)
 
 
 def move(self) : #à améliorer, de manière a utiliser le thread#
  #=== déplacement de la fourmi ===#
  while not self._stopevent.isSet():
   self._stopevent.wait(0.05)
   indice = self.ID
   while(indice>1) :
    if(self.endurance>0) :
     ran = random.choice(self.directions)[1]
     r1 = tuple(ran)
     can1.move(indice, r1[0], r1[1])
     can1.update()
     indice=indice-1
    else :
     can1.move(indice, self.posX, self.posY)
     self.endurance = 50
   self.endurance = self.endurance-1
 
 
 
 
 def stop(self) :
  self._stopevent.set( )
   
   

mood
Publicité
Posté le 16-03-2013 à 18:26:36  profilanswer
 

n°2180984
kucrapoc83
Posté le 17-03-2013 à 14:28:43  profilanswer
 

Pour ceux qui ont ou sont en train de lire/essayer de résoudre le problème, je viens de comprendre qu'il fallait faire start sur chaque fourmi, tout simplement, dans tout les cas merci à eux :)


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Python

  Threading

 

Sujets relatifs
mysqldb et threadingurllib2 et threading
Threading et exception?Tkinter et threading
problème de connexion HTTP J2ME avec ThreadingSWT et Mult-Threading
[MinGW/Boost.Thread] Segfault multi-threading[C++/SDL] pb de threading
[C++] Threading --> PB de creation de thread (MFC)[MS-DOS] Multi-threading
Plus de sujets relatifs à : Threading


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)