【问题标题】:Multi-objective optimization with Genetic Algorithm using DEAP使用 DEAP 的遗传算法进行多目标优化
【发布时间】:2018-06-25 13:50:21
【问题描述】:

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

要解决的问题:

  1. 哪种产品由哪辆卡车运送;
  2. 取货和下货的顺序是什么。

要达到的目标:(不同的权重)

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

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

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

【问题讨论】:

    标签: python genetic-algorithm deap


    【解决方案1】:

    您可以实现一个返回两个值的评估函数,一个为等待时间,一个为交货时间。

    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)
    

    【讨论】:

      猜你喜欢
      • 2021-06-13
      • 1970-01-01
      • 2019-03-17
      • 2020-06-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-18
      • 2016-09-13
      相关资源
      最近更新 更多