2

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

要解决的问题:

  1. 哪种产品由哪辆卡车运送;
  2. 产品以什么顺序被拾取和丢弃。

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

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

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

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

4

1 回答 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)
于 2019-11-06T10:01:02.483 回答