您的位置首页生活百科

模拟退火算法?

模拟退火算法?

的有关信息介绍如下:

模拟退火算法?

各位读者大家好,今天小编将给大家分享如何用模拟推退火算法解决带时间窗的车辆路径规划问题。

车辆路径规划问题(VRP)是运筹学中经典,它是指对一系列发货点和收货点,组织调用一定的车辆,安排适当的行车路线,使车辆有序地通过它们,在满足指定的约束条件下(例如:车辆容量限制,行驶时间限制等),力争实现一定的目标。

带时间窗的车辆路径规划问题(Vehicle Routing Problem with Time Window,VRPTW)是在VRP基础上添加配送时间约束条件产生的一个新问题。在这类问题中,给定车辆到达目的地的最早时间和最晚时间,要求车辆必须在规定的时间窗内到达,这是一个硬性条件,但是在搜索过程中却可以适当无视此条件以扩大搜索范围。此时,决策如何规划调度车辆使得配送的总费用最小化。

VRPTW在之前的文章中有介绍。

模拟退火算法是启发式算法的一种,也是一种贪心算法,它从某一较高初温出发,伴随温度参数的不断下降,结合概率突跳特性在解空间中随机寻找目标函数的全局最优解,即在局部最优解能概率性地跳出并最终趋于全局最优。

模拟退火算法的更多详细介绍可以参考之前的文章:

01

#评价函数介绍#

需要注意的是,评价函数的作用并不只是评价该解是否为更优解,在每次调用评价函数的过程中,都会动态改变系数a,b。

若目标函数值符合对容量、时间窗的要求,则惩罚系数a,b降低,算法对不符合要求的解的容忍度提高;反之,惩罚系数a,b提高,算法对不符合要求的解的容忍度降低。

在这样的动态调整下,算法能同时朝着“满足容量、时间的要求”和“追求总距离更短”的两大目标前进。

02

# 算子介绍 #

本文用的是插入算子,即随机选择一个顾客节点a,遍历除该节点所在路径外其他路径的每个位置,依次将该节点a插入每一个位置,算出此时是否为更优解,待全部遍历一遍后,将该节点a插入最优位置。

例如,下面有三条路径,1号节点为所有车辆的出发点和收货点:

此时所有车辆的总距离约为248。

随机选择出一个节点13,将它插入2、3路径的每一个位置,看是否能得到更优解。最终发现将其插入路径3结果更优,则结果如下:

将节点13从路径1移除并插入路径3,结果约为193,明显比原解更优。

代码如下:

03

# 模拟退火算法筛选较优解 #

大体的思路如下:

1) 利用插入算法产生一个新解P(i+1),计算该解的目标函数值L( P(i+1) )。

2) 若L(P(i+1)) < L(P(i)),则接受P(i+1)为新的路径,否则以模拟退火的一定概率接受P(i+1) ,然后降温。

3) 重复步骤1,2直到满足退出条件。

代码如下:

运行结果展示

本算例得到的较好解总距离约为191,且结果符合对时间及容量要求。其结果与用禁忌搜索算法计算相同算例得到的结果一致。

特别提醒:模拟退火算法是启发式算法,结果受编程语言、实现过程、参数设置等因素的影响。感兴趣的小伙伴也可以自己尝试一下哟。