def breed_new_generation(self, weights, scores=None):
# Weights is a list of lists of numpy.ndarrays
# Breed generation in a 'seed' competition format
seeds = len(weights)
partner_offset = -1 if self.polygamous else 0
polygamy_offset = 0 if not self.polygamous else 1
next_gen = [None for _ in xrange(self.generation_size)]
for offspring_num in xrange(self.generation_size):
idx = offspring_num % seeds
if idx == 0:
partner_offset += polygamy_offset
pair_idx = (seeds - offspring_num - partner_offset) % seeds
if pair_idx == idx:
# Don't breed with self - use highest seed instead
pair_idx = 0 if idx != 0 else 1
if scores:
next_gen[offspring_num] = self.breed_organisms(
weights[idx], weights[pair_idx],
scores[idx], scores[pair_idx]
)
else:
next_gen[offspring_num] = self.breed_organisms(
weights[idx], weights[pair_idx],
)
return next_gen
评论列表
文章目录