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



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

要解决的问题:

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

要实现的目标:(使用不同的权重)

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

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

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

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

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)

最新更新