该代码报错是因为在运行eaMuPlusLambda()函数时,缺少一个参数ngen,即迭代次数。需要将代码中的num_generations替换为ngen即可。

改进后的代码如下:

import numpy as np from deap import algorithms, base, creator, tools

定义问题参数

num_customers = 10 # 客户数量 num_vehicles = 3 # 车辆数量 capacity = 30 # 车辆容量 working_time = 8 # 车辆工作时间(小时)

定义客户参数

np.random.seed(0) customer_demands = np.random.randint(1, 10, num_customers) # 客户需求量 customer_service_times = np.random.uniform(0.5, 1.5, num_customers) # 客户服务时间

定义NSGA-II算法参数

ngen = 100 # 迭代次数 num_individuals = 100 # 种群大小 cx_prob = 0.8 # 交叉概率 mut_prob = 0.2 # 变异概率

定义问题

creator.create("Fitness", base.Fitness, weights=(-1.0, 1.0)) # 定义适应度函数,最小化成本,最大化客户满意度 creator.create("Individual", list, fitness=creator.Fitness) # 定义个体

toolbox = base.Toolbox()

初始化个体

def init_individual(): individual = [] for i in range(num_customers): individual.append(np.random.randint(num_vehicles)) return individual

初始化种群

toolbox.register("individual", tools.initIterate, creator.Individual, init_individual) toolbox.register("population", tools.initRepeat, list, toolbox.individual)

定义评价函数

def evaluate(individual): vehicle_demands = [0] * num_vehicles # 初始化车辆装载量 vehicle_times = [0] * num_vehicles # 初始化车辆工作时间 vehicle_routes = [[] for i in range(num_vehicles)] # 初始化车辆路径 for i, customer in enumerate(individual): vehicle_demands[customer] += customer_demands[i] # 更新车辆装载量 vehicle_times[customer] += customer_service_times[i] # 更新车辆工作时间 vehicle_routes[customer].append(i) # 更新车辆路径

# 计算成本
cost = 0
for i in range(num_vehicles):
    if vehicle_demands[i] > capacity:  # 超过容量限制
        cost += 1000
    else:
        cost += vehicle_demands[i] * 10  # 每个单位成本为10

# 计算客户满意度
satisfaction = sum([customer_demands[i] for i in range(num_customers) if individual[i] in vehicle_routes[individual[i]]]) / sum(customer_demands)

return cost, satisfaction

toolbox.register("evaluate", evaluate)

定义选择、交叉、变异算子

toolbox.register("select", tools.selNSGA2) toolbox.register("mate", tools.cxUniform, indpb=0.5) toolbox.register("mutate", tools.mutUniformInt, low=0, up=num_vehicles-1, indpb=0.2)

运行NSGA-II算法

pop = toolbox.population(n=num_individuals) algorithms.eaMuPlusLambda(pop, toolbox, ngen, num_individuals, cxpb=cx_prob, mutpb=mut_prob)

输出结果

best_individuals = tools.selBest(pop, k=10) for i, individual in enumerate(best_individuals): cost, satisfaction = evaluate(individual) print("Rank %d, Cost: %d, Satisfaction: %f, Solution: %s" % (i+1, cost, satisfaction, individual))

下面这个代码为什么报错?如何改进eaMuPlusLambda missing 1 required positional argument ngen:import numpy as npfrom deap import algorithms base creator tools# 定义问题参数num_customers = 10 # 客户数量num_vehicles = 3 # 车辆数量cap

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

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