139行
- def __tournament(self, population):
- participants = random.sample(population, self.num_of_tour_particips)
- best = None
- for participant in participants:
- if best is None or self.crowding_operator(participant, best) == 1:
- best = participant
复制代码
这里面的self.crowding_operator(participant,
best) 上文赋值best = None
从这里也可以看出,你participant.rank的值也是None
79行
- def crowding_operator(self, individual, other_individual):
- if (individual.rank < other_individual.rank) or \
- ((individual.rank == other_individual.rank) and (
- individual.crowding_distance > other_individual.crowding_distance)):
- return 1
- else:
- return -1
复制代码
def crowding_operator(self, individual,
other_individual): 也就是在这里best做为了other_individual参数被传入
那么None应该是不会有.rank属性的
下一行中,两个None值进行比较。那么肯定是不会有结果的。
另外建议,你这么复杂的算法问题,通过这种方式提问,应该是不会有有效结果的。最少你要把大体上每个函数的用途,执行流程图中的那一部分功能给描述一下,目前面临的问题介绍一下。把问题往论坛上面一抛坐等结果是不可能的。