Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #GEN.py
- from __future__ import division
- from random import random
- randstr=lambda n:map(lambda x: round(random())==1,range(n))
- def nums(bibit):
- small=map(lambda x:x+1,range(9))
- large=[25,50,75,100]
- out=[[],[]]
- n=2
- for i in [0,1]:
- if bibit[i]:n=n+(i+1)
- else:None
- for i in range(n):
- r=int(round(random()*9.98-.49))
- out[0].append(small[r%len(small)])
- del small[r%len(small)]
- for i in range(6-n):
- r=int(round(random()*9.98-.49))
- out[1].append(large[r%len(large)])
- del large[r%len(large)]
- return out
- def evalu(nbits,obits,numbers):
- stri=''
- nu=[]
- o=[]
- for i in range(int(len(nbits)/3)):
- if not len(numbers[0])+len(numbers[1]): break
- n=(lambda: (1 if nbits[i*3] else 0)+(2 if nbits[i*3+1] else 0))()
- if (nbits[i*3+2] or not len(numbers[0])) and len(numbers[1]):
- nu.append(numbers[1][n%len(numbers[1])])
- del numbers[1][n%len(numbers[1])]
- else:
- print numbers
- print len(numbers[0])
- nu.append(numbers[0][n%len(numbers[0])])
- del numbers[0][n%len(numbers[0])]
- for i in range(int(len(obits)/3)):
- if not len(numbers[0])+len(numbers[1]): break
- n=(lambda: (1 if obits[i*3] else 0)+(2 if obits[i*3+1] else 0))()
- if (obits[i*3+2] or not len(numbers[0])) and len(numbers[1]):
- nu.append(numbers[1][n%len(numbers[1])])
- del numbers[1][n%len(numbers[1])]
- else:
- print numbers
- print len(numbers[0])
- nu.append(numbers[0][n%len(numbers[0])])
- del numbers[0][n%len(numbers[0])]
- for i in range(len(nu)-1):
- stri=stri+str(nu[i])+o[i]
- stri=stri+nu[len(nu)-1]
- return stri
- class gen():
- def __init__(self,popsize,goal,numbers,mergetype,fitnesstest):
- self.goal=goal
- self.numbers=numbers
- self.population=self.prodpop(popsize)
- self.mergetype=mergetype
- def prodpop(self,size):
- out=[]
- return map(lambda x: (lambda y:[y,[evalu(y[0:12],y[12:24],self.numbers)],0,0])(randstr(size)),range(size))
- def getfitness(self,val,goal):
- dif=abs(val-goal)
- if dif == 0:
- return 10
- if dif < 10:
- return 5
- elif dif < 100:
- return 3
- elif dif < 200:
- return 2
- #for i in [[0,1],[0,0],[1,0],[1,1]]:
- # print nums(i)
- # print int(round(random()*1000))
- a=gen(24,random()*1000,nums([1,0]),0,0)
- ##METAGEN.py
- from random import random
- from gen import makegen
- gen=0
- tests=
- [[1000,(40,25,5,4)],
- [900,(40,25,5,4,8)],
- [100,(40,25,5,4,10,50)]
- ]
- PopulationSize=10
- randstr=lambda:map(lambda x: round(random())==1,range(PopulationSize))
- Pop=map(lambda x:[randstr(),0,0],range(PopulationSize)) # [Values,Fitness,Inherited Fitness]
- while gen < 5:
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement