DNA_SIZE > 1 error.
gcl916 opened this issue · 0 comments
gcl916 commented
when DNA_SIZE > 1, index out of boundary at
good_idx = idx[fitness.argsort()][-POP_SIZE:]
so, suggestion is :
def kill_bad(pop, kids):
# put pop and kids together
for key in ['DNA', 'mut_strength']:
pop[key] = np.vstack((pop[key], kids[key]))
fitness = get_fitness(F(pop['DNA'])) # calculate global fitness
w,h = pop['DNA'].shape
idx = np.arange(w*h)
good_idx = idx[fitness.argsort()][-POP_SIZE*DNA_SIZE:] # selected by fitness ranking (not value)
for key in ['DNA', 'mut_strength']:
pop[key] = pop[key].flatten()
pop[key] = pop[key][good_idx]
pop[key] = pop[key].reshape((POP_SIZE,DNA_SIZE))
return pop