Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #! /usr/bin/python -*- coding: utf-8 -*-
- #
- # ENSICAEN
- # École Nationale Supérieure d'Ingénieurs de Caen
- # 6 Boulevard Maréchal Juin
- # F-14050 Caen Cedex France
- #
- #
- # @author Régis Clouard - Sat Aug 27 2011
- # based on Mathias Broxvall's classes
- #
- # @file tortoise.py
- # Definition of the tortoise agent.
- import random
- from tortoiseworld import TortoiseFrame
- class TortoiseBrain:
- """ The base class for tortoise brains...
- """
- def think(self, freeAhead, lettuceAhead, lettuceHere, waterAhead, waterHere, drinkLevel, dogFront, dogRight):
- raise Exception, "Invalid Brain class, think() not implemented"
- class RandomBrain(TortoiseBrain):
- """
- An example of simple tortoise brain: act randomly...
- """
- def think(self, freeAhead, lettuceAhead, lettuceHere, waterAhead, waterHere, drinkLevel, dogFront, dogRight):
- return random.choice(['eat','drink','left','right','forward','forward','wait'])
- ######################################################################
- ##########Notre classe de deplacemente basee sur les reflex###########
- ######################################################################
- ##Performance Measures:
- ######->Eviter le chien
- ######->Manger toutes les laitues
- ######->Maintenir le niveau d'eau superieur a 1
- ##Environment:
- ######->Murs
- ######->Pierres
- ######->Eau
- ######->Laitue
- ######->Chien
- ##Actuators:
- ######->Rotation Droite 90°
- ######->Rotation Gauche 90°
- ######->Avancer d'une case
- ######->Manger la laitue
- ######->Boire l'eau
- ######->Faire une pause
- ######->Arreter
- ##Sensors:
- ######->Rien devant
- ######->Laitue devant
- ######->Sur une laitue
- ######->Eau devant
- ######->Sur de l'eau
- ######->Niveau d'eau
- ######->Distance chien en X
- ######->Distance chien en Y
- ######################################################################
- class ReflexBrain(TortoiseBrain):
- #def think(self, freeAhead, lettuceAhead, lettuceHere, waterAhead, waterHere, drinkLevel, dogFront, dogRight):
- # return random.choice(['eat','drink','left','right','forward','forward','wait'])
- def think(self, freeAhead, lettuceAhead, lettuceHere, waterAhead, waterHere, drinkLevel, dogFront, dogRight):
- if(lettuceHere):
- return 'eat'
- if(lettuceAhead):
- return 'forward'
- if(waterHere and drinkLevel<100):
- return 'drink'
- if(waterAhead and drinkLevel<40):
- return 'forward'
- if(abs(dogRight)<=3):
- if(freeAhead):
- return 'forward'
- else:
- return random.choice(['right','right','right','left'])
- if(abs(dogFront)<=3):
- return random.choice(['right','right','right','left'])
- if(freeAhead):
- return 'forward'
- else:
- return random.choice(['right','left'])
- ######################################################################
- ######################################################################
- ######################################################################
- ######################################################################
- ##########Notre classe de deplacemente basee sur les goal###########
- ######################################################################
- class GoalBrain(TortoiseBrain):
- #def think(self, freeAhead, lettuceAhead, lettuceHere, waterAhead, waterHere, drinkLevel, dogFront, dogRight):
- # return random.choice(['eat','drink','left','right','forward','forward','wait']
- global X
- global Y
- def ___init___(self, sizEUH):
- tortoiseMap=[['inexplore' for i in range(sizEUH)]for j in range(sizEUH)]
- print tortoiseMap
- #def seekfirstGoal():
- def addinmatrice(self,freeAhead, lettuceAhead, lettuceHere, waterAhead, waterHere, drinkLevel, dogFront, dogRight):
- if(lettuceAhead):
- tortoiseMap[X][Y]='lettuceAhead'
- if(waterAhead):
- tortoiseMap[X][Y]='waterAhead'
- if(freeAhead):
- tortoiseMap[X][Y]='freeAhead'
- if(not freeAhead):
- self.tortoiseMap[X][Y]='notFreeAhead'
- def think(self, freeAhead, lettuceAhead, lettuceHere, waterAhead, waterHere, drinkLevel, dogFront, dogRight):
- self.addinmatrice(freeAhead, lettuceAhead, lettuceHere, waterAhead, waterHere, drinkLevel, dogFront, dogRight)
- if(lettuceHere):
- return 'eat'
- if(lettuceAhead):
- return 'forward'
- if(waterHere and drinkLevel<100):
- return 'drink'
- if(waterAhead and drinkLevel<40):
- return 'forward'
- if(abs(dogRight)<=3):
- if(freeAhead):
- return 'forward'
- else:
- return random.choice(['right','right','right','left'])
- if(abs(dogFront)<=3):
- return random.choice(['right','right','right','left'])
- if(freeAhead):
- return 'forward'
- else:
- return random.choice(['right','left'])
- ##########################################
- #########Fonction d'affichage#############
- ###################1#######################
- def affichage(self,size):
- for indexx,i in enumerate(size):
- for indexy,j in enumerate(size):
- print tortoiseMap[indexx][indexy]
- ######################################################################
- ######################################################################
- ######################################################################
- if __name__ == "__main__":
- # Tests.
- size=15 # grid 15x15
- speed=40 #40 simulated seconds each real second
- tb = GoalBrain(size)
- tf = TortoiseFrame(size,speed,tb)
- tf.mainloop()
- #tb.affichage(size)
- print("Score:", tf.tw.score)
Add Comment
Please, Sign In to add comment