由于TSP问题数据类型多样,储存方式、评价指标多样,因此想成功加载所有数据需要写较多逻辑。本项目就解决了这个问题。我还封装了类来简化使用。 项目配合写了latex小论文
代码
代码地址
https://github.com/LT1st/System_engineering_programm/tree/master/code
项目地址
https://github.com/LT1st/System_engineering_programm
from dataloader.Dataloader_for_TSP_datasets import TSP_DATA
from dataloader.load_TSP_from_floder import get_all_TSP_and_ATSP_in_floder
from collection.SA import SA
from collection.PSO import PSO
from collection.TS import TS
from dataloader.DP import DP
from visualization.from_matrix import from_matrix,root_from_list
samples,samples_atsp = get_all_TSP_and_ATSP_in_floder()
from dataloader.get_best_solution import get_best_result_from_web
samples_name_list = []
SA_dict = {}
DP_dict = {}
PSO_dict = {}
TS_dict = {}
for sample in samples:
data = TSP_DATA(sample)
print(data.NAME,"successful",data.EDGE_WEIGHT_TYPE)
samples_name_list.append(data.NAME)
model = SA(num_city = data.DIMENSION , mat = data.matrix)
path, path_len = model.run()
SA_dict[data.NAME] = path_len
model = DP(num_city=data.DIMENSION, num_total=25, iteration=500, data=data.matrix)
path, path_len = model.run()
DP_dict[data.NAME] = path_len
model = PSO(num_city = data.DIMENSION , mat = data.matrix)
path, path_len = model.run()
PSO_dict[data.NAME] = path_len
model = TS(num_city = data.DIMENSION , mat = data.matrix)
path, path_len = model.run()
TS_dict[data.NAME] = path_len
get_best_result_from_web()
详细看readme.md
代码说明
- 算法设计阶段使用了jupyter notenook,请开启服务后打开文件。同时也提供线上运行环境,论文中会给出colab连接。
- 工程化实现使用python类和包结构
- 🚀 所有代码存放在 code 文件夹下
🌟main.py
主文件
🌟dataloader
Dataloader_for_TSP(ATSP)_datasets 好用的数据集的加载器
- 提供了用于TSP数据集的加载器TSP_DATA,能适用于大多数TSP测试样例。
- 目前网络上代码仅能适用于固定长度的测试样例,非常原始。本项目中的TSP_DATA类能根据数据表头自动获取数据类型、计算方式等信息。
- 可同时根据数据集变化,动态需求计算邻接矩阵和邻接表,保存在类内变量中
- 可自动访问网络,获取各测试样例当前最优值,比较算法精度
- 通过全局变量和修饰器获取数据加载、计算耗时
- 自动数据集下载脚本,运行既获取
🌟Visualization 提供了数据可视化
- 利用networkx库,解决了大多数TSP测试样例未提供坐标,无法可视化的问题
- 根据加载器类TSP_DATA返回可视化数据,数据接口无需调整
🌟collection 算法合集
- TSP求解算法。由于时间有限,又想测试尽可能多的算法,因此使用了部分网络开源代码
🌟my_algorithm 算法合集
存放我的开源pip库:官方网站
🌟测试函数时间跨文件测量
测量函数运行时间,用于后续训练
== 本项目用于2022春季学期课程设计 ==
- 算法实现语言:Python
- 写作:LaTex
- 论文编译器:Overleaf
- 思维导图笔记:Xmind
- 文献管理:Zeotero
- 开源项目地址:@Github
- 开源库地址:@Pypi
文件结构
BUG
代码说明
- 算法设计阶段使用了jupyter notenook,请开启服务后打开文件。同时也提供线上运行环境,论文中会给出colab连接。
- 工程化实现使用python类和包结构
- 🚀 所有代码存放在 code 文件夹下
🌟dataloader
Dataloader_for_TSP(ATSP)_datasets 好用的数据集的加载器
- 提供了用于TSP数据集的加载器TSP_DATA,能适用于大多数TSP测试样例。
- 目前网络上代码仅能适用于固定长度的测试样例,非常原始。本项目中的TSP_DATA类能根据数据表头自动获取数据类型、计算方式等信息。
- 可同时根据数据集变化,动态需求计算邻接矩阵和邻接表,保存在类内变量中
- 可自动访问网络,获取各测试样例当前最优值,比较算法精度
- 通过全局变量和修饰器获取数据加载、计算耗时
- 自动数据集下载脚本,运行既获取
🌟Visualization 提供了数据可视化
- 利用networkx库,解决了大多数TSP测试样例未提供坐标,无法可视化的问题
- 根据加载器类TSP_DATA返回可视化数据,数据接口无需调整
🌟collection 算法合集
- TSP求解算法。由于时间有限,又想测试尽可能多的算法,因此使用了部分网络开源代码
🌟my_algorithm 算法合集
存放我的开源pip库:官方网站
🌟测试函数时间跨文件测量
测量函数运行时间,用于后续训练
使用方法
::在控制台输入安装
pip install -i https://test.pypi.org/simple/ TSP-dataloader
维护方法
- 改版本号,维护setup.py
- 打包
::在控制台输入
python setup.py sdist bdist_wheel
- 上传到测试环境
::在控制台输入 当前文件夹路径与setpy.py一致
python -m twine upload --repository testpypi dist/*
::使用测试环境
python -m pip install --index-url https://test.pypi.org/simple/ --no-deps example-pkg-YOUR-USERNAME
- 发布正式包
python -m twine upload --repository testpypi dist/* -u __token__ -p pypi-密码在qq收藏备份 --verbose
This is an implementation of TSP dataloader.
Features
- All test samples available.
- Download sample automatically.
- Get best solution on web.
- Convert to adjacence matrix, adjacence table, coordinate table.
- Easily visualizing for all kinks of data.
- DEMO for SOM, GA, TS, etc.
Attention
- Larage DIMENSION will cause memory leak.
How to use
1. Get a TSP_DATA class
Chose a method to get a $TSP_DATA class $ at first. Use
g
e
t
a
l
l
T
S
P
a
n
d
A
T
S
P
i
n
f
l
o
d
e
r
(
)
get_all_TSP_and_ATSP_in_floder()
geta?llT?SPa?ndA?TSPi?nf?loder() to get all atsp and tsp file path in a floder.
import TSP_dataloader as DL
tsp_files , atsp_files = get_all_TSP_and_ATSP_in_floder("Your dataset floder here")
for tsp_file in tsp_files:
data_class = DL.TSP_load("Your simgle TSP file path here")
Use
T
S
P
l
o
a
d
(
)
TSP_load()
TSPl?oad() to get a single
T
S
P
D
A
T
A
TSP_DATA
TSPD?ATA class.
import TSP_dataloader as DL
data_class = DL.TSP_load("Your simgle TSP file path here")
Use $TSP_DATA class $ directly.
import TSP_dataloader as TSP_DATA
data_class = TSP_DATA("Your simgle TSP file path here")
2. What TSP_DATA class offers
Get adjacency matrix.
data_class.get_matrix()
Get adjacency table.
data_class.get_table()
Get coorodinate list.
data_class.get_coorodinate_list()
Basic elements.
类内变量:
必有:
self.NAME 测试样例名称
self.TYPE 测试样例类型 TSP ATSP
self.DIMENSION. 维度
self.EDGE_WEIGHT_TYPE 边权值计算方式 决定读取方式
self.matrix 矩阵形式数据
self.table . 邻接表形式数据
可能有:
self.EDGE_WEIGHT_FORMAT
self.EDGE_DATA_FORMAT
self.NODE_COORD_TYPE required if EDGE_WEIGHT_TYPE is not WeightKind::Explicit
3. Tst some alogrithm
from TSP_dataloader import SOM,DP,SA
samples = get_all_TSP_and_ATSP_in_floder()
samples_name_list = []
SOM_dict = {}
SA_dict = {}
DP_dict = {}
# go through
for sample in samples:
data = TSP_DATA(sample)
samples_name_list.append(data.NAME)
model = SOM(num_city=data.DIMENSION, data=data.matrix)
path, path_len = model.run()
SOM_dict[data.NAME] = path_len
model = SA(num_city = data.DIMENSION , mat = data.matrix)
path, path_len = model.run()
SA_dict[data.NAME] = path_len
model = DP(num_city = data.DIMENSION , mat = data.matrix)
path, path_len = model.run()
DP_dict[data.NAME] = path_len
4. Try some ADVANCED method
alternative input to make load quicker
def TSP_load(path, requireTable=True, requireMatrix=True, load_now =True):
"""传入单个数据地址,读取并且加载数据的表头
path:
单个测试样例的数据地址
requireTable:
需要邻接表?
requireMatrix:
需要邻接矩阵?
"""
check if the matrix is summetry.
data_class.check_if_summetry(matrix_to_be_checked)
Get best result from web. Return a dict indexed by NAME.
data_class.dict_best_result = get_best_result_from_web()
Convert ATSP to TSP.
data_class.ATSP2TSP_np()
check if any inner-class variable wrong
data_class.check_if_reasonable()
TODO
其他文件夹
- 记录课程的开题、中期、答辩。使用
L
a
t
e
x
Latex
Latex编写。
- 存放数据集
- 记录加载报错的测试样例(主要是由于维度过高,内存溢出)
|