722 lines
92 KiB
Plaintext
722 lines
92 KiB
Plaintext
![]() |
{
|
||
|
"cells": [
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 1,
|
||
|
"metadata": {},
|
||
|
"outputs": [
|
||
|
{
|
||
|
"name": "stdout",
|
||
|
"output_type": "stream",
|
||
|
"text": [
|
||
|
"['CHN144.tsp', 'eil101.tsp', 'eil76.tsp', 'GR96.tsp', 'PBK411.tsp', 'PR76.tsp', 'RBU737.tsp', 'ulysses16.tsp', 'ulysses8.tsp', 'XIT1083.tsp']\n"
|
||
|
]
|
||
|
}
|
||
|
],
|
||
|
"source": [
|
||
|
"import os\n",
|
||
|
"import numpy as np\n",
|
||
|
"import time\n",
|
||
|
"import matplotlib.pyplot as plt\n",
|
||
|
"import pandas as pd\n",
|
||
|
"from tsp_algo import *\n",
|
||
|
"\n",
|
||
|
"# 获取tsp_data目录下所有tsp文件\n",
|
||
|
"data_dir = \"C:/Users/Lenovo/Desktop/LEAD/\"\n",
|
||
|
"data_dir2 = \"C:/Users/Lenovo/Desktop/LEAD/tsp_data/data/\"\n",
|
||
|
"test_files = [f for f in os.listdir(data_dir2) if f.endswith('tsp')]\n",
|
||
|
"print(test_files)\n",
|
||
|
"\n",
|
||
|
"# 定义评估函数\n",
|
||
|
"def evaluate_tsp(tsp_func, distances):\n",
|
||
|
" \"\"\"评估TSP算法的性能\"\"\"\n",
|
||
|
" try:\n",
|
||
|
" # 计时并执行TSP\n",
|
||
|
" start_time = time.time()\n",
|
||
|
" path = tsp_func(distances)\n",
|
||
|
" end_time = time.time()\n",
|
||
|
" execution_time = end_time - start_time\n",
|
||
|
" \n",
|
||
|
" # 计算路径长度\n",
|
||
|
" total_distance = 0\n",
|
||
|
" n = len(distances)\n",
|
||
|
" for i in range(n):\n",
|
||
|
" total_distance += distances[path[i]][path[(i+1)%n]]\n",
|
||
|
" \n",
|
||
|
" print(f\"执行时间:{execution_time:.4f}秒, 路径长度:{total_distance:.2f}\")\n",
|
||
|
" return total_distance, execution_time\n",
|
||
|
" \n",
|
||
|
" except Exception as e:\n",
|
||
|
" print(f\"评估过程出错: {str(e)}\")\n",
|
||
|
" return float('inf'), float('inf')\n",
|
||
|
"\n",
|
||
|
"# 定义数据加载函数 \n",
|
||
|
"def load_tsp_data(filename):\n",
|
||
|
" \"\"\"读取TSP问题数据\"\"\"\n",
|
||
|
" try:\n",
|
||
|
" cities = []\n",
|
||
|
" filepath = os.path.join(data_dir2, filename)\n",
|
||
|
" with open(filepath, 'r') as f:\n",
|
||
|
" reading_coords = False\n",
|
||
|
" for line in f:\n",
|
||
|
" if line.strip() == \"NODE_COORD_SECTION\":\n",
|
||
|
" reading_coords = True\n",
|
||
|
" continue\n",
|
||
|
" if line.strip() == \"EOF\":\n",
|
||
|
" break\n",
|
||
|
" if reading_coords:\n",
|
||
|
" parts = line.strip().split()\n",
|
||
|
" if len(parts) == 3:\n",
|
||
|
" x, y = float(parts[1]), float(parts[2])\n",
|
||
|
" cities.append((x, y))\n",
|
||
|
" \n",
|
||
|
" # 计算距离矩阵\n",
|
||
|
" n = len(cities)\n",
|
||
|
" distances = np.zeros((n, n))\n",
|
||
|
" for i in range(n):\n",
|
||
|
" for j in range(n):\n",
|
||
|
" if i != j:\n",
|
||
|
" distances[i,j] = np.sqrt((cities[i][0] - cities[j][0])**2 + \n",
|
||
|
" (cities[i][1] - cities[j][1])**2)\n",
|
||
|
" \n",
|
||
|
" return distances\n",
|
||
|
" \n",
|
||
|
" except Exception as e:\n",
|
||
|
" print(f\"读取数据出错: {str(e)}\")\n",
|
||
|
" return None"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 3,
|
||
|
"metadata": {},
|
||
|
"outputs": [
|
||
|
{
|
||
|
"name": "stdout",
|
||
|
"output_type": "stream",
|
||
|
"text": [
|
||
|
"\n",
|
||
|
"测试实例: CHN144.tsp\n",
|
||
|
"\n",
|
||
|
"使用算法: 贪心算法\n",
|
||
|
"执行时间:0.0027秒, 路径长度:35884.30\n",
|
||
|
"\n",
|
||
|
"使用算法: 最近邻算法\n",
|
||
|
"执行时间:0.0025秒, 路径长度:35884.30\n",
|
||
|
"\n",
|
||
|
"使用算法: 插入法\n",
|
||
|
"执行时间:0.3583秒, 路径长度:35048.39\n",
|
||
|
"\n",
|
||
|
"使用算法: EoH-TSP\n",
|
||
|
"执行时间:0.1682秒, 路径长度:35884.30\n",
|
||
|
"\n",
|
||
|
"使用算法: AAD-TSP\n",
|
||
|
"执行时间:0.2880秒, 路径长度:33158.55\n",
|
||
|
"\n",
|
||
|
"测试实例: eil101.tsp\n",
|
||
|
"\n",
|
||
|
"使用算法: 贪心算法\n",
|
||
|
"执行时间:0.0010秒, 路径长度:825.24\n",
|
||
|
"\n",
|
||
|
"使用算法: 最近邻算法\n",
|
||
|
"执行时间:0.0010秒, 路径长度:825.24\n",
|
||
|
"\n",
|
||
|
"使用算法: 插入法\n",
|
||
|
"执行时间:0.1078秒, 路径长度:702.96\n",
|
||
|
"\n",
|
||
|
"使用算法: EoH-TSP\n",
|
||
|
"执行时间:0.0958秒, 路径长度:847.59\n",
|
||
|
"\n",
|
||
|
"使用算法: AAD-TSP\n",
|
||
|
"执行时间:0.1752秒, 路径长度:687.45\n",
|
||
|
"\n",
|
||
|
"测试实例: eil76.tsp\n",
|
||
|
"\n",
|
||
|
"使用算法: 贪心算法\n",
|
||
|
"执行时间:0.0010秒, 路径长度:711.99\n",
|
||
|
"\n",
|
||
|
"使用算法: 最近邻算法\n",
|
||
|
"执行时间:0.0010秒, 路径长度:711.99\n",
|
||
|
"\n",
|
||
|
"使用算法: 插入法\n",
|
||
|
"执行时间:0.0435秒, 路径长度:612.39\n",
|
||
|
"\n",
|
||
|
"使用算法: EoH-TSP\n",
|
||
|
"执行时间:0.0683秒, 路径长度:669.24\n",
|
||
|
"\n",
|
||
|
"使用算法: AAD-TSP\n",
|
||
|
"执行时间:0.1143秒, 路径长度:622.71\n",
|
||
|
"\n",
|
||
|
"测试实例: GR96.tsp\n",
|
||
|
"\n",
|
||
|
"使用算法: 贪心算法\n",
|
||
|
"执行时间:0.0010秒, 路径长度:707.09\n",
|
||
|
"\n",
|
||
|
"使用算法: 最近邻算法\n",
|
||
|
"执行时间:0.0020秒, 路径长度:707.09\n",
|
||
|
"\n",
|
||
|
"使用算法: 插入法\n",
|
||
|
"执行时间:0.0917秒, 路径长度:651.44\n",
|
||
|
"\n",
|
||
|
"使用算法: EoH-TSP\n",
|
||
|
"执行时间:0.0962秒, 路径长度:707.09\n",
|
||
|
"\n",
|
||
|
"使用算法: AAD-TSP\n",
|
||
|
"执行时间:0.2169秒, 路径长度:623.53\n",
|
||
|
"\n",
|
||
|
"测试实例: PBK411.tsp\n",
|
||
|
"\n",
|
||
|
"使用算法: 贪心算法\n",
|
||
|
"执行时间:0.0169秒, 路径长度:1838.48\n",
|
||
|
"\n",
|
||
|
"使用算法: 最近邻算法\n",
|
||
|
"执行时间:0.0170秒, 路径长度:1838.48\n",
|
||
|
"\n",
|
||
|
"使用算法: 插入法\n",
|
||
|
"执行时间:7.6995秒, 路径长度:1602.35\n",
|
||
|
"\n",
|
||
|
"使用算法: EoH-TSP\n",
|
||
|
"执行时间:0.9340秒, 路径长度:1835.85\n",
|
||
|
"\n",
|
||
|
"使用算法: AAD-TSP\n",
|
||
|
"执行时间:5.2911秒, 路径长度:1554.96\n",
|
||
|
"\n",
|
||
|
"测试实例: PR76.tsp\n",
|
||
|
"\n",
|
||
|
"使用算法: 贪心算法\n",
|
||
|
"执行时间:0.0010秒, 路径长度:153461.92\n",
|
||
|
"\n",
|
||
|
"使用算法: 最近邻算法\n",
|
||
|
"执行时间:0.0000秒, 路径长度:153461.92\n",
|
||
|
"\n",
|
||
|
"使用算法: 插入法\n",
|
||
|
"执行时间:0.0439秒, 路径长度:125936.21\n",
|
||
|
"\n",
|
||
|
"使用算法: EoH-TSP\n",
|
||
|
"执行时间:0.0671秒, 路径长度:145300.57\n",
|
||
|
"\n",
|
||
|
"使用算法: AAD-TSP\n",
|
||
|
"执行时间:0.1271秒, 路径长度:111623.46\n",
|
||
|
"\n",
|
||
|
"测试实例: RBU737.tsp\n",
|
||
|
"\n",
|
||
|
"使用算法: 贪心算法\n",
|
||
|
"执行时间:0.0544秒, 路径长度:4416.15\n",
|
||
|
"\n",
|
||
|
"使用算法: 最近邻算法\n",
|
||
|
"执行时间:0.0544秒, 路径长度:4416.15\n",
|
||
|
"\n",
|
||
|
"使用算法: 插入法\n",
|
||
|
"执行时间:44.8784秒, 路径长度:4097.20\n",
|
||
|
"\n",
|
||
|
"使用算法: EoH-TSP\n",
|
||
|
"执行时间:2.6006秒, 路径长度:4436.28\n",
|
||
|
"\n",
|
||
|
"使用算法: AAD-TSP\n",
|
||
|
"执行时间:29.6802秒, 路径长度:3870.50\n",
|
||
|
"\n",
|
||
|
"测试实例: ulysses16.tsp\n",
|
||
|
"\n",
|
||
|
"使用算法: 贪心算法\n",
|
||
|
"执行时间:0.0000秒, 路径长度:104.73\n",
|
||
|
"\n",
|
||
|
"使用算法: 最近邻算法\n",
|
||
|
"执行时间:0.0000秒, 路径长度:104.73\n",
|
||
|
"\n",
|
||
|
"使用算法: 插入法\n",
|
||
|
"执行时间:0.0015秒, 路径长度:79.39\n",
|
||
|
"\n",
|
||
|
"使用算法: EoH-TSP\n",
|
||
|
"执行时间:0.0131秒, 路径长度:83.79\n",
|
||
|
"\n",
|
||
|
"使用算法: AAD-TSP\n",
|
||
|
"执行时间:0.0314秒, 路径长度:74.00\n",
|
||
|
"\n",
|
||
|
"测试实例: ulysses8.tsp\n",
|
||
|
"\n",
|
||
|
"使用算法: 贪心算法\n",
|
||
|
"执行时间:0.0000秒, 路径长度:38.48\n",
|
||
|
"\n",
|
||
|
"使用算法: 最近邻算法\n",
|
||
|
"执行时间:0.0000秒, 路径长度:38.48\n",
|
||
|
"\n",
|
||
|
"使用算法: 插入法\n",
|
||
|
"执行时间:0.0000秒, 路径长度:37.83\n",
|
||
|
"\n",
|
||
|
"使用算法: EoH-TSP\n",
|
||
|
"执行时间:0.0076秒, 路径长度:38.48\n",
|
||
|
"\n",
|
||
|
"使用算法: AAD-TSP\n",
|
||
|
"执行时间:0.0216秒, 路径长度:37.83\n",
|
||
|
"\n",
|
||
|
"测试实例: XIT1083.tsp\n",
|
||
|
"\n",
|
||
|
"使用算法: 贪心算法\n",
|
||
|
"执行时间:0.1163秒, 路径长度:4584.27\n",
|
||
|
"\n",
|
||
|
"使用算法: 最近邻算法\n",
|
||
|
"执行时间:0.1150秒, 路径长度:4584.27\n",
|
||
|
"\n",
|
||
|
"使用算法: 插入法\n",
|
||
|
"执行时间:146.8186秒, 路径长度:4328.99\n",
|
||
|
"\n",
|
||
|
"使用算法: EoH-TSP\n",
|
||
|
"执行时间:5.4694秒, 路径长度:4673.87\n",
|
||
|
"\n",
|
||
|
"使用算法: AAD-TSP\n",
|
||
|
"执行时间:89.6922秒, 路径长度:4051.52\n",
|
||
|
"\n",
|
||
|
"所有算法在各个实例上的表现:\n",
|
||
|
"\n",
|
||
|
"贪心算法:\n",
|
||
|
" CHN144.tsp: 路径长度 = 35884.30\n",
|
||
|
" eil101.tsp: 路径长度 = 825.24\n",
|
||
|
" eil76.tsp: 路径长度 = 711.99\n",
|
||
|
" GR96.tsp: 路径长度 = 707.09\n",
|
||
|
" PBK411.tsp: 路径长度 = 1838.48\n",
|
||
|
" PR76.tsp: 路径长度 = 153461.92\n",
|
||
|
" RBU737.tsp: 路径长度 = 4416.15\n",
|
||
|
" ulysses16.tsp: 路径长度 = 104.73\n",
|
||
|
" ulysses8.tsp: 路径长度 = 38.48\n",
|
||
|
" XIT1083.tsp: 路径长度 = 4584.27\n",
|
||
|
" CHN144.tsp: 执行时间 = 0.0027秒\n",
|
||
|
" eil101.tsp: 执行时间 = 0.0010秒\n",
|
||
|
" eil76.tsp: 执行时间 = 0.0010秒\n",
|
||
|
" GR96.tsp: 执行时间 = 0.0010秒\n",
|
||
|
" PBK411.tsp: 执行时间 = 0.0169秒\n",
|
||
|
" PR76.tsp: 执行时间 = 0.0010秒\n",
|
||
|
" RBU737.tsp: 执行时间 = 0.0544秒\n",
|
||
|
" ulysses16.tsp: 执行时间 = 0.0000秒\n",
|
||
|
" ulysses8.tsp: 执行时间 = 0.0000秒\n",
|
||
|
" XIT1083.tsp: 执行时间 = 0.1163秒\n",
|
||
|
"\n",
|
||
|
"最近邻算法:\n",
|
||
|
" CHN144.tsp: 路径长度 = 35884.30\n",
|
||
|
" eil101.tsp: 路径长度 = 825.24\n",
|
||
|
" eil76.tsp: 路径长度 = 711.99\n",
|
||
|
" GR96.tsp: 路径长度 = 707.09\n",
|
||
|
" PBK411.tsp: 路径长度 = 1838.48\n",
|
||
|
" PR76.tsp: 路径长度 = 153461.92\n",
|
||
|
" RBU737.tsp: 路径长度 = 4416.15\n",
|
||
|
" ulysses16.tsp: 路径长度 = 104.73\n",
|
||
|
" ulysses8.tsp: 路径长度 = 38.48\n",
|
||
|
" XIT1083.tsp: 路径长度 = 4584.27\n",
|
||
|
" CHN144.tsp: 执行时间 = 0.0025秒\n",
|
||
|
" eil101.tsp: 执行时间 = 0.0010秒\n",
|
||
|
" eil76.tsp: 执行时间 = 0.0010秒\n",
|
||
|
" GR96.tsp: 执行时间 = 0.0020秒\n",
|
||
|
" PBK411.tsp: 执行时间 = 0.0170秒\n",
|
||
|
" PR76.tsp: 执行时间 = 0.0000秒\n",
|
||
|
" RBU737.tsp: 执行时间 = 0.0544秒\n",
|
||
|
" ulysses16.tsp: 执行时间 = 0.0000秒\n",
|
||
|
" ulysses8.tsp: 执行时间 = 0.0000秒\n",
|
||
|
" XIT1083.tsp: 执行时间 = 0.1150秒\n",
|
||
|
"\n",
|
||
|
"插入法:\n",
|
||
|
" CHN144.tsp: 路径长度 = 35048.39\n",
|
||
|
" eil101.tsp: 路径长度 = 702.96\n",
|
||
|
" eil76.tsp: 路径长度 = 612.39\n",
|
||
|
" GR96.tsp: 路径长度 = 651.44\n",
|
||
|
" PBK411.tsp: 路径长度 = 1602.35\n",
|
||
|
" PR76.tsp: 路径长度 = 125936.21\n",
|
||
|
" RBU737.tsp: 路径长度 = 4097.20\n",
|
||
|
" ulysses16.tsp: 路径长度 = 79.39\n",
|
||
|
" ulysses8.tsp: 路径长度 = 37.83\n",
|
||
|
" XIT1083.tsp: 路径长度 = 4328.99\n",
|
||
|
" CHN144.tsp: 执行时间 = 0.3583秒\n",
|
||
|
" eil101.tsp: 执行时间 = 0.1078秒\n",
|
||
|
" eil76.tsp: 执行时间 = 0.0435秒\n",
|
||
|
" GR96.tsp: 执行时间 = 0.0917秒\n",
|
||
|
" PBK411.tsp: 执行时间 = 7.6995秒\n",
|
||
|
" PR76.tsp: 执行时间 = 0.0439秒\n",
|
||
|
" RBU737.tsp: 执行时间 = 44.8784秒\n",
|
||
|
" ulysses16.tsp: 执行时间 = 0.0015秒\n",
|
||
|
" ulysses8.tsp: 执行时间 = 0.0000秒\n",
|
||
|
" XIT1083.tsp: 执行时间 = 146.8186秒\n",
|
||
|
"\n",
|
||
|
"EoH-TSP:\n",
|
||
|
" CHN144.tsp: 路径长度 = 35884.30\n",
|
||
|
" eil101.tsp: 路径长度 = 847.59\n",
|
||
|
" eil76.tsp: 路径长度 = 669.24\n",
|
||
|
" GR96.tsp: 路径长度 = 707.09\n",
|
||
|
" PBK411.tsp: 路径长度 = 1835.85\n",
|
||
|
" PR76.tsp: 路径长度 = 145300.57\n",
|
||
|
" RBU737.tsp: 路径长度 = 4436.28\n",
|
||
|
" ulysses16.tsp: 路径长度 = 83.79\n",
|
||
|
" ulysses8.tsp: 路径长度 = 38.48\n",
|
||
|
" XIT1083.tsp: 路径长度 = 4673.87\n",
|
||
|
" CHN144.tsp: 执行时间 = 0.1682秒\n",
|
||
|
" eil101.tsp: 执行时间 = 0.0958秒\n",
|
||
|
" eil76.tsp: 执行时间 = 0.0683秒\n",
|
||
|
" GR96.tsp: 执行时间 = 0.0962秒\n",
|
||
|
" PBK411.tsp: 执行时间 = 0.9340秒\n",
|
||
|
" PR76.tsp: 执行时间 = 0.0671秒\n",
|
||
|
" RBU737.tsp: 执行时间 = 2.6006秒\n",
|
||
|
" ulysses16.tsp: 执行时间 = 0.0131秒\n",
|
||
|
" ulysses8.tsp: 执行时间 = 0.0076秒\n",
|
||
|
" XIT1083.tsp: 执行时间 = 5.4694秒\n",
|
||
|
"\n",
|
||
|
"AAD-TSP:\n",
|
||
|
" CHN144.tsp: 路径长度 = 33158.55\n",
|
||
|
" eil101.tsp: 路径长度 = 687.45\n",
|
||
|
" eil76.tsp: 路径长度 = 622.71\n",
|
||
|
" GR96.tsp: 路径长度 = 623.53\n",
|
||
|
" PBK411.tsp: 路径长度 = 1554.96\n",
|
||
|
" PR76.tsp: 路径长度 = 111623.46\n",
|
||
|
" RBU737.tsp: 路径长度 = 3870.50\n",
|
||
|
" ulysses16.tsp: 路径长度 = 74.00\n",
|
||
|
" ulysses8.tsp: 路径长度 = 37.83\n",
|
||
|
" XIT1083.tsp: 路径长度 = 4051.52\n",
|
||
|
" CHN144.tsp: 执行时间 = 0.2880秒\n",
|
||
|
" eil101.tsp: 执行时间 = 0.1752秒\n",
|
||
|
" eil76.tsp: 执行时间 = 0.1143秒\n",
|
||
|
" GR96.tsp: 执行时间 = 0.2169秒\n",
|
||
|
" PBK411.tsp: 执行时间 = 5.2911秒\n",
|
||
|
" PR76.tsp: 执行时间 = 0.1271秒\n",
|
||
|
" RBU737.tsp: 执行时间 = 29.6802秒\n",
|
||
|
" ulysses16.tsp: 执行时间 = 0.0314秒\n",
|
||
|
" ulysses8.tsp: 执行时间 = 0.0216秒\n",
|
||
|
" XIT1083.tsp: 执行时间 = 89.6922秒\n",
|
||
|
"\n",
|
||
|
"各算法在不同实例上的路径长度:\n",
|
||
|
" 贪心算法 最近邻算法 插入法 EoH-TSP AAD-TSP\n",
|
||
|
"CHN144 35884.30 35884.30 35048.39 35884.30 33158.55\n",
|
||
|
"eil101 825.24 825.24 702.96 847.59 687.45\n",
|
||
|
"eil76 711.99 711.99 612.39 669.24 622.71\n",
|
||
|
"GR96 707.09 707.09 651.44 707.09 623.53\n",
|
||
|
"PBK411 1838.48 1838.48 1602.35 1835.85 1554.96\n",
|
||
|
"PR76 153461.92 153461.92 125936.21 145300.57 111623.46\n",
|
||
|
"RBU737 4416.15 4416.15 4097.20 4436.28 3870.50\n",
|
||
|
"ulysses16 104.73 104.73 79.39 83.79 74.00\n",
|
||
|
"ulysses8 38.48 38.48 37.83 38.48 37.83\n",
|
||
|
"XIT1083 4584.27 4584.27 4328.99 4673.87 4051.52\n",
|
||
|
"\n",
|
||
|
"各算法在不同实例上的运行时长:\n",
|
||
|
" 贪心算法 最近邻算法 插入法 EoH-TSP AAD-TSP\n",
|
||
|
"CHN144 0.0027 0.0025 0.3583 0.1682 0.2880\n",
|
||
|
"eil101 0.0010 0.0010 0.1078 0.0958 0.1752\n",
|
||
|
"eil76 0.0010 0.0010 0.0435 0.0683 0.1143\n",
|
||
|
"GR96 0.0010 0.0020 0.0917 0.0962 0.2169\n",
|
||
|
"PBK411 0.0169 0.0170 7.6995 0.9340 5.2911\n",
|
||
|
"PR76 0.0010 0.0000 0.0439 0.0671 0.1271\n",
|
||
|
"RBU737 0.0544 0.0544 44.8784 2.6006 29.6802\n",
|
||
|
"ulysses16 0.0000 0.0000 0.0015 0.0131 0.0314\n",
|
||
|
"ulysses8 0.0000 0.0000 0.0000 0.0076 0.0216\n",
|
||
|
"XIT1083 0.1163 0.1150 146.8186 5.4694 89.6922\n"
|
||
|
]
|
||
|
}
|
||
|
],
|
||
|
"source": [
|
||
|
"\n",
|
||
|
"# 用于存储每个算法在每个实例上的结果 \n",
|
||
|
"results = {}\n",
|
||
|
"results_time = {}\n",
|
||
|
"\n",
|
||
|
"# 遍历每个测试实例\n",
|
||
|
"for test_file in test_files:\n",
|
||
|
" print(f\"\\n测试实例: {test_file}\")\n",
|
||
|
" \n",
|
||
|
" # 加载数据\n",
|
||
|
" distances = load_tsp_data(test_file)\n",
|
||
|
" if distances is None:\n",
|
||
|
" continue\n",
|
||
|
" \n",
|
||
|
" # 这里可以添加多个待评估的TSP算法\n",
|
||
|
" algorithms = {\n",
|
||
|
" \"贪心算法\": greedy_tsp,\n",
|
||
|
" \"最近邻算法\": nearest_neighbor_tsp,\n",
|
||
|
" \"插入法\": insertion_tsp,\n",
|
||
|
" # \"tsp_01\": tsp_01,\n",
|
||
|
" \"EoH-TSP\": tsp_02,\n",
|
||
|
" \"AAD-TSP\": tsp_04,\n",
|
||
|
" }\n",
|
||
|
" \n",
|
||
|
" # 评估每个算法\n",
|
||
|
" for alg_name, alg_func in algorithms.items():\n",
|
||
|
" print(f\"\\n使用算法: {alg_name}\")\n",
|
||
|
" score, etime = evaluate_tsp(alg_func, distances)\n",
|
||
|
" \n",
|
||
|
" if alg_name not in results:\n",
|
||
|
" results[alg_name] = {}\n",
|
||
|
" if alg_name not in results_time:\n",
|
||
|
" results_time[alg_name] = {}\n",
|
||
|
" results[alg_name][test_file] = score\n",
|
||
|
" results_time[alg_name][test_file] = etime\n",
|
||
|
"\n",
|
||
|
"# 打印总结果\n",
|
||
|
"print(\"\\n所有算法在各个实例上的表现:\")\n",
|
||
|
"for alg_name, scores in results.items():\n",
|
||
|
" print(f\"\\n{alg_name}:\")\n",
|
||
|
" for test_file, score in scores.items():\n",
|
||
|
" print(f\" {test_file}: 路径长度 = {score:.2f}\")\n",
|
||
|
" for test_file, etime in results_time[alg_name].items():\n",
|
||
|
" print(f\" {test_file}: 执行时间 = {etime:.4f}秒\")\n",
|
||
|
"\n",
|
||
|
"# 将结果整理成表格\n",
|
||
|
"data = {}\n",
|
||
|
"for test_file in test_files:\n",
|
||
|
" instance_name = test_file.replace('.tsp', '')\n",
|
||
|
" data[instance_name] = {}\n",
|
||
|
" for alg_name in results:\n",
|
||
|
" if test_file in results[alg_name]:\n",
|
||
|
" data[instance_name][alg_name] = results[alg_name][test_file]\n",
|
||
|
"\n",
|
||
|
"# 将运行时间整理成表格\n",
|
||
|
"data_time = {}\n",
|
||
|
"for test_file in test_files:\n",
|
||
|
" instance_name = test_file.replace('.tsp', '')\n",
|
||
|
" data_time[instance_name] = {}\n",
|
||
|
" for alg_name in results_time:\n",
|
||
|
" if test_file in results_time[alg_name]:\n",
|
||
|
" data_time[instance_name][alg_name] = results_time[alg_name][test_file]\n",
|
||
|
"\n",
|
||
|
"import random\n",
|
||
|
"\n",
|
||
|
"# 转换为DataFrame\n",
|
||
|
"df_results = pd.DataFrame(data).T\n",
|
||
|
"df_time = pd.DataFrame(data_time).T\n",
|
||
|
"\n",
|
||
|
"# 打印结果表格\n",
|
||
|
"print(\"\\n各算法在不同实例上的路径长度:\")\n",
|
||
|
"print(df_results.round(2)) # 路径长度保留2位小数\n",
|
||
|
"# 统计每个算法的运行时长\n",
|
||
|
"print(\"\\n各算法在不同实例上的运行时长:\")\n",
|
||
|
"print(df_time.round(4)) # 运行时间保留4位小数\n"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 4,
|
||
|
"metadata": {},
|
||
|
"outputs": [
|
||
|
{
|
||
|
"name": "stdout",
|
||
|
"output_type": "stream",
|
||
|
"text": [
|
||
|
"\n",
|
||
|
"各算法在不同实例上的路径长度:\n",
|
||
|
" 贪心算法 最近邻算法 插入法 EoH-TSP AAD-TSP\n",
|
||
|
"ulysses8 38.48 38.48 37.83 38.48 37.83\n",
|
||
|
"ulysses16 104.73 104.73 79.39 83.79 74.00\n",
|
||
|
"eil76 711.99 711.99 612.39 669.24 622.71\n",
|
||
|
"PR76 153461.92 153461.92 125936.21 145300.57 111623.46\n",
|
||
|
"GR96 707.09 707.09 651.44 707.09 623.53\n",
|
||
|
"eil101 825.24 825.24 702.96 847.59 687.45\n",
|
||
|
"CHN144 35884.30 35884.30 35048.39 35884.30 33158.55\n",
|
||
|
"PBK411 1838.48 1838.48 1602.35 1835.85 1554.96\n",
|
||
|
"RBU737 4416.15 4416.15 4097.20 4436.28 3870.50\n",
|
||
|
"XIT1083 4584.27 4584.27 4328.99 4673.87 4051.52\n",
|
||
|
"\n",
|
||
|
"各算法在不同实例上的运行时长:\n",
|
||
|
" 贪心算法 最近邻算法 插入法 EoH-TSP AAD-TSP\n",
|
||
|
"ulysses8 0.0000 0.0000 0.0000 0.0076 0.0216\n",
|
||
|
"ulysses16 0.0000 0.0000 0.0015 0.0131 0.0314\n",
|
||
|
"eil76 0.0010 0.0010 0.0435 0.0683 0.1143\n",
|
||
|
"PR76 0.0010 0.0000 0.0439 0.0671 0.1271\n",
|
||
|
"GR96 0.0010 0.0020 0.0917 0.0962 0.2169\n",
|
||
|
"eil101 0.0010 0.0010 0.1078 0.0958 0.1752\n",
|
||
|
"CHN144 0.0027 0.0025 0.3583 0.1682 0.2880\n",
|
||
|
"PBK411 0.0169 0.0170 7.6995 0.9340 5.2911\n",
|
||
|
"RBU737 0.0544 0.0544 44.8784 2.6006 29.6802\n",
|
||
|
"XIT1083 0.1163 0.1150 146.8186 5.4694 89.6922\n"
|
||
|
]
|
||
|
}
|
||
|
],
|
||
|
"source": [
|
||
|
"# 创建排序用的临时索引\n",
|
||
|
"temp_results_idx = pd.Index([int(''.join(filter(str.isdigit, idx))) for idx in df_results.index])\n",
|
||
|
"temp_time_idx = pd.Index([int(''.join(filter(str.isdigit, idx))) for idx in df_time.index])\n",
|
||
|
"\n",
|
||
|
"# 按数字排序但保留原始名称\n",
|
||
|
"df_results = df_results.iloc[temp_results_idx.argsort()]\n",
|
||
|
"df_time = df_time.iloc[temp_time_idx.argsort()]\n",
|
||
|
"\n",
|
||
|
"# 打印结果表格\n",
|
||
|
"print(\"\\n各算法在不同实例上的路径长度:\")\n",
|
||
|
"print(df_results.round(2)) # 路径长度保留2位小数\n",
|
||
|
"# 统计每个算法的运行时长 \n",
|
||
|
"print(\"\\n各算法在不同实例上的运行时长:\")\n",
|
||
|
"print(df_time.round(4)) # 运行时间保留4位小数"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 4,
|
||
|
"metadata": {},
|
||
|
"outputs": [
|
||
|
{
|
||
|
"data": {
|
||
|
"image/png": "iVBORw0KGgoAAAANSUhEUgAABJQAAANnCAYAAABnCwJ8AAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjEsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvc2/+5QAAAAlwSFlzAAAPYQAAD2EBqD+naQAAuopJREFUeJzs3QmcXfP9P/5PSIKIBLVrxK6prZZSS9A29iLUvkWoNZaSolpLtJQKWjtFqb1VVK2V2mqJrbXvEiK1UxJEhGT+j/fn+zvzv5nMTObMkrkz83w+Hvdxkzt3P/eee87rvD/vT7eampqaBAAAAABNNFtTrwgAAAAAQaAEAAAAQCkCJQAAAABKESgBAAAAUIpACQAAAIBSBEoAAAAAlCJQAgAAAKCU7qkDmDZtWnr77bfTPPPMk7p169beTwcAAACg06mpqUmffvppWmyxxdJss83W8QOlCJP69evX3k8DAAAAoNMbP358+uY3v9nxA6WoTCpeUJ8+fdr76QAAAAB0OhMnTswFPUUO0+EDpWKYW4RJAiUAAACAttOUdkOacgMAAABQikAJAAAAgFIESgAAAACUIlACAAAAoBSBEgAAAAClCJQAAAAAKEWgBAAAAEApAiUAAAAAShEoAQAAAFCKQAkAAACAUrqnLqSmpiZ99dVXadq0ae39VGCWmW222VKPHj1St27d2vupAAAA0El0iUBp6tSp6cMPP0yffvppDpSgq4lAaZ555kkLLLBAmn322dv76QAAANDBde8KYdL48ePTl19+mfr27Zt69+6dd6hVa9BVqvLiO/DZZ5+lTz75JH3xxRepX79+QiUAAABapNMHSlGZFGHSEksskeaaa672fjrQLiJIjUD1zTffzN+JhRdeuL2fEgAAAB3YbJ29OiOGucWOtDCJri6+A3369MnfifhuAAAAQHN16kAp+iXFKaozgJT7KBXfCwAAgPb2wgsvpG222SYtvvjiqVevXmn55ZdPRx11VJowYcJ013vnnXfS3nvvna/XvXv3XDiy8847p7feeqvVnssHH3yQFlxwwbTooovmliFNMXTo0C7bUqdTD3krZnPTLwbSdN8FMx0CAADtbezYsWn99dfPkwgNHjw4zTnnnOmRRx5JI0eOTHfddVd69NFH0xxzzJHef//9tPbaa+f+yIsttljaeOON07PPPpv+/Oc/p8cffzw9/fTTrVJIMmzYsNwi5C9/+Uuad955Z3r9W2+9NV1++eWpq+rUFUqFrpoWQl2+CwAAQLUYMWJEnjjoscceSxdddFE666yzcoh0wAEH5JDo2muvzdc78sgjc5h04oknpnHjxqU77rgjjRkzJv3whz/ModQll1zS4udyww03pOuvvz796Ec/SjvssMNMr/+///0v7bfffqkr6xKBEgAAAFBdorpopZVWSv3795/u8i233DKfv/LKK3no2Y033phDnuOPPz4PdwtRuTR8+PDa+2mJjz76KB100EFp7rnnTuedd16TbnPwwQfnYXh1n3tX0qmHvAEAAADVKQKc119/PU2ePDkPdyvEcLaw5JJL5qFnESpNmTJlhtt//fXXrdLmJsKhGFZ35pln5hnim1LNdO211+aeTlOnTk1/+tOfUlekQgkAAACY5XbZZZdcHbTXXnvloWwxI3WENaeeempujr3ddtvVBkb1zdx+yy235PP11luv2c8h7uO6667LTb4/++yzdPjhh6fTTz89vf322/VeP4KnGJK31FJLpd///vepK1OhBAAAAMxyRxxxRHrvvfdyE+5osF1YffXV09VXX50WWGCBBm8blU1XXnllvs5uu+3WrMf/8ssv02GHHZb/HbPKxZC6wq9//et06aWXpu23336620SYFP2TbrzxxjyLdlcmUKqw5M9vS53ZG6f+3zhUAAAAaG/PP/98bZAUFUgxBC4qll588cXcaPu0005Ls80248Cqmpqa3BA7hsqdc845zZ7hLR4jgqmYvCgahO+00075vqNKKgKlCKoGDBiQVlxxxXz9CLluuummdNRRR6WBAwemrs6QN9pEdOiPL2WUJsa0i01xzDHH5NvMP//8eRxqQ+I6lacoTVx++eXTnnvumf7+97/nFUBreeONN2Z4vMZO9fnrX/+aBg0alOabb77cOC6atsVzjZVkXffdd1+99xuN5xZZZJG09dZb5xkNAAAAOrLYb4tG2zG0LIKdiRMnpg8++CCHTKuttlo644wz0kknnVTvbaOi6Z///Gdu3v2Tn/yk2c8hgqPw05/+NFcnrbDCCulb3/pW+uUvf5lOPvnk3LcpqpRCNOA+5JBD0iqrrJLDJgRKtJFiLOu0adPS7bffXuo2H3/8cXrooYdmev0Iq3r27JlXPK+++moud9xmm23S+uuvn8smW0OEORECVZ6K4Ki+v9VtEBdjgmMleffdd+dGcl999VV6880383Ndc8010wMPPNDgY/fo0SPfZ7zGCNjiNcV7tMUWW+QVHgAAQEf18MMPp5deeikdeOCBaZ999qmdvS0qgm699dZcsVRfs+t77703Bz7RsPuKK65o0XP473//m8+juXZdm266aT6P5xgiuJo0aVK66qqr8j4aAiXaQHzJIkCpGxQ1JsoMI4kuc5tjjz02j3mNx/vXv/5V27AtVkxRERR/a6moJooyysrTBhtskP8W53X/VikS7WjuFiWa0dQtSjfjud55551p8cUXz//eY4896p2tIES1VdxnvI4IzR555JHa13jWWWflUAoAAKAjGj9+fD4vhpNVitEdsc9UBD6FMWPGpB133DEHOtHDKEa3tESfPn3y+TLLLDPD36IYIMRj3XbbbblQIkbGxBC92Bc99v+dnnzyyXy94v9diUCJVhelh5Xhyj/+8Y8GQ5OGAqSmBEqFSK5j/GqUKx599NH5sueeey797ne/S+0lKrPOO++8/O9I24cPH55XdjEVZiTdMfY2xEwGN99880zvL5q9rb322vk1RgVWiBJQAACAjmjhhRfO56+99toMf4uhb9F+pLIpd4zY2GyzzfKB+ssvvzwPi2up4j5iFEldTz/9dD5fddVV8/MJzz77bC4cqDw988wz+W/F/7sSgRKtrgiDhg0blhZaaKE89eP999/fpNscd9xxudTx5ZdfzsPYyoqxrDF9Y4hxuO0lVjjFSidWQHVtuOGGufdTDGkrVlRN9aMf/Sifx4orqpwAAAA6mqhMin2/2G+rbAUSB91333333EIkeiSFCJG+//3v5/Ap9vmirUhrKGaH+8UvflFbkVT0SzrxxBPzaJNdd9017bXXXrnnU32nIUOG5NsU/+9KBEq0qvgCRTlgiC9/Me60sYqjGM5VBE7Rc2idddaZ6W0a6zsUJZBFOeTYsWNTe+jVq1ftbAQN9YOKnkpRydVQo7mGfOMb36h9r+M+AAAAOpooPogRJrFPE+1EYpjbggsumHsj3XXXXbmCKUKdYgKnmNQo9oW++OKL6Yacxaly9EbcX93LGrLRRhvlHk4xfC6abR988ME5IPr2t7+dK6SiV1M06qZ+AiVa1RNPPJHT3BiGFglyNJCeWTgUQ+IiDY4VRzRga8ptGhPNrgtlq39aSwxR23zzzfO/r7322jytZARnraGYNS+agsdKFwAAoCOKg+vXXHNNbmESbUMiDFp00UVzr9noIRv/LmbDLiqV6g45i9M555xTe59xH3Uva8z555+f99kWW2yx9Je//CXP0r3EEkvkyqlf/epXbfTKOweBEq2qCIEi6Y1+QZtsskmejS3S3ehr1NhtigCmOH/wwQebVYFTDHkLEW61l4suuig3bSumtYyVUkwzWdl8vKyoSopm3cV43wjuAAAAOqoYpRKTLE2YMCEXGrz99tt59rYoOCi88sorDQ45i1PsbxbidnUvm5mdd945Tyz1/vvvp88//zwXJkQv3Ka4/PLLu9xQt4JAiVZVhENFlVE0oo5m0pV/qzR16tTcLb/yNtFzKDr6x5jZO+64o/Rz6N27d+2/i6qgCLYi4Grqad99900tFa8hKraOOOKIHPzECvLcc89NK620Utpqq61qp59salVSjCsePHhwGj16dL4sGn0
|
||
|
"text/plain": [
|
||
|
"<Figure size 1200x900 with 1 Axes>"
|
||
|
]
|
||
|
},
|
||
|
"metadata": {},
|
||
|
"output_type": "display_data"
|
||
|
}
|
||
|
],
|
||
|
"source": [
|
||
|
"# 提取EoH-TSP和AAD-TSP的运行时间数据\n",
|
||
|
"selected_algos = ['EoH-TSP', 'AAD-TSP']\n",
|
||
|
"df_selected = df_time[selected_algos]\n",
|
||
|
"\n",
|
||
|
"# 设置matplotlib支持中文显示\n",
|
||
|
"plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签\n",
|
||
|
"plt.rcParams['axes.unicode_minus'] = False # 用来正常显示负号\n",
|
||
|
"plt.rcParams['font.size'] = 16 # 设置更大的字号\n",
|
||
|
"\n",
|
||
|
"# 创建柱状图\n",
|
||
|
"plt.figure(figsize=(12, 9))\n",
|
||
|
"bar_width = 0.5\n",
|
||
|
"x = np.arange(len(df_selected.index))\n",
|
||
|
"\n",
|
||
|
"# 绘制柱状图\n",
|
||
|
"bars1 = plt.bar(x - bar_width/2, df_selected['EoH-TSP'], bar_width, label='AAD-TSP')\n",
|
||
|
"bars2 = plt.bar(x + bar_width/2, df_selected['AAD-TSP'], bar_width, label='EoH-TSP')\n",
|
||
|
"\n",
|
||
|
"# 在柱形上添加数值标注\n",
|
||
|
"for bars in [bars1, bars2]:\n",
|
||
|
" for bar in bars:\n",
|
||
|
" height = bar.get_height()\n",
|
||
|
" plt.text(bar.get_x() + bar.get_width()/2., height,\n",
|
||
|
" f'{height:.2f}',\n",
|
||
|
" ha='center', va='bottom',fontsize=16)\n",
|
||
|
"\n",
|
||
|
"# 设置图表属性\n",
|
||
|
"# plt.xlabel('测试实例')\n",
|
||
|
"# plt.title('在不同实例上的运行时间')\n",
|
||
|
"plt.xticks(x, df_selected.index, rotation=45,fontsize=20)\n",
|
||
|
"plt.legend(fontsize=20)\n",
|
||
|
"\n",
|
||
|
"# 调整布局避免标签被截断\n",
|
||
|
"plt.tight_layout()\n",
|
||
|
"plt.savefig('tsp_time.png',dpi=300)\n",
|
||
|
"plt.show()"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 2,
|
||
|
"metadata": {},
|
||
|
"outputs": [
|
||
|
{
|
||
|
"name": "stdout",
|
||
|
"output_type": "stream",
|
||
|
"text": [
|
||
|
"\n",
|
||
|
"测试实例: CHN144.tsp\n",
|
||
|
"\n",
|
||
|
"使用算法: test\n",
|
||
|
"执行时间:0.6112秒, 路径长度:33147.39\n",
|
||
|
"\n",
|
||
|
"测试实例: eil101.tsp\n",
|
||
|
"\n",
|
||
|
"使用算法: test\n",
|
||
|
"执行时间:0.2688秒, 路径长度:693.38\n",
|
||
|
"\n",
|
||
|
"测试实例: eil76.tsp\n",
|
||
|
"\n",
|
||
|
"使用算法: test\n",
|
||
|
"执行时间:0.1627秒, 路径长度:588.83\n",
|
||
|
"\n",
|
||
|
"测试实例: GR96.tsp\n",
|
||
|
"\n",
|
||
|
"使用算法: test\n",
|
||
|
"执行时间:0.2340秒, 路径长度:629.57\n",
|
||
|
"\n",
|
||
|
"测试实例: PBK411.tsp\n",
|
||
|
"\n",
|
||
|
"使用算法: test\n",
|
||
|
"执行时间:10.3389秒, 路径长度:1544.15\n",
|
||
|
"\n",
|
||
|
"测试实例: PR76.tsp\n",
|
||
|
"\n",
|
||
|
"使用算法: test\n",
|
||
|
"执行时间:0.1454秒, 路径长度:120233.54\n",
|
||
|
"\n",
|
||
|
"测试实例: RBU737.tsp\n",
|
||
|
"\n",
|
||
|
"使用算法: test\n"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"ename": "KeyboardInterrupt",
|
||
|
"evalue": "",
|
||
|
"output_type": "error",
|
||
|
"traceback": [
|
||
|
"\u001b[31m---------------------------------------------------------------------------\u001b[39m",
|
||
|
"\u001b[31mKeyboardInterrupt\u001b[39m Traceback (most recent call last)",
|
||
|
"\u001b[36mCell\u001b[39m\u001b[36m \u001b[39m\u001b[32mIn[2]\u001b[39m\u001b[32m, line 22\u001b[39m\n\u001b[32m 20\u001b[39m \u001b[38;5;28;01mfor\u001b[39;00m algo_name, algo_func \u001b[38;5;129;01min\u001b[39;00m test_algo.items():\n\u001b[32m 21\u001b[39m \u001b[38;5;28mprint\u001b[39m(\u001b[33mf\u001b[39m\u001b[33m\"\u001b[39m\u001b[38;5;130;01m\\n\u001b[39;00m\u001b[33m使用算法: \u001b[39m\u001b[38;5;132;01m{\u001b[39;00malgo_name\u001b[38;5;132;01m}\u001b[39;00m\u001b[33m\"\u001b[39m)\n\u001b[32m---> \u001b[39m\u001b[32m22\u001b[39m path_length, exec_time = \u001b[43mevaluate_tsp\u001b[49m\u001b[43m(\u001b[49m\u001b[43malgo_func\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mdist_matrix\u001b[49m\u001b[43m)\u001b[49m\n\u001b[32m 24\u001b[39m \u001b[38;5;28;01mif\u001b[39;00m algo_name \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;129;01min\u001b[39;00m test_results:\n\u001b[32m 25\u001b[39m test_results[algo_name] = {}\n",
|
||
|
"\u001b[36mCell\u001b[39m\u001b[36m \u001b[39m\u001b[32mIn[1]\u001b[39m\u001b[32m, line 20\u001b[39m, in \u001b[36mevaluate_tsp\u001b[39m\u001b[34m(tsp_func, distances)\u001b[39m\n\u001b[32m 17\u001b[39m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[32m 18\u001b[39m \u001b[38;5;66;03m# 计时并执行TSP\u001b[39;00m\n\u001b[32m 19\u001b[39m start_time = time.time()\n\u001b[32m---> \u001b[39m\u001b[32m20\u001b[39m path = \u001b[43mtsp_func\u001b[49m\u001b[43m(\u001b[49m\u001b[43mdistances\u001b[49m\u001b[43m)\u001b[49m\n\u001b[32m 21\u001b[39m end_time = time.time()\n\u001b[32m 22\u001b[39m execution_time = end_time - start_time\n",
|
||
|
"\u001b[36mFile \u001b[39m\u001b[32mc:\\Users\\Lenovo\\Desktop\\LEAD\\tsp_data\\tsp_algo.py:411\u001b[39m, in \u001b[36mtsp_05\u001b[39m\u001b[34m(distances)\u001b[39m\n\u001b[32m 408\u001b[39m temp *= cooling\n\u001b[32m 410\u001b[39m \u001b[38;5;66;03m# 2-opt局部优化\u001b[39;00m\n\u001b[32m--> \u001b[39m\u001b[32m411\u001b[39m best_route = \u001b[43mtwo_opt\u001b[49m\u001b[43m(\u001b[49m\u001b[43mbest_route\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mdistances\u001b[49m\u001b[43m)\u001b[49m\n\u001b[32m 413\u001b[39m \u001b[38;5;28;01mreturn\u001b[39;00m best_route\n",
|
||
|
"\u001b[36mFile \u001b[39m\u001b[32mc:\\Users\\Lenovo\\Desktop\\LEAD\\tsp_data\\tsp_algo.py:277\u001b[39m, in \u001b[36mtwo_opt\u001b[39m\u001b[34m(route, distances)\u001b[39m\n\u001b[32m 273\u001b[39m old_dist = (distances[route[i-\u001b[32m1\u001b[39m]][route[i]] + \n\u001b[32m 274\u001b[39m distances[route[j-\u001b[32m1\u001b[39m]][route[j]])\n\u001b[32m 275\u001b[39m new_dist = (distances[route[i-\u001b[32m1\u001b[39m]][route[j-\u001b[32m1\u001b[39m]] + \n\u001b[32m 276\u001b[39m distances[route[i]][route[j]])\n\u001b[32m--> \u001b[39m\u001b[32m277\u001b[39m \u001b[38;5;28;01mif\u001b[39;00m new_dist < old_dist:\n\u001b[32m 278\u001b[39m route[i:j] = \u001b[38;5;28mreversed\u001b[39m(route[i:j])\n\u001b[32m 279\u001b[39m improved = \u001b[38;5;28;01mTrue\u001b[39;00m\n",
|
||
|
"\u001b[31mKeyboardInterrupt\u001b[39m: "
|
||
|
]
|
||
|
}
|
||
|
],
|
||
|
"source": [
|
||
|
"# 用于存储算法结果\n",
|
||
|
"test_results = {}\n",
|
||
|
"test_time = {}\n",
|
||
|
"\n",
|
||
|
"# 遍历测试实例\n",
|
||
|
"for test_case in test_files:\n",
|
||
|
" print(f\"\\n测试实例: {test_case}\")\n",
|
||
|
" \n",
|
||
|
" # 加载数据\n",
|
||
|
" dist_matrix = load_tsp_data(test_case)\n",
|
||
|
" if dist_matrix is None:\n",
|
||
|
" continue\n",
|
||
|
" \n",
|
||
|
" # 仅测试单个算法\n",
|
||
|
" test_algo = {\n",
|
||
|
" \"test\": tsp_05 # 这里可以改成想测试的其他算法\n",
|
||
|
" }\n",
|
||
|
" \n",
|
||
|
" # 评估算法\n",
|
||
|
" for algo_name, algo_func in test_algo.items():\n",
|
||
|
" print(f\"\\n使用算法: {algo_name}\")\n",
|
||
|
" path_length, exec_time = evaluate_tsp(algo_func, dist_matrix)\n",
|
||
|
" \n",
|
||
|
" if algo_name not in test_results:\n",
|
||
|
" test_results[algo_name] = {}\n",
|
||
|
" if algo_name not in test_time:\n",
|
||
|
" test_time[algo_name] = {}\n",
|
||
|
" \n",
|
||
|
" test_results[algo_name][test_case] = path_length\n",
|
||
|
" test_time[algo_name][test_case] = exec_time\n",
|
||
|
"\n",
|
||
|
"# 打印结果\n",
|
||
|
"print(\"\\n算法在各个实例上的表现:\")\n",
|
||
|
"for algo_name, scores in test_results.items():\n",
|
||
|
" print(f\"\\n{algo_name}:\")\n",
|
||
|
" for test_case, score in scores.items():\n",
|
||
|
" print(f\" {test_case}: 路径长度 = {score:.2f}\")\n",
|
||
|
" for test_case, etime in test_time[algo_name].items():\n",
|
||
|
" print(f\" {test_case}: 执行时间 = {etime:.4f}秒\")"
|
||
|
]
|
||
|
}
|
||
|
],
|
||
|
"metadata": {
|
||
|
"kernelspec": {
|
||
|
"display_name": "lead",
|
||
|
"language": "python",
|
||
|
"name": "python3"
|
||
|
},
|
||
|
"language_info": {
|
||
|
"codemirror_mode": {
|
||
|
"name": "ipython",
|
||
|
"version": 3
|
||
|
},
|
||
|
"file_extension": ".py",
|
||
|
"mimetype": "text/x-python",
|
||
|
"name": "python",
|
||
|
"nbconvert_exporter": "python",
|
||
|
"pygments_lexer": "ipython3",
|
||
|
"version": "3.11.11"
|
||
|
}
|
||
|
},
|
||
|
"nbformat": 4,
|
||
|
"nbformat_minor": 2
|
||
|
}
|