资源简介
求解VRP问题的经典算法,实现运算,源程序代码,含注释,可以自己修改数据
代码片段和文件信息
“““
@author: zll
description:
迭代局部搜索算法求解TSP
“““
import random
import time
import math
import copy
max_iterations = 10
max_no_improve = 10
CITY_SIZE = 52 #城市数量
# 柏林52城算例
city = [
[ 565575 ][ 25185 ][ 345750 ][ 945685 ][ 845655 ]
[ 880660 ][ 25230 ][ 5251000 ][ 5801175 ][ 6501130 ]
[ 1605620 ][ 1220580 ][ 1465200 ][ 15305 ]
[ 845680 ][ 725370 ][ 145665 ]
[ 415635 ][ 510875 ][ 560365 ][ 300465 ][ 520585 ][ 480415 ]
[ 835625 ][ 975580 ][ 1215245 ][ 1320315 ][ 1250400 ][ 660180 ]
[ 410250 ][ 420555 ][ 575665 ][ 11501160 ][ 700580 ][ 685595 ]
[ 685610 ][ 770610 ][ 795645 ][ 720635 ][ 760650 ][ 475960 ]
[ 95260 ][ 875920 ][ 700500 ][ 555815 ][ 830485 ][ 117065 ]
[ 830610 ][ 605625 ][ 595360 ][ 1340725 ][ 1740245 ]
];
#优化值
Delta = [ [0 for i in range(CITY_SIZE)] for j in range(CITY_SIZE) ]
class Solution:
def __init__(self):
self.cost = 0
self.route = []
def copy(self):
solution = Solution()
solution.cost = self.cost
solution.route = copy.deepcopy(self.route)
return solution
def ILS():
#计算路径总长度
def cost_total(city_list):
cost = 0
for i in range(CITY_SIZE - 1):
cost += distance_2city(city_list[i] city_list[i + 1])
cost += distance_2city(city_list[CITY_SIZE - 1] city_list[0])
return cost
#计算两个城市间距离
def distance_2city (c1 c2):
dis = math.sqrt((city[c1][0] - city[c2][0]) ** 2 + (city[c1][1] - city[c2][1]) ** 2)
return dis
#本地局部搜索,找出局部最优解,边界条件 max_no_improve
def local_search(best_solution):
#颠倒数组中下标begin到end的元素位置
def swap_element(city_list begin end):
while begin < end :
temp = city_list[begin]
city_list[begin] = city_list[end]
city_list[end] = temp
begin += 1
end -= 1
#邻域动作 反转index_i <-> index_j 间的元素
def two_opt_swap(cities_route index_i index_j):
new_cities_route = copy.deepcopy(cities_route)
swap_element(new_cities_route index_i index_j)
return new_cities_route
# 计算邻域操作优化值
def calc_delta(i k city_list):
‘‘‘
以下计算说明:
对于每个方案,翻转以后没必要再次重新计算总距离
只需要在翻转的头尾做个小小处理
比如:
有城市序列 1-2-3-4-5 总距离 = d12 + d23 + d34 + d45 + d51 = A
翻转后的序列 1-4-3-2-5 总距离 = d14 + d43 + d32 + d25 + d51 = B
由于 dij 与 dji是一样的,所以B也可以表示成 B = A - d12 - d45 + d14 + d25
下面的优化就是基于这种原理
‘‘‘
delta = 0
if i == 0 and k == CITY_SIZE - 1 :
delta = 0
else :
i2 = (i - 1 + CITY_SIZE) % CITY_SIZE
k2 = (k + 1) % CITY_SIZE
delta = 0
- distance_2city(city_list[i2] city_list[i])
+ distance_2city(city_list[i2] city_list[k])
- distance_2city(city_list[k] city_list[k2])
+ distance_2city(city_list[i] city_list[k2])
return delta
# 更新Delta
def Update(i k route) :
‘‘‘
小编注:这是一个计算每次领域动作后路径长度改变值的小优化,在测试中我们暂时
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 7738 2020-11-27 13:02 python tsp\ILS TSP.py
文件 2479 2020-11-27 13:02 python tsp\SA TSP.py
文件 6965 2020-11-27 13:02 python tsp\TS TSP.py
相关资源
- Pillow安装包
- 精通Django
- 人脸识别正样本图片库
- vocab.txt词典
- 米字格.pdf
- 飞机大战素材
- caffe学习笔记1-7-完整版-薛开宇
- 2017高职大数据赛真题及参考答案
- Odoo10.0中文开发手册2017
- Django Web开发指南源码
- PC端完整版商城模板在线商城静态页面
- pyecharts中文教程
- pynq-z2_boardfiles.zip
- numpy中文文档
- 爬取喜马拉雅音频.zip
- 计算机专业本科毕设选题探讨
- 辛星tkinter教程第二版-最新完整版
- 2014年辛星Django教程第一版
- 新浪微博爬虫功能包括爬取用户信息
- PyInstaller-3.5-py2.py3-none-any.whl
- class48.ui
- 蚁群算法解决vrp问题
- 基于twitter文本的pyhton情感分析所有源
- QT调用PCAN第三方库实现的上位机,亲
- rancher2.0Docker自动化部署
- pandas-1.0.1-cp38-cp38-win_amd64.whl
- django与websocket创建简易聊天室
- JESD209-4-1_LPDDR4X协议.rar
- 格斗游戏完整demo源码及资源
- kaggle比赛titanic数据集
评论
共有 条评论