VRP(车辆路径问题)的两种简单算法
VRP问题描述:
假设在一个供求关系系统中,车辆从货源取货,配送到对应的若干配送点。车辆存在最大载货量,且配送可能有时间限制。需要合理安排取货时间,组织适当的行车路线,使用户需求得到满足,同时使某个代价函数最小,比如总工作时间最少、路径最短等。
可以看出TSP问题是VRP问题的一种简单特殊形式。因此,VRP也是一种NP hard 问题。
目前解决此种问题的办法有多种,主要以启发式算法为主。包括退火算法、遗传算法、蚁群算法、禁忌算法等,本文介绍两种比较简单算法:C-W节约算法和遗传算法。
C-W节约算法:
基本思想是把各点单独与货源相连,构成若干条仅含一个配送点的线路,总费用为两倍从原点到各点的距离费用;然后计算将点 i 和点 j 连接在一条线路上费用节约值:
S(i,j)=Coi+Cio+Coj+Cjo−(Coi+Cij+Cjo)=Coi+Coj+Cij
具体步骤:
(1)计算节约值S(i,j),按从大到小排序
(2)考虑表格中最大元素
Smax(i,j) ,对应点i和j,按条件进行操作:
1. 若i和j均不在构成线路上,则得到线路 o -> i ->j ->o,转到(3)
2. 若i或j在已构成线路上,但不是内点 0 -> i ->o,则可连接,转到(3)
3. 若i和j位于已构成不同线路上,且均不是内点,则连接得到线路,转到(3)
4. 若i和j位于已构成的同一线路,则不连接,转到(3)
(3)划去第i行和第j列,即i点不能再到其他点,j点也不能由其他店到达
(4)若所有元素均被划去,则得到完整线路,算法终止;否则,在没有划去的元素中选最大元素,转至(2)。
遗传算法(GA):
基本思想是种群仿照生物遗传进化,通过基因交叉、突变繁衍出子代,形成新的种群,然后根据种群中每个个体的适应值,淘汰代价较高的个体,余下个体继续繁衍。在VRP问题中具体步骤如下:
(1)设定种群大小,设定繁衍代数,对所有的配送点编号,每个个体对应于所有配送点的一种排序,初始化得到初始种群;
(2)通过交叉、变异操作,形成子代,与原来的父代形成新的种群;
(3)根据载货量限制,确定何时回货源取货,再结合代价标准,对种群中的每个个体计算适应值;
(4)根据适应值,淘汰代价高的父代子代,余下个体形成新的种群,繁衍代数增加1;
(5)若繁衍代数达到(1)中设定的初值,停止繁衍,返回代价最小的个体,即最为最佳的配送次序;否则,返回(2)。