Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #Genetic Algorithm Demo Version1
- #By Nicolas Far nicofff (at) gmail.com
- #August 2010
- import random
- def getRandomChar():
- RG=random.Random()
- return chr(RG.randint(ord('a'),ord('z')))
- def getRandomInt(maxim):
- RG=random.Random()
- return RG.randint(0,maxim-1)
- class Schromosome:
- def __init__(self,slen,string=''):
- if string!='':
- self.string=string
- return
- self.string=""
- for i in range(slen):
- self.string+=getRandomChar()
- def fitness(self,string):
- result=0
- for i in range(len(string)):
- result+=abs(ord(string[i])-ord(self.string[i]))
- return result
- def clone(self):
- result=""
- position=getRandomInt(len(self.string))
- for i in range(len(self.string)):
- if i != position:
- result+=self.string[i]
- else:
- result+=getRandomChar()
- return result
- pop=50
- population=[]
- endString='holamundo'
- for i in range(pop):
- population.append(Schromosome(len(endString)))
- population.sort(key=lambda guy: guy.fitness(endString))
- iteration=0
- while True:
- guy=population[getRandomInt(pop)]
- prev=guy.fitness(endString)
- new=prev
- while prev<=new:
- newguy=Schromosome(0,guy.clone())
- new=newguy.fitness(endString)
- population[pop-1]=newguy
- population.sort(key=lambda guy: guy.fitness(endString))
- print ('iteration:',iteration,'best:',population[0].string)
- iteration+=1
- if newguy.string==endString:
- break
Advertisement
Add Comment
Please, Sign In to add comment