用python语言写快速非支配排序算法中拥挤距离的代码
时间: 2023-06-13 10:04:29 浏览: 262
以下是用Python语言实现快速非支配排序算法中拥挤距离的代码:
```python
def crowding_distance_sort(population):
n = len(population)
m = len(population[0].fitness.values)
for i in range(n):
population[i].distance = 0
for i in range(m):
population.sort(key=lambda x: x.fitness.values[i])
f_min = population[0].fitness.values[i]
f_max = population[-1].fitness.values[i]
population[0].distance = np.inf
population[-1].distance = np.inf
for j in range(1, n - 1):
population[j].distance += (population[j + 1].fitness.values[i] - population[j - 1].fitness.values[i]) / (f_max - f_min)
population.sort(key=lambda x: x.distance, reverse=True)
return population
```
其中,population是一个个体列表,每个个体都有一个fitness属性,代表其适应度值,以及一个distance属性,代表其拥挤距离。该函数会对每个个体的distance属性进行更新,并且返回按照拥挤距离排序后的个体列表。
该算法的思路是对于每个维度,将所有个体按照该维度的适应度值进行排序,并计算每个个体的拥挤距离。拥挤距离的计算方法是将该个体前后两个个体在该维度的适应度值之差除以该维度最大适应度值和最小适应度值之差的和。最后,将所有个体按照拥挤距离从大到小排序即可。
阅读全文