行程匹配的算法python_节约里程算法的python实现

说明:节约里程法(Saving Algorithm)又称节约算法,是指用来解决运输车辆数目不确定的VRP问题的最有名的启发式算法。是由Clarke和Wright于1964年首次提出的。

背景

为什么写这个程序,因为我在做课设的时候算的过程太复杂了,一个数据出错要重算,当时就想做一个程序出来,但是因为课设只有一周的时间,所以只能作罢。附上我课设论文。虽然它只有74分o(╥﹏╥)o

https://github.com/ishelo/VRP-CW/blob/master/扫描算法介绍及题目.pdf

环境

windows 10 企业版LTSC

python 3.7.2

项目地址

项目核心代码

def savingsAlgorithms(self):

saving = 0

for i in range(1, len(self.q)):

self.Routes.append([i])

for i in range(1, len(self.Routes) + 1): # 使用Sij = Ci0 + C0j - Cij计算节约度

for j in range(1, len(self.Routes) + 1):

if i == j:

pass

else:

saving = (self.distance[i][0] + self.distance[0][j]) - self.distance[i][j]

self.savings.append([i, j, saving]) # 将结果以元组形式存放在列表中

self.savings = sorted(self.savings, key&

  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
节约里程法是一种启发式算法,用于解决TSP问题。以下是用Python实现节约里程法的简单代码示例: ```python import math def calc_distance(points, i, j): # 计算两个点之间的欧氏距离 dx = points[i][0] - points[j][0] dy = points[i][1] - points[j][1] return math.sqrt(dx * dx + dy * dy) def saving_algorithm(points): # 初始化边权 n = len(points) edge_weight = [[0] * n for i in range(n)] for i in range(n): for j in range(n): if i == j: edge_weight[i][j] = float('inf') else: # 计算两个点之间的距离 edge_weight[i][j] = calc_distance(points, i, j) # 计算节约值,存储在数组中 saving = [[0] * n for i in range(n)] for i in range(n - 1): for j in range(i + 1, n): for k in range(n): if k != i and k != j: saving[i][j] += edge_weight[i][k] + edge_weight[k][j] - edge_weight[i][j] # 对节约值进行排序 savings = [] for i in range(n - 1): for j in range(i + 1, n): savings.append((i, j, saving[i][j])) savings.sort(key=lambda x: -x[2]) # 合并路径 route = list(range(n)) for i, j, s in savings: if route[i] != route[j]: route_j = route[j] for k in range(n): if route[k] == route_j: route[k] = route[i] # 返回路径和长度 res_route = [points[route[i]] for i in range(n)] res_length = sum(calc_distance(res_route, i, i + 1) for i in range(n - 1)) + calc_distance(res_route, n - 1, 0) return res_route, res_length ``` 这个函数接受一个由点坐标构成的列表,返回一个最优路径和长度。要使用这个函数,请将点列表传递给它,例如: ```python points = [(0, 0), (1, 2), (3, 4), (5, 6)] route, length = saving_algorithm(points) print(route) print(length) ``` 这将输出最优路径和长度。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值