• ACO解决VRPTW


    算法设计

    借助蚁群算法解决带时间窗的路径规划问题。

    需要注意的是 所谓时间窗 ([a,b]) ,表示车辆需要在 ([a,b]) 时间内到达顾客处,而不是在 ([a,b]) 内服务完毕。

    符号定义

    信息素浓度 ( au_{i,j})

    顾客之间距离 (dis_{i,j})

    顾客 (j) 的左、右时间窗 (start_j,due_j)

    到达顾客 (j) 的时间 (arrive_j)

    蚂蚁在顾客 (j) 的等待时间 (wait_j=max{(start_j-arrive_j),0} + 0.01) (加 (0.01) 是为了防止除以 (0) 出错)

    顾客 (j) 的紧急程度 (width_j=due_j-arrive_j)

    算法流程

    对于每只蚂蚁,记录当前时间,当前载重量,访问顺序,以及还有哪些顾客尚未访问。

    在每次迭代开始,令每只蚂蚁位于场站。

    只有当蚂蚁服务完 (n) 个顾客后,才算该蚂蚁完成任务。

    假设蚂蚁当前在顾客 (i),向下一个顾客 (j) 转移的概率为 (large P_j=frac{[ au_{i,j}]^alpha[1/{dis_{i,j}}]^eta[1/width_j]^gamma[1/wait_j]^sigma}{sumlimits_{j}([ au_{i,j}]^alpha[1/{dis_{i,j}}]^eta[1/width_j]^gamma[1/wait_j]^sigma)})

    如果蚂蚁找不到下一个顾客服务(指没有顾客可以满足时间窗要求或载重量要求),那么令该蚂蚁返回场站,时间归零,载重装满。

    当所有蚂蚁完成任务后,找到总路程长度最小的蚂蚁,使用该蚂蚁更新答案。

    信息素更新公式为 (large au_{i,j}= au_{i,j} imes ho;+frac{Delta}{nowdis}) ,其中 (Delta) 为常数,(nowdis) 为该蚂蚁的总路程。

    参数选择

    对于信息素,我令其初值为 (large frac1{ave\_sum}),其中 (ave\_sum) 表示所有道路长度的平均值。

    另外,取 (alpha =1.0, eta=3.0,gamma=2.0,sigma=3.0, ho=0.9, Delta = 600.0)

    运行效果

    对于不同数据,需要对参数进行较大调整,方可获得令人满意的答案。

    Solomon C101.25 最优解191.3

    Solomon R101.25 最优解 617.1

    Solomon C101.50 最优解362.4 (这里我令 ( ho=0.8)

    Solomon C101.100 最优解827.3 (这里我令 ( ho=0.6)

    调参太玄学了

    参考资料

    蚁群算法(ACO)求解带时间窗的车辆路径(VRPTW)问题 - 知乎 (zhihu.com)

    当你走进这欢乐场
  • 相关阅读:
    零点起飞学Word与Excel高效办公实战与技巧
    C语言核心技术(原书第2版)
    完全精通Nuendo电脑音乐及音频制作:精细操作与实践指南
    1035.找出直系亲属(floyd)
    1033.继续XXX定律
    1034.寻找大富翁
    1032.ZOJ问题
    1029.魔咒词典
    1031.XXX定律
    1028.继续畅通工程
  • 原文地址:https://www.cnblogs.com/YoungNeal/p/14835748.html
Copyright © 2020-2023  润新知