快速非支配排序函数:

def fast_non_dominated_sort(population):
    # Initialize domination count and domination set for each individual
    domination_count = [0] * len(population)
    dominated_set = [[] for _ in range(len(population))]
    frontiers = [[]]
    # Update domination count and dominated set for each individual
    for i in range(len(population)):
        for j in range(len(population)):
            if i == j:
                continue
            if dominates(population[i], population[j]):
                dominated_set[i].append(j)
            elif dominates(population[j], population[i]):
                domination_count[i] += 1
        if domination_count[i] == 0:
            population[i].rank = 1
            frontiers[0].append(i)
    
    # Calculate subsequent frontiers
    i = 0
    while frontiers[i]:
        next_frontier = []
        for ind in frontiers[i]:
            for j in dominated_set[ind]:
                domination_count[j] -= 1
                if domination_count[j] == 0:
                    population[j].rank = i + 2
                    next_frontier.append(j)
        i += 1
        frontiers.append(next_frontier)
    return frontiers

计算拥挤度函数:

def calculate_crowding_distance(frontier, objectives):
    # Initialize crowding distance for each individual
    crowding_distance = [0] * len(frontier)
    # Calculate crowding distance for each objective
    for obj in range(len(objectives)):
        # Sort individuals in the frontier based on objective value
        sorted_frontier = sorted(frontier, key=lambda x: x.objectives[obj])
        # Set boundary points' crowding distance to infinity
        crowding_distance[0], crowding_distance[-1] = float('inf'), float('inf')
        # Calculate crowding distance for non-boundary points
        for i in range(1, len(sorted_frontier)-1):
            crowding_distance[i] += (sorted_frontier[i+1].objectives[obj] - sorted_frontier[i-1].objectives[obj]) / (objectives[obj].max - objectives[obj].min)
    return crowding_distance
``
用两个目标。最小成本和最大满意度用python写出NSGA2精英策略中的快速非支配排序函数和计算拥挤度函数

原文地址: https://www.cveoy.top/t/topic/ceXt 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录