Advertisement
Guest User

Population Script

a guest
Apr 15th, 2021
383
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.94 KB | None | 0 0
  1. import pandas as pd
  2. import random
  3.  
  4. ELITE_PART = 0.4
  5. MUTATION_PROBABILITY = 0.35
  6. MUTATION_DEVIATION = 0.3
  7.  
  8. def population_create(p_size,geno_size,bounds):
  9.    
  10.     p = [ random_param(geno_size,bounds) for i in range(p_size)]
  11.     return p
  12.    
  13. def random_param(g,b):
  14.     return [random.uniform(b[i][0],b[i][1]) for i in range(g)]
  15.  
  16. def population_reproduce(p,fitness):
  17.  
  18.     size_p = len(p)
  19.     new_p = []
  20.    
  21.     dataframe = pd.DataFrame({"Param":p,"Fitness":fitness})
  22.     dataframe = dataframe.sort_values(['Fitness'])
  23.     dataframe = dataframe.reset_index(drop=True)    
  24.  
  25.     sorted_p = dataframe['Param'].tolist()
  26.  
  27.     elite_part = round(ELITE_PART*size_p)
  28.     new_p = new_p + sorted_p[:elite_part]
  29.  
  30.     for i in range(size_p-elite_part):
  31.         mom = p[random.randint(0,size_p-1)]
  32.         dad = p[random.randint(0,size_p-1)]
  33.         child = crossover(mom,dad)
  34.         child = mutate(child)
  35.         new_p.append(child)
  36.    
  37.     return new_p
  38.  
  39. def population_get_fittest(p,f):
  40.     dataframe = pd.DataFrame({"Param":p,"Fitness":f})
  41.     dataframe = dataframe.sort_values(['Fitness'])
  42.     dataframe = dataframe.reset_index(drop=True)
  43.    
  44.     return dataframe[0:1]['Param'].values[0],dataframe[0:1]['Fitness'].values[0]
  45.  
  46. def population_get_average_fitness(f):
  47.     return sum(f)/len(f)
  48.  
  49. def crossover(p1,p2):
  50.    
  51.     crossover = []
  52.     locii = [random.randint(0,8) for _ in range(len(p1))]
  53.    
  54.     for i in range(len(p1)):
  55.         if locii[i]>4:
  56.             crossover.append(p2[i])
  57.         else:
  58.             crossover.append(p1[i])
  59.        
  60.     return crossover
  61.  
  62. def mutate(c):
  63.     size = len(c)
  64.     for i in range(size):
  65.         if random.random()< MUTATION_PROBABILITY:
  66.             if i==0:
  67.                 c[1] += random.gauss(0,2)
  68.             elif i==1:
  69.                 c[2] += random.gauss(0,1)
  70.             else:
  71.                 c[i] += random.gauss(0,2)*10
  72.            
  73.     return c  
  74.    
  75.  
  76.    
  77.    
  78.  
  79.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement