我正在尝试解决物流配送路线问题。例如,有x辆卡车需要将y种产品从其各自的起点分配到各自的目的地。
要解决的问题:
达成目标:(具有不同的权重)
阅读了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)