我们把问题分解,最终转化为求解路径规划问题——广义旅行商问题
针对广义旅行商问题这种NP难题,没有很好的可以求解出精确解的方法,比较常用的就是改良圈算法、动态规划和启发式求解算法。其中启发式求解算法主要有遗传算法,蚁群算法,模拟退火算法、禁忌搜索算法等。
而本问题不是一个完全的TSP问题,因为不要求最后回到起点,但是依然可以使用启发式算法求解本问题,在此我们选择模拟退火算法求解,内循环是时齐算法的模拟退火,设置参数如下:
初始化温度:T0=-(max(StartPath)-min(StartPath))/log(0.9)
温度下限:Tf=0.001
温度下降梯度:0.8
马氏链长度:100*CityNum
但是由于本问题是一个城市数量随时间变化的问题,不同于传统的城市数目固定,每一次路径选择的时候,可能会有新的城市点出现并影响你的决定,所以为了考虑新出现的点对于当前路径的影响,可以采取策略贪心——即每次将新点加入图中,重新规划路径。
对于有多道工序的问题,我们采取最大权匹配(采用KM算法求解)解决工序的先后问题,然后将匹配后的两个点视作一个点,构建一个有向图进行路径规划。
完整代码百度云盘下载链接:
链接:https://pan.baidu.com/s/1fZCxOUsu-TE4G5PJo46hAQ 密码:fqec