蚁群算法解决CVRP
问题
通过实际案例描述,根据配送点和业务需求量,进行最优路线的计算。由物流中心点出发,配送多个客户点后再回到起点,根据车辆数量,承载限制,不同车辆服务成本、运行里程限制等条件选择最优运输路径(总里程最短),使成本最小化,配送订单最大化,满载率最大化(如由一个配送中心向各个销售点配送货物,通过算法确定配送中心每辆车的配送方案,包括配送至哪个客户,配送量,下一个配送目的地)。
问题数据及说明
某物流中心有5台配送车辆,车辆的最大载重均为8T,一次配送的最大行驶距离都为50KM,需要向20个客户送货,物流中心和20个客户的坐标及其客户的需求量随机产生,其中,物流中心的坐标为(14.2KM,13.1km),要求合理安排车辆的配送路线和载重量,使配送总里程最短
客户点 | 横坐标x(km) | 纵坐标y(km) | 需求量q(t) |
---|---|---|---|
1 | 12.8 | 8.5 | 0.1 |
2 | 18.4 | 3.4 | 0.4 |
3 | 15.4 | 16.6 | 1.2 |
4 | 18.9 | 15.2 | 1.5 |
5 | 15.5 | 11.6 | 0.8 |
6 | 3.9 | 10.6 | 1.3 |
7 | 10.6 | 7.6 | 1.7 |
8 | 8.6 | 8.4 | 0.6 |
9 | 12.5 | 2.1 | 1.2 |
10 | 13.8 | 5.2 | 0.4 |
11 | 6.7 | 16.9 | 0.9 |
12 | 14.8 | 2.6 | 1.3 |
13 | 1.8 | 8.7 | 1.3 |
14 | 17.1 | 11 | 1.9 |
15 | 7.4 | 1 | 1.7 |
16 | 0.2 | 2.8 | 1.1 |
17 | 11.9 | 19.8 | 1.5 |
18 | 13.2 | 15.1 | 1.6 |
19 | 6.4 | 5.6 | 1.7 |
20 | 9.6 | 14.8 | 1.5 |
说明:各客户相互之间和物流中心与客户之间的距离均采用直线距离
python代码(代码不好,仅供参考)
import random
import copy
import sys
'''
ALPHA:信息启发因子,值越大,则蚂蚁选择之前走过的路径可能性就越大
,值越小,则蚁群搜索范围就会减少,容易陷入局部最优
BETA:Beta值越大,蚁群越就容易选择局部较短路径,这时算法收敛速度会
加快,但是随机性不高,容易得到局部的相对最优
RH0:挥发率
Q : 每条路径上释放的信息素Q / 路径长度
'''
(ALPHA, BETA, RHO, Q) = (0.7, 2.5, 0.20, 100.0)
# 城市数,蚁群
(city_num, ant_num) = (21, 21)
distance_x = [14.2,12.8, 18.4, 15.4,18.9,15.5,3.9,10.6,8.6,12.5,13.8,6.7,14.8,1.8,17.1,7.4,0.2,11.9,13.2,6.4,9.6]
distance_y = [13.1,8.5, 3.4, 16.6, 15.2, 11.6, 10.6, 7.6, 8.4, 2.1, 5.2, 16.9, 2.6, 8.7, 11, 1, 2.8, 19.8, 15.1, 5.6, 14.8]
need = [0,0.1,0.4,1.2,1.5,0.8,1.3,1.7,0.6,1.2,0.4,0.9,1.3,1.3,1.9,1.7,1.1,1.5,1.6,1.7,1.5] #需求量
# 城市距离和信息素
distance_graph = [[0.0 for col in range(city_num)] for raw in range