使用DEAP的遗传算法进行多目标优化

问题描述 投票:1回答:1

我正在尝试解决物流配送路线问题。例如,有x辆卡车需要将y种产品从其各自的起点分配到各自的目的地。

要解决的问题:

  1. 哪个产品由哪个卡车交付;
  2. 以什么顺序来拾取和放下产品。

达成目标:(具有不同的权重)

  • 等待一种产品的最短等待时间;
  • 每种产品的最短交货时间。

阅读了DEAP文档及其示例之后,我仍然不确定什么是实现此目标的好方法。因为对于上面的问题1和2,我具有不同的选择,交叉和变异函数,但是似乎在DEAP中,您只能在工具箱中为每个函数注册一个函数?

第二,如何在这里实现评估功能?我定义的个人是一个类实例,由卡车类实例,产品类实例,卡车ID列表,产品ID列表以及产品-卡车组合选项字典组成。个人和评估值之间的联系并不是那么直接,只有一个评估函数就有点困难了(至少对我来说是新手)。谢谢!

python genetic-algorithm deap
1个回答
0
投票

您可以实现一个评估函数,该函数返回两个值,一个用于等待时间,一个用于交付时间。

def waiting(individual):
    # do some calculation

def delivery(individual):
    # do some other calculation

def evaluate(individual):
    return waiting(individual), delivery(individual)

然后只需在工具箱中注册此评估函数,并在适合性的定义中将weights向量设置为包含两个数字

toolbox = base.Toolbox()
toolbox.register("attr_flt", random.uniform, 0, 1)

creator.create("FitnessMin", base.Fitness, weights=(-1.0, -1.0)) #you want to minimize both times
creator.create("Individual", list, fitness=creator.FitnessMin)

toolbox.register("individual", tools.initRepeat, creator.Individual, toolbox.attr_float, n=5)
toolbox.register("evaluate", evaluate)
© www.soinside.com 2019 - 2024. All rights reserved.