{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "['pr439.tsp', 'pla7397.tsp', 'gr96.tsp', 'rd100.tsp', 'swiss42.tsp', 'rl5934.tsp', 'pcb442.tsp', 'u2319.tsp', 'gil262.tsp', 'pcb3038.tsp', 'brazil58.tsp', 'lin105.tsp', 'brg180.tsp', 'fl417.tsp', 'tsp225.tsp', 'si1032.tsp', 'fl1400.tsp', 'nrw1379.tsp', 'd2103.tsp', 'kroA150.tsp', 'pcb1173.tsp', 'd198.tsp', 'fl1577.tsp', 'gr666.tsp', 'ch130.tsp', 'kroB100.tsp', 'bays29.tsp', 'u1060.tsp', 'berlin52.tsp', 'eil51.tsp', 'rl1304.tsp', 'u2152.tsp', 'si535.tsp', 'ulysses16.tsp', 'gr21.tsp', 'u724.tsp', 'gr24.tsp', 'kroD100.tsp', 'linhp318.tsp', 'pr299.tsp', 'rd400.tsp', 'gr202.tsp', 'vm1084.tsp', 'rat575.tsp', 'd1655.tsp', 'ch150.tsp', 'd15112.tsp', 'pr107.tsp', 'kroB200.tsp', 'dantzig42.tsp', 'hk48.tsp', 'brd14051.tsp', 'a280.tsp', 'd1291.tsp', 'gr229.tsp', 'pr264.tsp', 'pr76.tsp', 'gr17.tsp', 'd493.tsp', 'dsj1000.tsp', 'pr136.tsp', 'rat195.tsp', 'rl11849.tsp', 'att532.tsp', 'kroA100.tsp', 'fri26.tsp', 'pla85900.tsp', 'ali535.tsp', 'ulysses22.tsp', 'kroB150.tsp', 'bier127.tsp', 'kroC100.tsp', 'usa13509.tsp', 'eil76.tsp', 'pr124.tsp', 'rl1323.tsp', 'p654.tsp', 'gr431.tsp', 'rl1889.tsp', 'd657.tsp', 'eil101.tsp', 'fnl4461.tsp', 'pr2392.tsp', 'rat783.tsp', 'ts225.tsp', 'u1432.tsp', 'gr48.tsp', 'u1817.tsp', 'lin318.tsp', 'd18512.tsp', 'rl5915.tsp', 'att48.tsp', 'st70.tsp', 'rat99.tsp', 'fl3795.tsp', 'burma14.tsp', 'u159.tsp', 'pla33810.tsp', 'kroA200.tsp', 'u574.tsp', 'pr1002.tsp', 'pr152.tsp', 'gr137.tsp', 'pa561.tsp', 'gr120.tsp', 'si175.tsp', 'bayg29.tsp', 'pr226.tsp', 'vm1748.tsp', 'pr144.tsp', 'kroE100.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 = \"../\"\n", "data_dir2 = \"../tsp_data/data/tsplib/\"\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": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "过滤后的文件列表:\n", "burma14.tsp: 14\n", "ulysses16.tsp: 16\n", "ulysses22.tsp: 22\n", "dantzig42.tsp: 42\n", "att48.tsp: 48\n", "eil51.tsp: 51\n", "berlin52.tsp: 52\n", "st70.tsp: 70\n", "pr76.tsp: 76\n", "eil76.tsp: 76\n", "gr96.tsp: 96\n", "rat99.tsp: 99\n", "rd100.tsp: 100\n", "kroB100.tsp: 100\n", "kroD100.tsp: 100\n", "kroA100.tsp: 100\n", "kroC100.tsp: 100\n", "kroE100.tsp: 100\n", "eil101.tsp: 101\n", "lin105.tsp: 105\n", "pr107.tsp: 107\n", "pr124.tsp: 124\n", "bier127.tsp: 127\n", "ch130.tsp: 130\n", "pr136.tsp: 136\n", "gr137.tsp: 137\n", "pr144.tsp: 144\n", "kroA150.tsp: 150\n", "ch150.tsp: 150\n", "kroB150.tsp: 150\n", "pr152.tsp: 152\n", "u159.tsp: 159\n", "rat195.tsp: 195\n", "d198.tsp: 198\n", "kroB200.tsp: 200\n", "kroA200.tsp: 200\n", "gr202.tsp: 202\n", "tsp225.tsp: 225\n", "ts225.tsp: 225\n", "pr226.tsp: 226\n", "gr229.tsp: 229\n", "gil262.tsp: 262\n", "pr264.tsp: 264\n", "a280.tsp: 280\n", "pr299.tsp: 299\n", "linhp318.tsp: 318\n", "lin318.tsp: 318\n", "rd400.tsp: 400\n", "fl417.tsp: 417\n", "gr431.tsp: 431\n", "pr439.tsp: 439\n", "pcb442.tsp: 442\n", "d493.tsp: 493\n", "att532.tsp: 532\n", "ali535.tsp: 535\n", "pa561.tsp: 561\n", "u574.tsp: 574\n", "rat575.tsp: 575\n", "p654.tsp: 654\n", "d657.tsp: 657\n", "gr666.tsp: 666\n", "u724.tsp: 724\n", "rat783.tsp: 783\n", "dsj1000.tsp: 1000\n", "pr1002.tsp: 1002\n", "u1060.tsp: 1060\n", "vm1084.tsp: 1084\n", "pcb1173.tsp: 1173\n", "d1291.tsp: 1291\n", "rl1304.tsp: 1304\n", "rl1323.tsp: 1323\n", "nrw1379.tsp: 1379\n", "fl1400.tsp: 1400\n", "u1432.tsp: 1432\n" ] } ], "source": [ "def get_file_number(filename):\n", " \"\"\"从文件名中提取数字部分\"\"\"\n", " try:\n", " number = int(''.join(filter(str.isdigit, filename)))\n", " return number\n", " except ValueError:\n", " print(f\"无法从文件名提取数字: {filename}\")\n", " return float('inf')\n", "\n", "def check_file_content(filename):\n", " \"\"\"检查文件内容是否包含EDGE_WEIGHT_TYPE: EXPLICIT\"\"\"\n", " try:\n", " with open(os.path.join(data_dir2, filename), 'r') as f:\n", " content = f.read()\n", " return 'EDGE_WEIGHT_TYPE: EXPLICIT' not in content\n", " except Exception as e:\n", " print(f\"读取文件出错 {filename}: {str(e)}\")\n", " return False\n", "\n", "# 过滤文件列表\n", "filtered_files = []\n", "for f in test_files:\n", " if get_file_number(f) < 1500 and check_file_content(f):\n", " filtered_files.append(f)\n", "\n", "# 按数字大小排序\n", "filtered_files.sort(key=get_file_number)\n", "\n", "# 更新test_files\n", "test_files = filtered_files\n", "\n", "print(\"过滤后的文件列表:\")\n", "for file in test_files:\n", " print(f\"{file}: {get_file_number(file)}\")" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "测试实例: burma14.tsp\n", "\n", "使用算法: 贪心算法\n", "执行时间:0.0001秒, 路径长度:38.69\n", "\n", "使用算法: 最近邻算法\n", "执行时间:0.0000秒, 路径长度:38.69\n", "\n", "使用算法: 插入法\n", "执行时间:0.0010秒, 路径长度:32.44\n", "\n", "使用算法: EoH-TSP\n", "执行时间:0.0136秒, 路径长度:38.69\n", "\n", "使用算法: AAD-TSP\n", "执行时间:0.0212秒, 路径长度:30.88\n", "\n", "使用算法: MEoH-TSP\n", "执行时间:0.0010秒, 路径长度:38.80\n", "\n", "测试实例: ulysses16.tsp\n", "\n", "使用算法: 贪心算法\n", "执行时间:0.0000秒, 路径长度:104.73\n", "\n", "使用算法: 最近邻算法\n", "执行时间:0.0000秒, 路径长度:104.73\n", "\n", "使用算法: 插入法\n", "执行时间:0.0004秒, 路径长度:79.39\n", "\n", "使用算法: EoH-TSP\n", "执行时间:0.0113秒, 路径长度:88.25\n", "\n", "使用算法: AAD-TSP\n", "执行时间:0.0254秒, 路径长度:74.20\n", "\n", "使用算法: MEoH-TSP\n", "执行时间:0.0012秒, 路径长度:104.65\n", "\n", "测试实例: ulysses22.tsp\n", "\n", "使用算法: 贪心算法\n", "执行时间:0.0001秒, 路径长度:89.64\n", "\n", "使用算法: 最近邻算法\n", "执行时间:0.0001秒, 路径长度:89.64\n", "\n", "使用算法: 插入法\n", "执行时间:0.0011秒, 路径长度:76.99\n", "\n", "使用算法: EoH-TSP\n", "执行时间:0.0144秒, 路径长度:82.21\n", "\n", "使用算法: AAD-TSP\n", "执行时间:0.0340秒, 路径长度:76.13\n", "\n", "使用算法: MEoH-TSP\n", "执行时间:0.0012秒, 路径长度:91.92\n", "\n", "测试实例: dantzig42.tsp\n", "\n", "使用算法: 贪心算法\n", "执行时间:0.0000秒, 路径长度:0.00\n", "\n", "使用算法: 最近邻算法\n", "执行时间:0.0000秒, 路径长度:0.00\n", "\n", "使用算法: 插入法\n", "评估过程出错: index 0 is out of bounds for axis 0 with size 0\n", "\n", "使用算法: EoH-TSP\n", "评估过程出错: Sample larger than population or is negative\n", "\n", "使用算法: AAD-TSP\n", "评估过程出错: index 0 is out of bounds for axis 0 with size 0\n", "\n", "使用算法: MEoH-TSP\n", "评估过程出错: index 0 is out of bounds for axis 0 with size 0\n", "\n", "测试实例: att48.tsp\n", "\n", "使用算法: 贪心算法\n", "执行时间:0.0003秒, 路径长度:40526.42\n", "\n", "使用算法: 最近邻算法\n", "执行时间:0.0003秒, 路径长度:40526.42\n", "\n", "使用算法: 插入法\n", "执行时间:0.0112秒, 路径长度:37314.09\n", "\n", "使用算法: EoH-TSP\n", "执行时间:0.0363秒, 路径长度:40526.42\n", "\n", "使用算法: AAD-TSP\n", "执行时间:0.0693秒, 路径长度:35594.44\n", "\n", "使用算法: MEoH-TSP\n", "执行时间:0.0033秒, 路径长度:37686.87\n", "\n", "测试实例: eil51.tsp\n", "\n", "使用算法: 贪心算法\n", "执行时间:0.0004秒, 路径长度:513.61\n", "\n", "使用算法: 最近邻算法\n", "执行时间:0.0004秒, 路径长度:513.61\n", "\n", "使用算法: 插入法\n", "执行时间:0.0150秒, 路径长度:496.25\n", "\n", "使用算法: EoH-TSP\n", "执行时间:0.0373秒, 路径长度:513.61\n", "\n", "使用算法: AAD-TSP\n", "执行时间:0.0755秒, 路径长度:465.91\n", "\n", "使用算法: MEoH-TSP\n", "执行时间:0.0032秒, 路径长度:458.95\n", "\n", "测试实例: berlin52.tsp\n", "\n", "使用算法: 贪心算法\n", "执行时间:0.0003秒, 路径长度:8980.92\n", "\n", "使用算法: 最近邻算法\n", "执行时间:0.0005秒, 路径长度:8980.92\n", "\n", "使用算法: 插入法\n", "执行时间:0.0169秒, 路径长度:9014.89\n", "\n", "使用算法: EoH-TSP\n", "执行时间:0.0456秒, 路径长度:8980.92\n", "\n", "使用算法: AAD-TSP\n", "执行时间:0.0881秒, 路径长度:8383.59\n", "\n", "使用算法: MEoH-TSP\n", "执行时间:0.0030秒, 路径长度:8835.06\n", "\n", "测试实例: st70.tsp\n", "\n", "使用算法: 贪心算法\n", "执行时间:0.0006秒, 路径长度:805.53\n", "\n", "使用算法: 最近邻算法\n", "执行时间:0.0005秒, 路径长度:805.53\n", "\n", "使用算法: 插入法\n", "执行时间:0.0393秒, 路径长度:778.99\n", "\n", "使用算法: EoH-TSP\n", "执行时间:0.0635秒, 路径长度:800.35\n", "\n", "使用算法: AAD-TSP\n", "执行时间:0.1139秒, 路径长度:753.15\n", "\n", "使用算法: MEoH-TSP\n", "执行时间:0.0036秒, 路径长度:871.65\n", "\n", "测试实例: pr76.tsp\n", "\n", "使用算法: 贪心算法\n", "执行时间:0.0003秒, 路径长度:153461.92\n", "\n", "使用算法: 最近邻算法\n", "执行时间:0.0003秒, 路径长度:153461.92\n", "\n", "使用算法: 插入法\n", "执行时间:0.0463秒, 路径长度:125936.21\n", "\n", "使用算法: EoH-TSP\n", "执行时间:0.0707秒, 路径长度:141744.29\n", "\n", "使用算法: AAD-TSP\n", "执行时间:0.1455秒, 路径长度:113661.65\n", "\n", "使用算法: MEoH-TSP\n", "执行时间:0.0047秒, 路径长度:123787.14\n", "\n", "测试实例: eil76.tsp\n", "\n", "使用算法: 贪心算法\n", "执行时间:0.0008秒, 路径长度:711.99\n", "\n", "使用算法: 最近邻算法\n", "执行时间:0.0006秒, 路径长度:711.99\n", "\n", "使用算法: 插入法\n", "执行时间:0.0473秒, 路径长度:612.39\n", "\n", "使用算法: EoH-TSP\n", "执行时间:0.0599秒, 路径长度:669.24\n", "\n", "使用算法: AAD-TSP\n", "执行时间:0.1086秒, 路径长度:622.71\n", "\n", "使用算法: MEoH-TSP\n", "执行时间:0.0040秒, 路径长度:577.27\n", "\n", "测试实例: gr96.tsp\n", "\n", "使用算法: 贪心算法\n", "执行时间:0.0010秒, 路径长度:707.09\n", "\n", "使用算法: 最近邻算法\n", "执行时间:0.0009秒, 路径长度:707.09\n", "\n", "使用算法: 插入法\n", "执行时间:0.0832秒, 路径长度:651.44\n", "\n", "使用算法: EoH-TSP\n", "执行时间:0.0823秒, 路径长度:707.09\n", "\n", "使用算法: AAD-TSP\n", "执行时间:0.2177秒, 路径长度:623.53\n", "\n", "使用算法: MEoH-TSP\n", "执行时间:0.0063秒, 路径长度:573.48\n", "\n", "测试实例: rat99.tsp\n", "\n", "使用算法: 贪心算法\n", "执行时间:0.0011秒, 路径长度:1564.72\n", "\n", "使用算法: 最近邻算法\n", "执行时间:0.0007秒, 路径长度:1564.72\n", "\n", "使用算法: 插入法\n", "执行时间:0.0929秒, 路径长度:1482.02\n", "\n", "使用算法: EoH-TSP\n", "执行时间:0.0926秒, 路径长度:1564.72\n", "\n", "使用算法: AAD-TSP\n", "执行时间:0.1861秒, 路径长度:1377.07\n", "\n", "使用算法: MEoH-TSP\n", "执行时间:0.0046秒, 路径长度:1492.74\n", "\n", "测试实例: rd100.tsp\n", "\n", "使用算法: 贪心算法\n", "执行时间:0.0015秒, 路径长度:9941.16\n", "\n", "使用算法: 最近邻算法\n", "执行时间:0.0012秒, 路径长度:9941.16\n", "\n", "使用算法: 插入法\n", "执行时间:0.0966秒, 路径长度:8979.37\n", "\n", "使用算法: EoH-TSP\n", "执行时间:0.0791秒, 路径长度:9941.16\n", "\n", "使用算法: AAD-TSP\n", "执行时间:0.1733秒, 路径长度:8864.57\n", "\n", "使用算法: MEoH-TSP\n", "执行时间:0.0046秒, 路径长度:10510.18\n", "\n", "测试实例: kroB100.tsp\n", "\n", "使用算法: 贪心算法\n", "执行时间:0.0009秒, 路径长度:29155.04\n", "\n", "使用算法: 最近邻算法\n", "执行时间:0.0012秒, 路径长度:29155.04\n", "\n", "使用算法: 插入法\n", "执行时间:0.0981秒, 路径长度:25580.92\n", "\n", "使用算法: EoH-TSP\n", "执行时间:0.0874秒, 路径长度:29155.04\n", "\n", "使用算法: AAD-TSP\n", "执行时间:0.1947秒, 路径长度:25613.43\n", "\n", "使用算法: MEoH-TSP\n", "执行时间:0.0046秒, 路径长度:25679.71\n", "\n", "测试实例: kroD100.tsp\n", "\n", "使用算法: 贪心算法\n", "执行时间:0.0012秒, 路径长度:26950.46\n", "\n", "使用算法: 最近邻算法\n", "执行时间:0.0010秒, 路径长度:26950.46\n", "\n", "使用算法: 插入法\n", "执行时间:0.0972秒, 路径长度:25204.27\n", "\n", "使用算法: EoH-TSP\n", "执行时间:0.0952秒, 路径长度:26950.46\n", "\n", "使用算法: AAD-TSP\n", "执行时间:0.1958秒, 路径长度:24720.72\n", "\n", "使用算法: MEoH-TSP\n", "执行时间:0.0036秒, 路径长度:26072.81\n", "\n", "测试实例: kroA100.tsp\n", "\n", "使用算法: 贪心算法\n", "执行时间:0.0015秒, 路径长度:26856.39\n", "\n", "使用算法: 最近邻算法\n", "执行时间:0.0010秒, 路径长度:26856.39\n", "\n", "使用算法: 插入法\n", "执行时间:0.1088秒, 路径长度:24307.78\n", "\n", "使用算法: EoH-TSP\n", "执行时间:0.0976秒, 路径长度:26856.39\n", "\n", "使用算法: AAD-TSP\n", "执行时间:0.2082秒, 路径长度:23078.70\n", "\n", "使用算法: MEoH-TSP\n", "执行时间:0.0069秒, 路径长度:22683.29\n", "\n", "测试实例: kroC100.tsp\n", "\n", "使用算法: 贪心算法\n", "执行时间:0.0010秒, 路径长度:26327.36\n", "\n", "使用算法: 最近邻算法\n", "执行时间:0.0012秒, 路径长度:26327.36\n", "\n", "使用算法: 插入法\n", "执行时间:0.1006秒, 路径长度:25262.17\n", "\n", "使用算法: EoH-TSP\n", "执行时间:0.0923秒, 路径长度:26327.36\n", "\n", "使用算法: AAD-TSP\n", "执行时间:0.1707秒, 路径长度:23205.07\n", "\n", "使用算法: MEoH-TSP\n", "执行时间:0.0060秒, 路径长度:24294.06\n", "\n", "测试实例: kroE100.tsp\n", "\n", "使用算法: 贪心算法\n", "执行时间:0.0011秒, 路径长度:27587.19\n", "\n", "使用算法: 最近邻算法\n", "执行时间:0.0013秒, 路径长度:27587.19\n", "\n", "使用算法: 插入法\n", "执行时间:0.1067秒, 路径长度:25902.00\n", "\n", "使用算法: EoH-TSP\n", "执行时间:0.0917秒, 路径长度:27587.19\n", "\n", "使用算法: AAD-TSP\n", "执行时间:0.1582秒, 路径长度:24382.95\n", "\n", "使用算法: MEoH-TSP\n", "执行时间:0.0053秒, 路径长度:25221.45\n", "\n", "测试实例: eil101.tsp\n", "\n", "使用算法: 贪心算法\n", "执行时间:0.0011秒, 路径长度:825.24\n", "\n", "使用算法: 最近邻算法\n", "执行时间:0.0015秒, 路径长度:825.24\n", "\n", "使用算法: 插入法\n", "执行时间:0.1047秒, 路径长度:702.96\n", "\n", "使用算法: EoH-TSP\n", "执行时间:0.0899秒, 路径长度:847.59\n", "\n", "使用算法: AAD-TSP\n", "执行时间:0.2089秒, 路径长度:702.70\n", "\n", "使用算法: MEoH-TSP\n", "执行时间:0.0063秒, 路径长度:720.41\n", "\n", "测试实例: lin105.tsp\n", "\n", "使用算法: 贪心算法\n", "执行时间:0.0011秒, 路径长度:20362.76\n", "\n", "使用算法: 最近邻算法\n", "执行时间:0.0012秒, 路径长度:20362.76\n", "\n", "使用算法: 插入法\n", "执行时间:0.1178秒, 路径长度:16934.62\n", "\n", "使用算法: EoH-TSP\n", "执行时间:0.0933秒, 路径长度:20362.76\n", "\n", "使用算法: AAD-TSP\n", "执行时间:0.2248秒, 路径长度:18092.45\n", "\n", "使用算法: MEoH-TSP\n", "执行时间:0.0086秒, 路径长度:19041.58\n", "\n", "测试实例: pr107.tsp\n", "\n", "使用算法: 贪心算法\n", "执行时间:0.0018秒, 路径长度:46678.15\n", "\n", "使用算法: 最近邻算法\n", "执行时间:0.0015秒, 路径长度:46678.15\n", "\n", "使用算法: 插入法\n", "执行时间:0.1222秒, 路径长度:52587.76\n", "\n", "使用算法: EoH-TSP\n", "执行时间:0.0850秒, 路径长度:47029.63\n", "\n", "使用算法: AAD-TSP\n", "执行时间:0.1293秒, 路径长度:45487.66\n", "\n", "使用算法: MEoH-TSP\n", "执行时间:0.0042秒, 路径长度:51115.61\n", "\n", "测试实例: pr124.tsp\n", "\n", "使用算法: 贪心算法\n", "执行时间:0.0015秒, 路径长度:69299.43\n", "\n", "使用算法: 最近邻算法\n", "执行时间:0.0010秒, 路径长度:69299.43\n", "\n", "使用算法: 插入法\n", "执行时间:0.1867秒, 路径长度:65318.19\n", "\n", "使用算法: EoH-TSP\n", "执行时间:0.1198秒, 路径长度:69299.43\n", "\n", "使用算法: AAD-TSP\n", "执行时间:0.2008秒, 路径长度:60665.35\n", "\n", "使用算法: MEoH-TSP\n", "执行时间:0.0061秒, 路径长度:68371.30\n", "\n", "测试实例: bier127.tsp\n", "\n", "使用算法: 贪心算法\n", "执行时间:0.0018秒, 路径长度:135751.78\n", "\n", "使用算法: 最近邻算法\n", "执行时间:0.0018秒, 路径长度:135751.78\n", "\n", "使用算法: 插入法\n", "执行时间:0.2051秒, 路径长度:140690.94\n", "\n", "使用算法: EoH-TSP\n", "执行时间:0.1205秒, 路径长度:135751.78\n", "\n", "使用算法: AAD-TSP\n", "执行时间:0.2334秒, 路径长度:122761.77\n", "\n", "使用算法: MEoH-TSP\n", "执行时间:0.0059秒, 路径长度:138054.23\n", "\n", "测试实例: ch130.tsp\n", "\n", "使用算法: 贪心算法\n", "执行时间:0.0017秒, 路径长度:7575.29\n", "\n", "使用算法: 最近邻算法\n", "执行时间:0.0017秒, 路径长度:7575.29\n", "\n", "使用算法: 插入法\n", "执行时间:0.2264秒, 路径长度:7279.21\n", "\n", "使用算法: EoH-TSP\n", "执行时间:0.1234秒, 路径长度:7575.29\n", "\n", "使用算法: AAD-TSP\n", "执行时间:0.2159秒, 路径长度:7093.18\n", "\n", "使用算法: MEoH-TSP\n", "执行时间:0.0068秒, 路径长度:7091.76\n", "\n", "测试实例: pr136.tsp\n", "\n", "使用算法: 贪心算法\n", "执行时间:0.0023秒, 路径长度:120777.86\n", "\n", "使用算法: 最近邻算法\n", "执行时间:0.0019秒, 路径长度:120777.86\n", "\n", "使用算法: 插入法\n", "执行时间:0.2532秒, 路径长度:109587.25\n", "\n", "使用算法: EoH-TSP\n", "执行时间:0.1206秒, 路径长度:118776.81\n", "\n", "使用算法: AAD-TSP\n", "执行时间:0.2525秒, 路径长度:110107.30\n", "\n", "使用算法: MEoH-TSP\n", "执行时间:0.0069秒, 路径长度:123247.21\n", "\n", "测试实例: gr137.tsp\n", "\n", "使用算法: 贪心算法\n", "执行时间:0.0021秒, 路径长度:1022.22\n", "\n", "使用算法: 最近邻算法\n", "执行时间:0.0022秒, 路径长度:1022.22\n", "\n", "使用算法: 插入法\n", "执行时间:0.2709秒, 路径长度:821.29\n", "\n", "使用算法: EoH-TSP\n", "执行时间:0.1346秒, 路径长度:1022.22\n", "\n", "使用算法: AAD-TSP\n", "执行时间:0.4666秒, 路径长度:849.98\n", "\n", "使用算法: MEoH-TSP\n", "执行时间:0.0077秒, 路径长度:901.99\n", "\n", "测试实例: pr144.tsp\n", "\n", "使用算法: 贪心算法\n", "执行时间:0.0020秒, 路径长度:61650.72\n", "\n", "使用算法: 最近邻算法\n", "执行时间:0.0021秒, 路径长度:61650.72\n", "\n", "使用算法: 插入法\n", "执行时间:0.2869秒, 路径长度:73033.13\n", "\n", "使用算法: EoH-TSP\n", "执行时间:0.1331秒, 路径长度:61650.72\n", "\n", "使用算法: AAD-TSP\n", "执行时间:0.1867秒, 路径长度:61399.21\n", "\n", "使用算法: MEoH-TSP\n", "执行时间:0.0056秒, 路径长度:60133.16\n", "\n", "测试实例: kroA150.tsp\n", "\n", "使用算法: 贪心算法\n", "执行时间:0.0019秒, 路径长度:33609.87\n", "\n", "使用算法: 最近邻算法\n", "执行时间:0.0022秒, 路径长度:33609.87\n", "\n", "使用算法: 插入法\n", "执行时间:0.3287秒, 路径长度:29966.54\n", "\n", "使用算法: EoH-TSP\n", "执行时间:0.1343秒, 路径长度:33609.87\n", "\n", "使用算法: AAD-TSP\n", "执行时间:0.3946秒, 路径长度:28613.32\n", "\n", "使用算法: MEoH-TSP\n", "执行时间:0.0073秒, 路径长度:31060.89\n", "\n", "测试实例: ch150.tsp\n", "\n", "使用算法: 贪心算法\n", "执行时间:0.0020秒, 路径长度:8194.61\n", "\n", "使用算法: 最近邻算法\n", "执行时间:0.0020秒, 路径长度:8194.61\n", "\n", "使用算法: 插入法\n", "执行时间:0.3128秒, 路径长度:7994.29\n", "\n", "使用算法: EoH-TSP\n", "执行时间:0.1503秒, 路径长度:8194.61\n", "\n", "使用算法: AAD-TSP\n", "执行时间:0.4033秒, 路径长度:7161.32\n", "\n", "使用算法: MEoH-TSP\n", "执行时间:0.0069秒, 路径长度:7589.72\n", "\n", "测试实例: kroB150.tsp\n", "\n", "使用算法: 贪心算法\n", "执行时间:0.0022秒, 路径长度:32825.75\n", "\n", "使用算法: 最近邻算法\n", "执行时间:0.0026秒, 路径长度:32825.75\n", "\n", "使用算法: 插入法\n", "执行时间:0.3337秒, 路径长度:31588.68\n", "\n", "使用算法: EoH-TSP\n", "执行时间:0.1425秒, 路径长度:32825.75\n", "\n", "使用算法: AAD-TSP\n", "执行时间:0.4610秒, 路径长度:28339.58\n", "\n", "使用算法: MEoH-TSP\n", "执行时间:0.0083秒, 路径长度:29848.14\n", "\n", "测试实例: pr152.tsp\n", "\n", "使用算法: 贪心算法\n", "执行时间:0.0021秒, 路径长度:85702.95\n", "\n", "使用算法: 最近邻算法\n", "执行时间:0.0023秒, 路径长度:85702.95\n", "\n", "使用算法: 插入法\n", "执行时间:0.3738秒, 路径长度:88530.82\n", "\n", "使用算法: EoH-TSP\n", "执行时间:0.1372秒, 路径长度:85702.95\n", "\n", "使用算法: AAD-TSP\n", "执行时间:0.3713秒, 路径长度:80000.73\n", "\n", "使用算法: MEoH-TSP\n", "执行时间:0.0107秒, 路径长度:92682.12\n", "\n", "测试实例: u159.tsp\n", "\n", "使用算法: 贪心算法\n", "执行时间:0.0023秒, 路径长度:54669.03\n", "\n", "使用算法: 最近邻算法\n", "执行时间:0.0026秒, 路径长度:54669.03\n", "\n", "使用算法: 插入法\n", "执行时间:0.4197秒, 路径长度:49981.41\n", "\n", "使用算法: EoH-TSP\n", "执行时间:0.1548秒, 路径长度:57436.69\n", "\n", "使用算法: AAD-TSP\n", "执行时间:0.3393秒, 路径长度:50463.07\n", "\n", "使用算法: MEoH-TSP\n", "执行时间:0.0089秒, 路径长度:51577.24\n", "\n", "测试实例: rat195.tsp\n", "\n", "使用算法: 贪心算法\n", "执行时间:0.0039秒, 路径长度:2761.96\n", "\n", "使用算法: 最近邻算法\n", "执行时间:0.0046秒, 路径长度:2761.96\n", "\n", "使用算法: 插入法\n", "执行时间:0.7990秒, 路径长度:2814.57\n", "\n", "使用算法: EoH-TSP\n", "执行时间:0.2376秒, 路径长度:2761.96\n", "\n", "使用算法: AAD-TSP\n", "执行时间:0.5750秒, 路径长度:2490.60\n", "\n", "使用算法: MEoH-TSP\n", "执行时间:0.0107秒, 路径长度:2575.61\n", "\n", "测试实例: d198.tsp\n", "\n", "使用算法: 贪心算法\n", "执行时间:0.0044秒, 路径长度:18620.07\n", "\n", "使用算法: 最近邻算法\n", "执行时间:0.0048秒, 路径长度:18620.07\n", "\n", "使用算法: 插入法\n", "执行时间:0.7791秒, 路径长度:17631.80\n", "\n", "使用算法: EoH-TSP\n", "执行时间:0.2144秒, 路径长度:18620.07\n", "\n", "使用算法: AAD-TSP\n", "执行时间:0.5679秒, 路径长度:17340.94\n", "\n", "使用算法: MEoH-TSP\n", "执行时间:0.0084秒, 路径长度:19454.99\n", "\n", "测试实例: kroB200.tsp\n", "\n", "使用算法: 贪心算法\n", "执行时间:0.0036秒, 路径长度:36981.59\n", "\n", "使用算法: 最近邻算法\n", "执行时间:0.0037秒, 路径长度:36981.59\n", "\n", "使用算法: 插入法\n", "执行时间:0.8396秒, 路径长度:35421.70\n", "\n", "使用算法: EoH-TSP\n", "执行时间:0.2561秒, 路径长度:36981.59\n", "\n", "使用算法: AAD-TSP\n", "执行时间:0.6496秒, 路径长度:34175.92\n", "\n", "使用算法: MEoH-TSP\n", "执行时间:0.0090秒, 路径长度:34079.08\n", "\n", "测试实例: kroA200.tsp\n", "\n", "使用算法: 贪心算法\n", "执行时间:0.0043秒, 路径长度:35798.41\n", "\n", "使用算法: 最近邻算法\n", "执行时间:0.0037秒, 路径长度:35798.41\n", "\n", "使用算法: 插入法\n", "执行时间:0.8220秒, 路径长度:35337.51\n", "\n", "使用算法: EoH-TSP\n", "执行时间:0.2057秒, 路径长度:35798.41\n", "\n", "使用算法: AAD-TSP\n", "执行时间:0.9275秒, 路径长度:30478.90\n", "\n", "使用算法: MEoH-TSP\n", "执行时间:0.0118秒, 路径长度:33224.38\n", "\n", "测试实例: gr202.tsp\n", "\n", "使用算法: 贪心算法\n", "执行时间:0.0043秒, 路径长度:619.40\n", "\n", "使用算法: 最近邻算法\n", "执行时间:0.0044秒, 路径长度:619.40\n", "\n", "使用算法: 插入法\n", "执行时间:0.8180秒, 路径长度:570.14\n", "\n", "使用算法: EoH-TSP\n", "执行时间:0.2131秒, 路径长度:619.40\n", "\n", "使用算法: AAD-TSP\n", "执行时间:0.8817秒, 路径长度:529.30\n", "\n", "使用算法: MEoH-TSP\n", "执行时间:0.0115秒, 路径长度:559.57\n", "\n", "测试实例: tsp225.tsp\n", "\n", "使用算法: 贪心算法\n", "执行时间:0.0051秒, 路径长度:4829.00\n", "\n", "使用算法: 最近邻算法\n", "执行时间:0.0053秒, 路径长度:4829.00\n", "\n", "使用算法: 插入法\n", "执行时间:1.1301秒, 路径长度:4468.20\n", "\n", "使用算法: EoH-TSP\n", "执行时间:0.2429秒, 路径长度:4786.42\n", "\n", "使用算法: AAD-TSP\n", "执行时间:1.1539秒, 路径长度:4169.09\n", "\n", "使用算法: MEoH-TSP\n", "执行时间:0.0096秒, 路径长度:4430.19\n", "\n", "测试实例: ts225.tsp\n", "\n", "使用算法: 贪心算法\n", "执行时间:0.0057秒, 路径长度:152493.55\n", "\n", "使用算法: 最近邻算法\n", "执行时间:0.0037秒, 路径长度:152493.55\n", "\n", "使用算法: 插入法\n", "执行时间:1.0775秒, 路径长度:160009.16\n", "\n", "使用算法: EoH-TSP\n", "执行时间:0.2497秒, 路径长度:146183.10\n", "\n", "使用算法: AAD-TSP\n", "执行时间:0.7152秒, 路径长度:139697.02\n", "\n", "使用算法: MEoH-TSP\n", "执行时间:0.0114秒, 路径长度:131162.09\n", "\n", "测试实例: pr226.tsp\n", "\n", "使用算法: 贪心算法\n", "执行时间:0.0040秒, 路径长度:94685.45\n", "\n", "使用算法: 最近邻算法\n", "执行时间:0.0040秒, 路径长度:94685.45\n", "\n", "使用算法: 插入法\n", "执行时间:1.1298秒, 路径长度:91024.65\n", "\n", "使用算法: EoH-TSP\n", "执行时间:0.2426秒, 路径长度:94402.09\n", "\n", "使用算法: AAD-TSP\n", "执行时间:0.5740秒, 路径长度:87543.04\n", "\n", "使用算法: MEoH-TSP\n", "执行时间:0.0107秒, 路径长度:96212.20\n", "\n", "测试实例: gr229.tsp\n", "\n", "使用算法: 贪心算法\n", "执行时间:0.0048秒, 路径长度:2014.71\n", "\n", "使用算法: 最近邻算法\n", "执行时间:0.0047秒, 路径长度:2014.71\n", "\n", "使用算法: 插入法\n", "执行时间:1.1679秒, 路径长度:1825.83\n", "\n", "使用算法: EoH-TSP\n", "执行时间:0.2532秒, 路径长度:2014.71\n", "\n", "使用算法: AAD-TSP\n", "执行时间:0.9931秒, 路径长度:1764.18\n", "\n", "使用算法: MEoH-TSP\n", "执行时间:0.0099秒, 路径长度:1987.56\n", "\n", "测试实例: gil262.tsp\n", "\n", "使用算法: 贪心算法\n", "执行时间:0.0067秒, 路径长度:3241.47\n", "\n", "使用算法: 最近邻算法\n", "执行时间:0.0060秒, 路径长度:3241.47\n", "\n", "使用算法: 插入法\n", "执行时间:1.7432秒, 路径长度:2804.23\n", "\n", "使用算法: EoH-TSP\n", "执行时间:0.3277秒, 路径长度:3259.42\n", "\n", "使用算法: AAD-TSP\n", "执行时间:1.8501秒, 路径长度:2757.03\n", "\n", "使用算法: MEoH-TSP\n", "执行时间:0.0154秒, 路径长度:2748.90\n", "\n", "测试实例: pr264.tsp\n", "\n", "使用算法: 贪心算法\n", "执行时间:0.0071秒, 路径长度:58022.86\n", "\n", "使用算法: 最近邻算法\n", "执行时间:0.0069秒, 路径长度:58022.86\n", "\n", "使用算法: 插入法\n", "执行时间:1.8694秒, 路径长度:58225.34\n", "\n", "使用算法: EoH-TSP\n", "执行时间:0.3348秒, 路径长度:58328.28\n", "\n", "使用算法: AAD-TSP\n", "执行时间:0.7189秒, 路径长度:56762.06\n", "\n", "使用算法: MEoH-TSP\n", "执行时间:0.0059秒, 路径长度:59000.73\n", "\n", "测试实例: a280.tsp\n", "\n", "使用算法: 贪心算法\n", "执行时间:0.0037秒, 路径长度:3148.11\n", "\n", "使用算法: 最近邻算法\n", "执行时间:0.0041秒, 路径长度:3148.11\n", "\n", "使用算法: 插入法\n", "执行时间:2.0843秒, 路径长度:3101.79\n", "\n", "使用算法: EoH-TSP\n", "执行时间:0.3710秒, 路径长度:3182.09\n", "\n", "使用算法: AAD-TSP\n", "执行时间:1.2460秒, 路径长度:2828.71\n", "\n", "使用算法: MEoH-TSP\n", "执行时间:0.0127秒, 路径长度:3448.00\n", "\n", "测试实例: pr299.tsp\n", "\n", "使用算法: 贪心算法\n", "执行时间:0.0068秒, 路径长度:59899.01\n", "\n", "使用算法: 最近邻算法\n", "执行时间:0.0074秒, 路径长度:59899.01\n", "\n", "使用算法: 插入法\n", "执行时间:2.4582秒, 路径长度:58124.45\n", "\n", "使用算法: EoH-TSP\n", "执行时间:0.4082秒, 路径长度:60220.49\n", "\n", "使用算法: AAD-TSP\n", "执行时间:1.5777秒, 路径长度:52408.65\n", "\n", "使用算法: MEoH-TSP\n", "执行时间:0.0178秒, 路径长度:61338.05\n", "\n", "测试实例: linhp318.tsp\n", "\n", "使用算法: 贪心算法\n", "执行时间:0.0102秒, 路径长度:54033.58\n", "\n", "使用算法: 最近邻算法\n", "执行时间:0.0113秒, 路径长度:54033.58\n", "\n", "使用算法: 插入法\n", "执行时间:3.5168秒, 路径长度:49454.81\n", "\n", "使用算法: EoH-TSP\n", "执行时间:0.5548秒, 路径长度:53993.19\n", "\n", "使用算法: AAD-TSP\n", "执行时间:2.2579秒, 路径长度:49153.11\n", "\n", "使用算法: MEoH-TSP\n", "执行时间:0.0173秒, 路径长度:50085.92\n", "\n", "测试实例: lin318.tsp\n", "\n", "使用算法: 贪心算法\n", "执行时间:0.0096秒, 路径长度:54033.58\n", "\n", "使用算法: 最近邻算法\n", "执行时间:0.0104秒, 路径长度:54033.58\n", "\n", "使用算法: 插入法\n", "执行时间:3.4641秒, 路径长度:49454.81\n", "\n", "使用算法: EoH-TSP\n", "执行时间:0.4869秒, 路径长度:54033.58\n", "\n", "使用算法: AAD-TSP\n", "执行时间:2.2018秒, 路径长度:49153.11\n", "\n", "使用算法: MEoH-TSP\n", "执行时间:0.0220秒, 路径长度:50085.92\n", "\n", "测试实例: rd400.tsp\n", "\n", "使用算法: 贪心算法\n", "执行时间:0.0169秒, 路径长度:19168.05\n", "\n", "使用算法: 最近邻算法\n", "执行时间:0.0156秒, 路径长度:19168.05\n", "\n", "使用算法: 插入法\n", "执行时间:6.9163秒, 路径长度:18629.98\n", "\n", "使用算法: EoH-TSP\n", "执行时间:0.7092秒, 路径长度:19168.05\n", "\n", "使用算法: AAD-TSP\n", "执行时间:4.5916秒, 路径长度:16651.71\n", "\n", "使用算法: MEoH-TSP\n", "执行时间:0.0297秒, 路径长度:17599.52\n", "\n", "测试实例: fl417.tsp\n", "\n", "使用算法: 贪心算法\n", "执行时间:0.0178秒, 路径长度:15114.12\n", "\n", "使用算法: 最近邻算法\n", "执行时间:0.0197秒, 路径长度:15114.12\n", "\n", "使用算法: 插入法\n", "执行时间:7.6338秒, 路径长度:14179.84\n", "\n", "使用算法: EoH-TSP\n", "执行时间:0.7209秒, 路径长度:15256.42\n", "\n", "使用算法: AAD-TSP\n", "执行时间:7.5823秒, 路径长度:13630.60\n", "\n", "使用算法: MEoH-TSP\n", "执行时间:0.0236秒, 路径长度:13680.66\n", "\n", "测试实例: gr431.tsp\n", "\n", "使用算法: 贪心算法\n", "执行时间:0.0173秒, 路径长度:2516.25\n", "\n", "使用算法: 最近邻算法\n", "执行时间:0.0165秒, 路径长度:2516.25\n", "\n", "使用算法: 插入法\n", "执行时间:8.1149秒, 路径长度:2214.43\n", "\n", "使用算法: EoH-TSP\n", "执行时间:0.8217秒, 路径长度:2516.25\n", "\n", "使用算法: AAD-TSP\n", "执行时间:5.4522秒, 路径长度:2153.00\n", "\n", "使用算法: MEoH-TSP\n", "执行时间:0.0250秒, 路径长度:2263.78\n", "\n", "测试实例: pr439.tsp\n", "\n", "使用算法: 贪心算法\n", "执行时间:0.0169秒, 路径长度:131282.09\n", "\n", "使用算法: 最近邻算法\n", "执行时间:0.0175秒, 路径长度:131282.09\n", "\n", "使用算法: 插入法\n", "执行时间:6.2646秒, 路径长度:130067.88\n", "\n", "使用算法: EoH-TSP\n", "执行时间:0.4491秒, 路径长度:137778.50\n", "\n", "使用算法: AAD-TSP\n", "执行时间:2.5368秒, 路径长度:118466.33\n", "\n", "使用算法: MEoH-TSP\n", "执行时间:0.0130秒, 路径长度:134814.09\n", "\n", "测试实例: pcb442.tsp\n", "\n", "使用算法: 贪心算法\n", "执行时间:0.0145秒, 路径长度:61984.05\n", "\n", "使用算法: 最近邻算法\n", "执行时间:0.0147秒, 路径长度:61984.05\n", "\n", "使用算法: 插入法\n", "执行时间:6.2491秒, 路径长度:60891.83\n", "\n", "使用算法: EoH-TSP\n", "执行时间:0.5471秒, 路径长度:61234.77\n", "\n", "使用算法: AAD-TSP\n", "执行时间:2.7801秒, 路径长度:54291.55\n", "\n", "使用算法: MEoH-TSP\n", "执行时间:0.0156秒, 路径长度:58899.52\n", "\n", "测试实例: d493.tsp\n", "\n", "使用算法: 贪心算法\n", "执行时间:0.0121秒, 路径长度:43646.38\n", "\n", "使用算法: 最近邻算法\n", "执行时间:0.0123秒, 路径长度:43646.38\n", "\n", "使用算法: 插入法\n", "执行时间:6.6914秒, 路径长度:39982.31\n", "\n", "使用算法: EoH-TSP\n", "执行时间:0.4954秒, 路径长度:43710.70\n", "\n", "使用算法: AAD-TSP\n", "执行时间:4.9482秒, 路径长度:38869.88\n", "\n", "使用算法: MEoH-TSP\n", "执行时间:0.0196秒, 路径长度:43050.15\n", "\n", "测试实例: att532.tsp\n", "\n", "使用算法: 贪心算法\n", "执行时间:0.0175秒, 路径长度:112099.45\n", "\n", "使用算法: 最近邻算法\n", "执行时间:0.0164秒, 路径长度:112099.45\n", "\n", "使用算法: 插入法\n", "执行时间:9.7124秒, 路径长度:102201.61\n", "\n", "使用算法: EoH-TSP\n", "执行时间:0.6501秒, 路径长度:112099.45\n", "\n", "使用算法: AAD-TSP\n", "执行时间:6.3833秒, 路径长度:99028.54\n", "\n", "使用算法: MEoH-TSP\n", "执行时间:0.0229秒, 路径长度:103710.35\n", "\n", "测试实例: ali535.tsp\n", "\n", "使用算法: 贪心算法\n", "执行时间:0.0164秒, 路径长度:2671.07\n", "\n", "使用算法: 最近邻算法\n", "执行时间:0.0157秒, 路径长度:2671.07\n", "\n", "使用算法: 插入法\n", "执行时间:9.8289秒, 路径长度:2366.95\n", "\n", "使用算法: EoH-TSP\n", "执行时间:0.5881秒, 路径长度:2671.07\n", "\n", "使用算法: AAD-TSP\n", "执行时间:8.2581秒, 路径长度:2269.30\n", "\n", "使用算法: MEoH-TSP\n", "执行时间:0.0202秒, 路径长度:2630.32\n", "\n", "测试实例: pa561.tsp\n", "\n", "使用算法: 贪心算法\n", "执行时间:0.0000秒, 路径长度:0.00\n", "\n", "使用算法: 最近邻算法\n", "执行时间:0.0000秒, 路径长度:0.00\n", "\n", "使用算法: 插入法\n", "评估过程出错: index 0 is out of bounds for axis 0 with size 0\n", "\n", "使用算法: EoH-TSP\n", "评估过程出错: Sample larger than population or is negative\n", "\n", "使用算法: AAD-TSP\n", "评估过程出错: index 0 is out of bounds for axis 0 with size 0\n", "\n", "使用算法: MEoH-TSP\n", "评估过程出错: index 0 is out of bounds for axis 0 with size 0\n", "\n", "测试实例: u574.tsp\n", "\n", "使用算法: 贪心算法\n", "执行时间:0.0166秒, 路径长度:46881.87\n", "\n", "使用算法: 最近邻算法\n", "执行时间:0.0237秒, 路径长度:46881.87\n", "\n", "使用算法: 插入法\n", "执行时间:12.5508秒, 路径长度:44144.83\n", "\n", "使用算法: EoH-TSP\n", "执行时间:0.7088秒, 路径长度:46881.87\n", "\n", "使用算法: AAD-TSP\n", "执行时间:8.8392秒, 路径长度:39154.50\n", "\n", "使用算法: MEoH-TSP\n", "执行时间:0.0193秒, 路径长度:46620.28\n", "\n", "测试实例: rat575.tsp\n", "\n", "使用算法: 贪心算法\n", "执行时间:0.0157秒, 路径长度:8449.32\n", "\n", "使用算法: 最近邻算法\n", "执行时间:0.0158秒, 路径长度:8449.32\n", "\n", "使用算法: 插入法\n", "执行时间:10.7083秒, 路径长度:7853.86\n", "\n", "使用算法: EoH-TSP\n", "执行时间:0.6515秒, 路径长度:8430.71\n", "\n", "使用算法: AAD-TSP\n", "执行时间:6.0627秒, 路径长度:7398.48\n", "\n", "使用算法: MEoH-TSP\n", "执行时间:0.0200秒, 路径长度:7808.10\n", "\n", "测试实例: p654.tsp\n", "\n", "使用算法: 贪心算法\n", "执行时间:0.0207秒, 路径长度:43411.56\n", "\n", "使用算法: 最近邻算法\n", "执行时间:0.0207秒, 路径长度:43411.56\n", "\n", "使用算法: 插入法\n", "执行时间:18.7784秒, 路径长度:40418.68\n", "\n", "使用算法: EoH-TSP\n", "执行时间:0.9786秒, 路径长度:48824.31\n", "\n", "使用算法: AAD-TSP\n", "执行时间:12.9592秒, 路径长度:38249.53\n", "\n", "使用算法: MEoH-TSP\n", "执行时间:0.0310秒, 路径长度:41009.57\n", "\n", "测试实例: d657.tsp\n", "\n", "使用算法: 贪心算法\n", "执行时间:0.0218秒, 路径长度:62176.40\n", "\n", "使用算法: 最近邻算法\n", "执行时间:0.0247秒, 路径长度:62176.40\n", "\n", "使用算法: 插入法\n", "执行时间:18.7046秒, 路径长度:57906.66\n", "\n", "使用算法: EoH-TSP\n", "执行时间:0.9157秒, 路径长度:62176.40\n", "\n", "使用算法: AAD-TSP\n", "执行时间:9.9684秒, 路径长度:54801.59\n", "\n", "使用算法: MEoH-TSP\n", "执行时间:0.0275秒, 路径长度:63518.97\n", "\n", "测试实例: gr666.tsp\n", "\n", "使用算法: 贪心算法\n", "执行时间:0.0266秒, 路径长度:4110.90\n", "\n", "使用算法: 最近邻算法\n", "执行时间:0.0237秒, 路径长度:4110.90\n", "\n", "使用算法: 插入法\n", "执行时间:18.7978秒, 路径长度:3670.13\n", "\n", "使用算法: EoH-TSP\n", "执行时间:1.0282秒, 路径长度:4110.90\n", "\n", "使用算法: AAD-TSP\n", "执行时间:19.6285秒, 路径长度:3507.73\n", "\n", "使用算法: MEoH-TSP\n", "执行时间:0.0308秒, 路径长度:3920.88\n", "\n", "测试实例: u724.tsp\n", "\n", "使用算法: 贪心算法\n", "执行时间:0.0265秒, 路径长度:55223.20\n", "\n", "使用算法: 最近邻算法\n", "执行时间:0.0262秒, 路径长度:55223.20\n", "\n", "使用算法: 插入法\n", "执行时间:21.4646秒, 路径长度:50245.77\n", "\n", "使用算法: EoH-TSP\n", "执行时间:1.0141秒, 路径长度:52482.39\n", "\n", "使用算法: AAD-TSP\n", "执行时间:13.3697秒, 路径长度:47256.49\n", "\n", "使用算法: MEoH-TSP\n", "执行时间:0.0300秒, 路径长度:49538.41\n", "\n", "测试实例: rat783.tsp\n", "\n", "使用算法: 贪心算法\n", "执行时间:0.0306秒, 路径长度:11255.07\n", "\n", "使用算法: 最近邻算法\n", "执行时间:0.0302秒, 路径长度:11255.07\n", "\n", "使用算法: 插入法\n", "执行时间:27.2072秒, 路径长度:10301.88\n", "\n", "使用算法: EoH-TSP\n", "执行时间:1.1461秒, 路径长度:11255.07\n", "\n", "使用算法: AAD-TSP\n", "执行时间:22.3859秒, 路径长度:9468.73\n", "\n", "使用算法: MEoH-TSP\n", "执行时间:0.0357秒, 路径长度:11151.44\n", "\n", "测试实例: dsj1000.tsp\n", "\n", "使用算法: 贪心算法\n", "执行时间:0.0491秒, 路径长度:24630960.10\n", "\n", "使用算法: 最近邻算法\n", "执行时间:0.0511秒, 路径长度:24630960.10\n", "\n", "使用算法: 插入法\n", "执行时间:58.0007秒, 路径长度:22291166.04\n", "\n", "使用算法: EoH-TSP\n", "执行时间:1.8257秒, 路径长度:24630960.10\n", "\n", "使用算法: AAD-TSP\n", "执行时间:59.6672秒, 路径长度:21147745.60\n", "\n", "使用算法: MEoH-TSP\n", "执行时间:0.0577秒, 路径长度:23977443.37\n", "\n", "测试实例: pr1002.tsp\n", "\n", "使用算法: 贪心算法\n", "执行时间:0.0483秒, 路径长度:315596.59\n", "\n", "使用算法: 最近邻算法\n", "执行时间:0.0497秒, 路径长度:315596.59\n", "\n", "使用算法: 插入法\n", "执行时间:66.0344秒, 路径长度:302938.90\n", "\n", "使用算法: EoH-TSP\n", "执行时间:2.8392秒, 路径长度:325311.07\n", "\n", "使用算法: AAD-TSP\n", "执行时间:41.2541秒, 路径长度:278851.88\n", "\n", "使用算法: MEoH-TSP\n", "执行时间:0.0629秒, 路径长度:320713.45\n", "\n", "测试实例: u1060.tsp\n", "\n", "使用算法: 贪心算法\n", "执行时间:0.0591秒, 路径长度:281635.68\n", "\n", "使用算法: 最近邻算法\n", "执行时间:0.0590秒, 路径长度:281635.68\n", "\n", "使用算法: 插入法\n", "执行时间:77.2518秒, 路径长度:270377.38\n", "\n", "使用算法: EoH-TSP\n", "执行时间:2.6807秒, 路径长度:280689.98\n", "\n", "使用算法: AAD-TSP\n", "执行时间:49.7501秒, 路径长度:241924.19\n", "\n", "使用算法: MEoH-TSP\n", "执行时间:0.0943秒, 路径长度:270485.28\n", "\n", "测试实例: vm1084.tsp\n", "\n", "使用算法: 贪心算法\n", "执行时间:0.0587秒, 路径长度:301469.23\n", "\n", "使用算法: 最近邻算法\n", "执行时间:0.0586秒, 路径长度:301469.23\n", "\n", "使用算法: 插入法\n", "执行时间:82.4780秒, 路径长度:277435.70\n", "\n", "使用算法: EoH-TSP\n", "执行时间:2.6446秒, 路径长度:302111.10\n", "\n", "使用算法: AAD-TSP\n", "执行时间:35.7943秒, 路径长度:263604.55\n", "\n", "使用算法: MEoH-TSP\n", "执行时间:0.0649秒, 路径长度:273437.36\n", "\n", "测试实例: pcb1173.tsp\n", "\n", "使用算法: 贪心算法\n", "执行时间:0.0659秒, 路径长度:70277.94\n", "\n", "使用算法: 最近邻算法\n", "执行时间:0.0646秒, 路径长度:70277.94\n", "\n", "使用算法: 插入法\n", "执行时间:91.5772秒, 路径长度:69010.68\n", "\n", "使用算法: EoH-TSP\n", "执行时间:2.8048秒, 路径长度:70279.94\n", "\n", "使用算法: AAD-TSP\n", "执行时间:45.7643秒, 路径长度:62453.05\n", "\n", "使用算法: MEoH-TSP\n", "执行时间:0.0674秒, 路径长度:71441.00\n", "\n", "测试实例: d1291.tsp\n", "\n", "使用算法: 贪心算法\n", "执行时间:0.0813秒, 路径长度:59941.24\n", "\n", "使用算法: 最近邻算法\n", "执行时间:0.0811秒, 路径长度:59941.24\n", "\n", "使用算法: 插入法\n", "执行时间:127.4454秒, 路径长度:59956.75\n", "\n", "使用算法: EoH-TSP\n", "执行时间:2.8732秒, 路径长度:59892.04\n", "\n", "使用算法: AAD-TSP\n", "执行时间:17.4007秒, 路径长度:55389.49\n", "\n", "使用算法: MEoH-TSP\n", "执行时间:0.0787秒, 路径长度:62211.60\n", "\n", "测试实例: rl1304.tsp\n", "\n", "使用算法: 贪心算法\n", "执行时间:0.0839秒, 路径长度:339797.47\n", "\n", "使用算法: 最近邻算法\n", "执行时间:0.0824秒, 路径长度:339797.47\n", "\n", "使用算法: 插入法\n", "执行时间:130.1252秒, 路径长度:314295.61\n", "\n", "使用算法: EoH-TSP\n", "执行时间:3.2245秒, 路径长度:335160.35\n", "\n", "使用算法: AAD-TSP\n", "执行时间:49.8281秒, 路径长度:284242.81\n", "\n", "使用算法: MEoH-TSP\n", "执行时间:0.1418秒, 路径长度:303550.70\n", "\n", "测试实例: rl1323.tsp\n", "\n", "使用算法: 贪心算法\n", "执行时间:0.0859秒, 路径长度:332094.97\n", "\n", "使用算法: 最近邻算法\n", "执行时间:0.0859秒, 路径长度:332094.97\n", "\n", "使用算法: 插入法\n", "执行时间:129.8820秒, 路径长度:341512.46\n", "\n", "使用算法: EoH-TSP\n", "执行时间:3.0296秒, 路径长度:331159.20\n", "\n", "使用算法: AAD-TSP\n", "执行时间:44.1189秒, 路径长度:299654.18\n", "\n", "使用算法: MEoH-TSP\n", "执行时间:0.0974秒, 路径长度:334237.62\n", "\n", "测试实例: nrw1379.tsp\n", "\n", "使用算法: 贪心算法\n", "执行时间:0.1045秒, 路径长度:70015.46\n", "\n", "使用算法: 最近邻算法\n", "执行时间:0.1040秒, 路径长度:70015.46\n", "\n", "使用算法: 插入法\n", "执行时间:158.2882秒, 路径长度:66216.21\n", "\n", "使用算法: EoH-TSP\n", "执行时间:3.6320秒, 路径长度:69794.61\n", "\n", "使用算法: AAD-TSP\n", "执行时间:96.8080秒, 路径长度:61838.87\n", "\n", "使用算法: MEoH-TSP\n", "执行时间:0.1103秒, 路径长度:68362.91\n", "\n", "测试实例: fl1400.tsp\n", "\n", "使用算法: 贪心算法\n", "执行时间:0.1030秒, 路径长度:26971.88\n", "\n", "使用算法: 最近邻算法\n", "执行时间:0.1028秒, 路径长度:26971.88\n", "\n", "使用算法: 插入法\n", "执行时间:186.6609秒, 路径长度:22955.32\n", "\n", "使用算法: EoH-TSP\n", "执行时间:3.4932秒, 路径长度:27057.04\n", "\n", "使用算法: AAD-TSP\n", "执行时间:265.7287秒, 路径长度:22420.49\n", "\n", "使用算法: MEoH-TSP\n", "执行时间:0.1604秒, 路径长度:23757.04\n", "\n", "测试实例: u1432.tsp\n", "\n", "使用算法: 贪心算法\n", "执行时间:0.2142秒, 路径长度:188815.01\n", "\n", "使用算法: 最近邻算法\n", "执行时间:0.1910秒, 路径长度:188815.01\n", "\n", "使用算法: 插入法\n", "执行时间:212.7076秒, 路径长度:171110.62\n", "\n", "使用算法: EoH-TSP\n", "执行时间:3.5985秒, 路径长度:196453.25\n", "\n", "使用算法: AAD-TSP\n", "执行时间:79.1341秒, 路径长度:167338.88\n", "\n", "使用算法: MEoH-TSP\n", "执行时间:0.0944秒, 路径长度:173489.17\n", "\n", "所有算法在各个实例上的表现:\n", "\n", "贪心算法:\n", " burma14.tsp: 路径长度 = 38.69\n", " ulysses16.tsp: 路径长度 = 104.73\n", " ulysses22.tsp: 路径长度 = 89.64\n", " dantzig42.tsp: 路径长度 = 0.00\n", " att48.tsp: 路径长度 = 40526.42\n", " eil51.tsp: 路径长度 = 513.61\n", " berlin52.tsp: 路径长度 = 8980.92\n", " st70.tsp: 路径长度 = 805.53\n", " pr76.tsp: 路径长度 = 153461.92\n", " eil76.tsp: 路径长度 = 711.99\n", " gr96.tsp: 路径长度 = 707.09\n", " rat99.tsp: 路径长度 = 1564.72\n", " rd100.tsp: 路径长度 = 9941.16\n", " kroB100.tsp: 路径长度 = 29155.04\n", " kroD100.tsp: 路径长度 = 26950.46\n", " kroA100.tsp: 路径长度 = 26856.39\n", " kroC100.tsp: 路径长度 = 26327.36\n", " kroE100.tsp: 路径长度 = 27587.19\n", " eil101.tsp: 路径长度 = 825.24\n", " lin105.tsp: 路径长度 = 20362.76\n", " pr107.tsp: 路径长度 = 46678.15\n", " pr124.tsp: 路径长度 = 69299.43\n", " bier127.tsp: 路径长度 = 135751.78\n", " ch130.tsp: 路径长度 = 7575.29\n", " pr136.tsp: 路径长度 = 120777.86\n", " gr137.tsp: 路径长度 = 1022.22\n", " pr144.tsp: 路径长度 = 61650.72\n", " kroA150.tsp: 路径长度 = 33609.87\n", " ch150.tsp: 路径长度 = 8194.61\n", " kroB150.tsp: 路径长度 = 32825.75\n", " pr152.tsp: 路径长度 = 85702.95\n", " u159.tsp: 路径长度 = 54669.03\n", " rat195.tsp: 路径长度 = 2761.96\n", " d198.tsp: 路径长度 = 18620.07\n", " kroB200.tsp: 路径长度 = 36981.59\n", " kroA200.tsp: 路径长度 = 35798.41\n", " gr202.tsp: 路径长度 = 619.40\n", " tsp225.tsp: 路径长度 = 4829.00\n", " ts225.tsp: 路径长度 = 152493.55\n", " pr226.tsp: 路径长度 = 94685.45\n", " gr229.tsp: 路径长度 = 2014.71\n", " gil262.tsp: 路径长度 = 3241.47\n", " pr264.tsp: 路径长度 = 58022.86\n", " a280.tsp: 路径长度 = 3148.11\n", " pr299.tsp: 路径长度 = 59899.01\n", " linhp318.tsp: 路径长度 = 54033.58\n", " lin318.tsp: 路径长度 = 54033.58\n", " rd400.tsp: 路径长度 = 19168.05\n", " fl417.tsp: 路径长度 = 15114.12\n", " gr431.tsp: 路径长度 = 2516.25\n", " pr439.tsp: 路径长度 = 131282.09\n", " pcb442.tsp: 路径长度 = 61984.05\n", " d493.tsp: 路径长度 = 43646.38\n", " att532.tsp: 路径长度 = 112099.45\n", " ali535.tsp: 路径长度 = 2671.07\n", " pa561.tsp: 路径长度 = 0.00\n", " u574.tsp: 路径长度 = 46881.87\n", " rat575.tsp: 路径长度 = 8449.32\n", " p654.tsp: 路径长度 = 43411.56\n", " d657.tsp: 路径长度 = 62176.40\n", " gr666.tsp: 路径长度 = 4110.90\n", " u724.tsp: 路径长度 = 55223.20\n", " rat783.tsp: 路径长度 = 11255.07\n", " dsj1000.tsp: 路径长度 = 24630960.10\n", " pr1002.tsp: 路径长度 = 315596.59\n", " u1060.tsp: 路径长度 = 281635.68\n", " vm1084.tsp: 路径长度 = 301469.23\n", " pcb1173.tsp: 路径长度 = 70277.94\n", " d1291.tsp: 路径长度 = 59941.24\n", " rl1304.tsp: 路径长度 = 339797.47\n", " rl1323.tsp: 路径长度 = 332094.97\n", " nrw1379.tsp: 路径长度 = 70015.46\n", " fl1400.tsp: 路径长度 = 26971.88\n", " u1432.tsp: 路径长度 = 188815.01\n", " burma14.tsp: 执行时间 = 0.0001秒\n", " ulysses16.tsp: 执行时间 = 0.0000秒\n", " ulysses22.tsp: 执行时间 = 0.0001秒\n", " dantzig42.tsp: 执行时间 = 0.0000秒\n", " att48.tsp: 执行时间 = 0.0003秒\n", " eil51.tsp: 执行时间 = 0.0004秒\n", " berlin52.tsp: 执行时间 = 0.0003秒\n", " st70.tsp: 执行时间 = 0.0006秒\n", " pr76.tsp: 执行时间 = 0.0003秒\n", " eil76.tsp: 执行时间 = 0.0008秒\n", " gr96.tsp: 执行时间 = 0.0010秒\n", " rat99.tsp: 执行时间 = 0.0011秒\n", " rd100.tsp: 执行时间 = 0.0015秒\n", " kroB100.tsp: 执行时间 = 0.0009秒\n", " kroD100.tsp: 执行时间 = 0.0012秒\n", " kroA100.tsp: 执行时间 = 0.0015秒\n", " kroC100.tsp: 执行时间 = 0.0010秒\n", " kroE100.tsp: 执行时间 = 0.0011秒\n", " eil101.tsp: 执行时间 = 0.0011秒\n", " lin105.tsp: 执行时间 = 0.0011秒\n", " pr107.tsp: 执行时间 = 0.0018秒\n", " pr124.tsp: 执行时间 = 0.0015秒\n", " bier127.tsp: 执行时间 = 0.0018秒\n", " ch130.tsp: 执行时间 = 0.0017秒\n", " pr136.tsp: 执行时间 = 0.0023秒\n", " gr137.tsp: 执行时间 = 0.0021秒\n", " pr144.tsp: 执行时间 = 0.0020秒\n", " kroA150.tsp: 执行时间 = 0.0019秒\n", " ch150.tsp: 执行时间 = 0.0020秒\n", " kroB150.tsp: 执行时间 = 0.0022秒\n", " pr152.tsp: 执行时间 = 0.0021秒\n", " u159.tsp: 执行时间 = 0.0023秒\n", " rat195.tsp: 执行时间 = 0.0039秒\n", " d198.tsp: 执行时间 = 0.0044秒\n", " kroB200.tsp: 执行时间 = 0.0036秒\n", " kroA200.tsp: 执行时间 = 0.0043秒\n", " gr202.tsp: 执行时间 = 0.0043秒\n", " tsp225.tsp: 执行时间 = 0.0051秒\n", " ts225.tsp: 执行时间 = 0.0057秒\n", " pr226.tsp: 执行时间 = 0.0040秒\n", " gr229.tsp: 执行时间 = 0.0048秒\n", " gil262.tsp: 执行时间 = 0.0067秒\n", " pr264.tsp: 执行时间 = 0.0071秒\n", " a280.tsp: 执行时间 = 0.0037秒\n", " pr299.tsp: 执行时间 = 0.0068秒\n", " linhp318.tsp: 执行时间 = 0.0102秒\n", " lin318.tsp: 执行时间 = 0.0096秒\n", " rd400.tsp: 执行时间 = 0.0169秒\n", " fl417.tsp: 执行时间 = 0.0178秒\n", " gr431.tsp: 执行时间 = 0.0173秒\n", " pr439.tsp: 执行时间 = 0.0169秒\n", " pcb442.tsp: 执行时间 = 0.0145秒\n", " d493.tsp: 执行时间 = 0.0121秒\n", " att532.tsp: 执行时间 = 0.0175秒\n", " ali535.tsp: 执行时间 = 0.0164秒\n", " pa561.tsp: 执行时间 = 0.0000秒\n", " u574.tsp: 执行时间 = 0.0166秒\n", " rat575.tsp: 执行时间 = 0.0157秒\n", " p654.tsp: 执行时间 = 0.0207秒\n", " d657.tsp: 执行时间 = 0.0218秒\n", " gr666.tsp: 执行时间 = 0.0266秒\n", " u724.tsp: 执行时间 = 0.0265秒\n", " rat783.tsp: 执行时间 = 0.0306秒\n", " dsj1000.tsp: 执行时间 = 0.0491秒\n", " pr1002.tsp: 执行时间 = 0.0483秒\n", " u1060.tsp: 执行时间 = 0.0591秒\n", " vm1084.tsp: 执行时间 = 0.0587秒\n", " pcb1173.tsp: 执行时间 = 0.0659秒\n", " d1291.tsp: 执行时间 = 0.0813秒\n", " rl1304.tsp: 执行时间 = 0.0839秒\n", " rl1323.tsp: 执行时间 = 0.0859秒\n", " nrw1379.tsp: 执行时间 = 0.1045秒\n", " fl1400.tsp: 执行时间 = 0.1030秒\n", " u1432.tsp: 执行时间 = 0.2142秒\n", "\n", "最近邻算法:\n", " burma14.tsp: 路径长度 = 38.69\n", " ulysses16.tsp: 路径长度 = 104.73\n", " ulysses22.tsp: 路径长度 = 89.64\n", " dantzig42.tsp: 路径长度 = 0.00\n", " att48.tsp: 路径长度 = 40526.42\n", " eil51.tsp: 路径长度 = 513.61\n", " berlin52.tsp: 路径长度 = 8980.92\n", " st70.tsp: 路径长度 = 805.53\n", " pr76.tsp: 路径长度 = 153461.92\n", " eil76.tsp: 路径长度 = 711.99\n", " gr96.tsp: 路径长度 = 707.09\n", " rat99.tsp: 路径长度 = 1564.72\n", " rd100.tsp: 路径长度 = 9941.16\n", " kroB100.tsp: 路径长度 = 29155.04\n", " kroD100.tsp: 路径长度 = 26950.46\n", " kroA100.tsp: 路径长度 = 26856.39\n", " kroC100.tsp: 路径长度 = 26327.36\n", " kroE100.tsp: 路径长度 = 27587.19\n", " eil101.tsp: 路径长度 = 825.24\n", " lin105.tsp: 路径长度 = 20362.76\n", " pr107.tsp: 路径长度 = 46678.15\n", " pr124.tsp: 路径长度 = 69299.43\n", " bier127.tsp: 路径长度 = 135751.78\n", " ch130.tsp: 路径长度 = 7575.29\n", " pr136.tsp: 路径长度 = 120777.86\n", " gr137.tsp: 路径长度 = 1022.22\n", " pr144.tsp: 路径长度 = 61650.72\n", " kroA150.tsp: 路径长度 = 33609.87\n", " ch150.tsp: 路径长度 = 8194.61\n", " kroB150.tsp: 路径长度 = 32825.75\n", " pr152.tsp: 路径长度 = 85702.95\n", " u159.tsp: 路径长度 = 54669.03\n", " rat195.tsp: 路径长度 = 2761.96\n", " d198.tsp: 路径长度 = 18620.07\n", " kroB200.tsp: 路径长度 = 36981.59\n", " kroA200.tsp: 路径长度 = 35798.41\n", " gr202.tsp: 路径长度 = 619.40\n", " tsp225.tsp: 路径长度 = 4829.00\n", " ts225.tsp: 路径长度 = 152493.55\n", " pr226.tsp: 路径长度 = 94685.45\n", " gr229.tsp: 路径长度 = 2014.71\n", " gil262.tsp: 路径长度 = 3241.47\n", " pr264.tsp: 路径长度 = 58022.86\n", " a280.tsp: 路径长度 = 3148.11\n", " pr299.tsp: 路径长度 = 59899.01\n", " linhp318.tsp: 路径长度 = 54033.58\n", " lin318.tsp: 路径长度 = 54033.58\n", " rd400.tsp: 路径长度 = 19168.05\n", " fl417.tsp: 路径长度 = 15114.12\n", " gr431.tsp: 路径长度 = 2516.25\n", " pr439.tsp: 路径长度 = 131282.09\n", " pcb442.tsp: 路径长度 = 61984.05\n", " d493.tsp: 路径长度 = 43646.38\n", " att532.tsp: 路径长度 = 112099.45\n", " ali535.tsp: 路径长度 = 2671.07\n", " pa561.tsp: 路径长度 = 0.00\n", " u574.tsp: 路径长度 = 46881.87\n", " rat575.tsp: 路径长度 = 8449.32\n", " p654.tsp: 路径长度 = 43411.56\n", " d657.tsp: 路径长度 = 62176.40\n", " gr666.tsp: 路径长度 = 4110.90\n", " u724.tsp: 路径长度 = 55223.20\n", " rat783.tsp: 路径长度 = 11255.07\n", " dsj1000.tsp: 路径长度 = 24630960.10\n", " pr1002.tsp: 路径长度 = 315596.59\n", " u1060.tsp: 路径长度 = 281635.68\n", " vm1084.tsp: 路径长度 = 301469.23\n", " pcb1173.tsp: 路径长度 = 70277.94\n", " d1291.tsp: 路径长度 = 59941.24\n", " rl1304.tsp: 路径长度 = 339797.47\n", " rl1323.tsp: 路径长度 = 332094.97\n", " nrw1379.tsp: 路径长度 = 70015.46\n", " fl1400.tsp: 路径长度 = 26971.88\n", " u1432.tsp: 路径长度 = 188815.01\n", " burma14.tsp: 执行时间 = 0.0000秒\n", " ulysses16.tsp: 执行时间 = 0.0000秒\n", " ulysses22.tsp: 执行时间 = 0.0001秒\n", " dantzig42.tsp: 执行时间 = 0.0000秒\n", " att48.tsp: 执行时间 = 0.0003秒\n", " eil51.tsp: 执行时间 = 0.0004秒\n", " berlin52.tsp: 执行时间 = 0.0005秒\n", " st70.tsp: 执行时间 = 0.0005秒\n", " pr76.tsp: 执行时间 = 0.0003秒\n", " eil76.tsp: 执行时间 = 0.0006秒\n", " gr96.tsp: 执行时间 = 0.0009秒\n", " rat99.tsp: 执行时间 = 0.0007秒\n", " rd100.tsp: 执行时间 = 0.0012秒\n", " kroB100.tsp: 执行时间 = 0.0012秒\n", " kroD100.tsp: 执行时间 = 0.0010秒\n", " kroA100.tsp: 执行时间 = 0.0010秒\n", " kroC100.tsp: 执行时间 = 0.0012秒\n", " kroE100.tsp: 执行时间 = 0.0013秒\n", " eil101.tsp: 执行时间 = 0.0015秒\n", " lin105.tsp: 执行时间 = 0.0012秒\n", " pr107.tsp: 执行时间 = 0.0015秒\n", " pr124.tsp: 执行时间 = 0.0010秒\n", " bier127.tsp: 执行时间 = 0.0018秒\n", " ch130.tsp: 执行时间 = 0.0017秒\n", " pr136.tsp: 执行时间 = 0.0019秒\n", " gr137.tsp: 执行时间 = 0.0022秒\n", " pr144.tsp: 执行时间 = 0.0021秒\n", " kroA150.tsp: 执行时间 = 0.0022秒\n", " ch150.tsp: 执行时间 = 0.0020秒\n", " kroB150.tsp: 执行时间 = 0.0026秒\n", " pr152.tsp: 执行时间 = 0.0023秒\n", " u159.tsp: 执行时间 = 0.0026秒\n", " rat195.tsp: 执行时间 = 0.0046秒\n", " d198.tsp: 执行时间 = 0.0048秒\n", " kroB200.tsp: 执行时间 = 0.0037秒\n", " kroA200.tsp: 执行时间 = 0.0037秒\n", " gr202.tsp: 执行时间 = 0.0044秒\n", " tsp225.tsp: 执行时间 = 0.0053秒\n", " ts225.tsp: 执行时间 = 0.0037秒\n", " pr226.tsp: 执行时间 = 0.0040秒\n", " gr229.tsp: 执行时间 = 0.0047秒\n", " gil262.tsp: 执行时间 = 0.0060秒\n", " pr264.tsp: 执行时间 = 0.0069秒\n", " a280.tsp: 执行时间 = 0.0041秒\n", " pr299.tsp: 执行时间 = 0.0074秒\n", " linhp318.tsp: 执行时间 = 0.0113秒\n", " lin318.tsp: 执行时间 = 0.0104秒\n", " rd400.tsp: 执行时间 = 0.0156秒\n", " fl417.tsp: 执行时间 = 0.0197秒\n", " gr431.tsp: 执行时间 = 0.0165秒\n", " pr439.tsp: 执行时间 = 0.0175秒\n", " pcb442.tsp: 执行时间 = 0.0147秒\n", " d493.tsp: 执行时间 = 0.0123秒\n", " att532.tsp: 执行时间 = 0.0164秒\n", " ali535.tsp: 执行时间 = 0.0157秒\n", " pa561.tsp: 执行时间 = 0.0000秒\n", " u574.tsp: 执行时间 = 0.0237秒\n", " rat575.tsp: 执行时间 = 0.0158秒\n", " p654.tsp: 执行时间 = 0.0207秒\n", " d657.tsp: 执行时间 = 0.0247秒\n", " gr666.tsp: 执行时间 = 0.0237秒\n", " u724.tsp: 执行时间 = 0.0262秒\n", " rat783.tsp: 执行时间 = 0.0302秒\n", " dsj1000.tsp: 执行时间 = 0.0511秒\n", " pr1002.tsp: 执行时间 = 0.0497秒\n", " u1060.tsp: 执行时间 = 0.0590秒\n", " vm1084.tsp: 执行时间 = 0.0586秒\n", " pcb1173.tsp: 执行时间 = 0.0646秒\n", " d1291.tsp: 执行时间 = 0.0811秒\n", " rl1304.tsp: 执行时间 = 0.0824秒\n", " rl1323.tsp: 执行时间 = 0.0859秒\n", " nrw1379.tsp: 执行时间 = 0.1040秒\n", " fl1400.tsp: 执行时间 = 0.1028秒\n", " u1432.tsp: 执行时间 = 0.1910秒\n", "\n", "插入法:\n", " burma14.tsp: 路径长度 = 32.44\n", " ulysses16.tsp: 路径长度 = 79.39\n", " ulysses22.tsp: 路径长度 = 76.99\n", " dantzig42.tsp: 路径长度 = inf\n", " att48.tsp: 路径长度 = 37314.09\n", " eil51.tsp: 路径长度 = 496.25\n", " berlin52.tsp: 路径长度 = 9014.89\n", " st70.tsp: 路径长度 = 778.99\n", " pr76.tsp: 路径长度 = 125936.21\n", " eil76.tsp: 路径长度 = 612.39\n", " gr96.tsp: 路径长度 = 651.44\n", " rat99.tsp: 路径长度 = 1482.02\n", " rd100.tsp: 路径长度 = 8979.37\n", " kroB100.tsp: 路径长度 = 25580.92\n", " kroD100.tsp: 路径长度 = 25204.27\n", " kroA100.tsp: 路径长度 = 24307.78\n", " kroC100.tsp: 路径长度 = 25262.17\n", " kroE100.tsp: 路径长度 = 25902.00\n", " eil101.tsp: 路径长度 = 702.96\n", " lin105.tsp: 路径长度 = 16934.62\n", " pr107.tsp: 路径长度 = 52587.76\n", " pr124.tsp: 路径长度 = 65318.19\n", " bier127.tsp: 路径长度 = 140690.94\n", " ch130.tsp: 路径长度 = 7279.21\n", " pr136.tsp: 路径长度 = 109587.25\n", " gr137.tsp: 路径长度 = 821.29\n", " pr144.tsp: 路径长度 = 73033.13\n", " kroA150.tsp: 路径长度 = 29966.54\n", " ch150.tsp: 路径长度 = 7994.29\n", " kroB150.tsp: 路径长度 = 31588.68\n", " pr152.tsp: 路径长度 = 88530.82\n", " u159.tsp: 路径长度 = 49981.41\n", " rat195.tsp: 路径长度 = 2814.57\n", " d198.tsp: 路径长度 = 17631.80\n", " kroB200.tsp: 路径长度 = 35421.70\n", " kroA200.tsp: 路径长度 = 35337.51\n", " gr202.tsp: 路径长度 = 570.14\n", " tsp225.tsp: 路径长度 = 4468.20\n", " ts225.tsp: 路径长度 = 160009.16\n", " pr226.tsp: 路径长度 = 91024.65\n", " gr229.tsp: 路径长度 = 1825.83\n", " gil262.tsp: 路径长度 = 2804.23\n", " pr264.tsp: 路径长度 = 58225.34\n", " a280.tsp: 路径长度 = 3101.79\n", " pr299.tsp: 路径长度 = 58124.45\n", " linhp318.tsp: 路径长度 = 49454.81\n", " lin318.tsp: 路径长度 = 49454.81\n", " rd400.tsp: 路径长度 = 18629.98\n", " fl417.tsp: 路径长度 = 14179.84\n", " gr431.tsp: 路径长度 = 2214.43\n", " pr439.tsp: 路径长度 = 130067.88\n", " pcb442.tsp: 路径长度 = 60891.83\n", " d493.tsp: 路径长度 = 39982.31\n", " att532.tsp: 路径长度 = 102201.61\n", " ali535.tsp: 路径长度 = 2366.95\n", " pa561.tsp: 路径长度 = inf\n", " u574.tsp: 路径长度 = 44144.83\n", " rat575.tsp: 路径长度 = 7853.86\n", " p654.tsp: 路径长度 = 40418.68\n", " d657.tsp: 路径长度 = 57906.66\n", " gr666.tsp: 路径长度 = 3670.13\n", " u724.tsp: 路径长度 = 50245.77\n", " rat783.tsp: 路径长度 = 10301.88\n", " dsj1000.tsp: 路径长度 = 22291166.04\n", " pr1002.tsp: 路径长度 = 302938.90\n", " u1060.tsp: 路径长度 = 270377.38\n", " vm1084.tsp: 路径长度 = 277435.70\n", " pcb1173.tsp: 路径长度 = 69010.68\n", " d1291.tsp: 路径长度 = 59956.75\n", " rl1304.tsp: 路径长度 = 314295.61\n", " rl1323.tsp: 路径长度 = 341512.46\n", " nrw1379.tsp: 路径长度 = 66216.21\n", " fl1400.tsp: 路径长度 = 22955.32\n", " u1432.tsp: 路径长度 = 171110.62\n", " burma14.tsp: 执行时间 = 0.0010秒\n", " ulysses16.tsp: 执行时间 = 0.0004秒\n", " ulysses22.tsp: 执行时间 = 0.0011秒\n", " dantzig42.tsp: 执行时间 = inf秒\n", " att48.tsp: 执行时间 = 0.0112秒\n", " eil51.tsp: 执行时间 = 0.0150秒\n", " berlin52.tsp: 执行时间 = 0.0169秒\n", " st70.tsp: 执行时间 = 0.0393秒\n", " pr76.tsp: 执行时间 = 0.0463秒\n", " eil76.tsp: 执行时间 = 0.0473秒\n", " gr96.tsp: 执行时间 = 0.0832秒\n", " rat99.tsp: 执行时间 = 0.0929秒\n", " rd100.tsp: 执行时间 = 0.0966秒\n", " kroB100.tsp: 执行时间 = 0.0981秒\n", " kroD100.tsp: 执行时间 = 0.0972秒\n", " kroA100.tsp: 执行时间 = 0.1088秒\n", " kroC100.tsp: 执行时间 = 0.1006秒\n", " kroE100.tsp: 执行时间 = 0.1067秒\n", " eil101.tsp: 执行时间 = 0.1047秒\n", " lin105.tsp: 执行时间 = 0.1178秒\n", " pr107.tsp: 执行时间 = 0.1222秒\n", " pr124.tsp: 执行时间 = 0.1867秒\n", " bier127.tsp: 执行时间 = 0.2051秒\n", " ch130.tsp: 执行时间 = 0.2264秒\n", " pr136.tsp: 执行时间 = 0.2532秒\n", " gr137.tsp: 执行时间 = 0.2709秒\n", " pr144.tsp: 执行时间 = 0.2869秒\n", " kroA150.tsp: 执行时间 = 0.3287秒\n", " ch150.tsp: 执行时间 = 0.3128秒\n", " kroB150.tsp: 执行时间 = 0.3337秒\n", " pr152.tsp: 执行时间 = 0.3738秒\n", " u159.tsp: 执行时间 = 0.4197秒\n", " rat195.tsp: 执行时间 = 0.7990秒\n", " d198.tsp: 执行时间 = 0.7791秒\n", " kroB200.tsp: 执行时间 = 0.8396秒\n", " kroA200.tsp: 执行时间 = 0.8220秒\n", " gr202.tsp: 执行时间 = 0.8180秒\n", " tsp225.tsp: 执行时间 = 1.1301秒\n", " ts225.tsp: 执行时间 = 1.0775秒\n", " pr226.tsp: 执行时间 = 1.1298秒\n", " gr229.tsp: 执行时间 = 1.1679秒\n", " gil262.tsp: 执行时间 = 1.7432秒\n", " pr264.tsp: 执行时间 = 1.8694秒\n", " a280.tsp: 执行时间 = 2.0843秒\n", " pr299.tsp: 执行时间 = 2.4582秒\n", " linhp318.tsp: 执行时间 = 3.5168秒\n", " lin318.tsp: 执行时间 = 3.4641秒\n", " rd400.tsp: 执行时间 = 6.9163秒\n", " fl417.tsp: 执行时间 = 7.6338秒\n", " gr431.tsp: 执行时间 = 8.1149秒\n", " pr439.tsp: 执行时间 = 6.2646秒\n", " pcb442.tsp: 执行时间 = 6.2491秒\n", " d493.tsp: 执行时间 = 6.6914秒\n", " att532.tsp: 执行时间 = 9.7124秒\n", " ali535.tsp: 执行时间 = 9.8289秒\n", " pa561.tsp: 执行时间 = inf秒\n", " u574.tsp: 执行时间 = 12.5508秒\n", " rat575.tsp: 执行时间 = 10.7083秒\n", " p654.tsp: 执行时间 = 18.7784秒\n", " d657.tsp: 执行时间 = 18.7046秒\n", " gr666.tsp: 执行时间 = 18.7978秒\n", " u724.tsp: 执行时间 = 21.4646秒\n", " rat783.tsp: 执行时间 = 27.2072秒\n", " dsj1000.tsp: 执行时间 = 58.0007秒\n", " pr1002.tsp: 执行时间 = 66.0344秒\n", " u1060.tsp: 执行时间 = 77.2518秒\n", " vm1084.tsp: 执行时间 = 82.4780秒\n", " pcb1173.tsp: 执行时间 = 91.5772秒\n", " d1291.tsp: 执行时间 = 127.4454秒\n", " rl1304.tsp: 执行时间 = 130.1252秒\n", " rl1323.tsp: 执行时间 = 129.8820秒\n", " nrw1379.tsp: 执行时间 = 158.2882秒\n", " fl1400.tsp: 执行时间 = 186.6609秒\n", " u1432.tsp: 执行时间 = 212.7076秒\n", "\n", "EoH-TSP:\n", " burma14.tsp: 路径长度 = 38.69\n", " ulysses16.tsp: 路径长度 = 88.25\n", " ulysses22.tsp: 路径长度 = 82.21\n", " dantzig42.tsp: 路径长度 = inf\n", " att48.tsp: 路径长度 = 40526.42\n", " eil51.tsp: 路径长度 = 513.61\n", " berlin52.tsp: 路径长度 = 8980.92\n", " st70.tsp: 路径长度 = 800.35\n", " pr76.tsp: 路径长度 = 141744.29\n", " eil76.tsp: 路径长度 = 669.24\n", " gr96.tsp: 路径长度 = 707.09\n", " rat99.tsp: 路径长度 = 1564.72\n", " rd100.tsp: 路径长度 = 9941.16\n", " kroB100.tsp: 路径长度 = 29155.04\n", " kroD100.tsp: 路径长度 = 26950.46\n", " kroA100.tsp: 路径长度 = 26856.39\n", " kroC100.tsp: 路径长度 = 26327.36\n", " kroE100.tsp: 路径长度 = 27587.19\n", " eil101.tsp: 路径长度 = 847.59\n", " lin105.tsp: 路径长度 = 20362.76\n", " pr107.tsp: 路径长度 = 47029.63\n", " pr124.tsp: 路径长度 = 69299.43\n", " bier127.tsp: 路径长度 = 135751.78\n", " ch130.tsp: 路径长度 = 7575.29\n", " pr136.tsp: 路径长度 = 118776.81\n", " gr137.tsp: 路径长度 = 1022.22\n", " pr144.tsp: 路径长度 = 61650.72\n", " kroA150.tsp: 路径长度 = 33609.87\n", " ch150.tsp: 路径长度 = 8194.61\n", " kroB150.tsp: 路径长度 = 32825.75\n", " pr152.tsp: 路径长度 = 85702.95\n", " u159.tsp: 路径长度 = 57436.69\n", " rat195.tsp: 路径长度 = 2761.96\n", " d198.tsp: 路径长度 = 18620.07\n", " kroB200.tsp: 路径长度 = 36981.59\n", " kroA200.tsp: 路径长度 = 35798.41\n", " gr202.tsp: 路径长度 = 619.40\n", " tsp225.tsp: 路径长度 = 4786.42\n", " ts225.tsp: 路径长度 = 146183.10\n", " pr226.tsp: 路径长度 = 94402.09\n", " gr229.tsp: 路径长度 = 2014.71\n", " gil262.tsp: 路径长度 = 3259.42\n", " pr264.tsp: 路径长度 = 58328.28\n", " a280.tsp: 路径长度 = 3182.09\n", " pr299.tsp: 路径长度 = 60220.49\n", " linhp318.tsp: 路径长度 = 53993.19\n", " lin318.tsp: 路径长度 = 54033.58\n", " rd400.tsp: 路径长度 = 19168.05\n", " fl417.tsp: 路径长度 = 15256.42\n", " gr431.tsp: 路径长度 = 2516.25\n", " pr439.tsp: 路径长度 = 137778.50\n", " pcb442.tsp: 路径长度 = 61234.77\n", " d493.tsp: 路径长度 = 43710.70\n", " att532.tsp: 路径长度 = 112099.45\n", " ali535.tsp: 路径长度 = 2671.07\n", " pa561.tsp: 路径长度 = inf\n", " u574.tsp: 路径长度 = 46881.87\n", " rat575.tsp: 路径长度 = 8430.71\n", " p654.tsp: 路径长度 = 48824.31\n", " d657.tsp: 路径长度 = 62176.40\n", " gr666.tsp: 路径长度 = 4110.90\n", " u724.tsp: 路径长度 = 52482.39\n", " rat783.tsp: 路径长度 = 11255.07\n", " dsj1000.tsp: 路径长度 = 24630960.10\n", " pr1002.tsp: 路径长度 = 325311.07\n", " u1060.tsp: 路径长度 = 280689.98\n", " vm1084.tsp: 路径长度 = 302111.10\n", " pcb1173.tsp: 路径长度 = 70279.94\n", " d1291.tsp: 路径长度 = 59892.04\n", " rl1304.tsp: 路径长度 = 335160.35\n", " rl1323.tsp: 路径长度 = 331159.20\n", " nrw1379.tsp: 路径长度 = 69794.61\n", " fl1400.tsp: 路径长度 = 27057.04\n", " u1432.tsp: 路径长度 = 196453.25\n", " burma14.tsp: 执行时间 = 0.0136秒\n", " ulysses16.tsp: 执行时间 = 0.0113秒\n", " ulysses22.tsp: 执行时间 = 0.0144秒\n", " dantzig42.tsp: 执行时间 = inf秒\n", " att48.tsp: 执行时间 = 0.0363秒\n", " eil51.tsp: 执行时间 = 0.0373秒\n", " berlin52.tsp: 执行时间 = 0.0456秒\n", " st70.tsp: 执行时间 = 0.0635秒\n", " pr76.tsp: 执行时间 = 0.0707秒\n", " eil76.tsp: 执行时间 = 0.0599秒\n", " gr96.tsp: 执行时间 = 0.0823秒\n", " rat99.tsp: 执行时间 = 0.0926秒\n", " rd100.tsp: 执行时间 = 0.0791秒\n", " kroB100.tsp: 执行时间 = 0.0874秒\n", " kroD100.tsp: 执行时间 = 0.0952秒\n", " kroA100.tsp: 执行时间 = 0.0976秒\n", " kroC100.tsp: 执行时间 = 0.0923秒\n", " kroE100.tsp: 执行时间 = 0.0917秒\n", " eil101.tsp: 执行时间 = 0.0899秒\n", " lin105.tsp: 执行时间 = 0.0933秒\n", " pr107.tsp: 执行时间 = 0.0850秒\n", " pr124.tsp: 执行时间 = 0.1198秒\n", " bier127.tsp: 执行时间 = 0.1205秒\n", " ch130.tsp: 执行时间 = 0.1234秒\n", " pr136.tsp: 执行时间 = 0.1206秒\n", " gr137.tsp: 执行时间 = 0.1346秒\n", " pr144.tsp: 执行时间 = 0.1331秒\n", " kroA150.tsp: 执行时间 = 0.1343秒\n", " ch150.tsp: 执行时间 = 0.1503秒\n", " kroB150.tsp: 执行时间 = 0.1425秒\n", " pr152.tsp: 执行时间 = 0.1372秒\n", " u159.tsp: 执行时间 = 0.1548秒\n", " rat195.tsp: 执行时间 = 0.2376秒\n", " d198.tsp: 执行时间 = 0.2144秒\n", " kroB200.tsp: 执行时间 = 0.2561秒\n", " kroA200.tsp: 执行时间 = 0.2057秒\n", " gr202.tsp: 执行时间 = 0.2131秒\n", " tsp225.tsp: 执行时间 = 0.2429秒\n", " ts225.tsp: 执行时间 = 0.2497秒\n", " pr226.tsp: 执行时间 = 0.2426秒\n", " gr229.tsp: 执行时间 = 0.2532秒\n", " gil262.tsp: 执行时间 = 0.3277秒\n", " pr264.tsp: 执行时间 = 0.3348秒\n", " a280.tsp: 执行时间 = 0.3710秒\n", " pr299.tsp: 执行时间 = 0.4082秒\n", " linhp318.tsp: 执行时间 = 0.5548秒\n", " lin318.tsp: 执行时间 = 0.4869秒\n", " rd400.tsp: 执行时间 = 0.7092秒\n", " fl417.tsp: 执行时间 = 0.7209秒\n", " gr431.tsp: 执行时间 = 0.8217秒\n", " pr439.tsp: 执行时间 = 0.4491秒\n", " pcb442.tsp: 执行时间 = 0.5471秒\n", " d493.tsp: 执行时间 = 0.4954秒\n", " att532.tsp: 执行时间 = 0.6501秒\n", " ali535.tsp: 执行时间 = 0.5881秒\n", " pa561.tsp: 执行时间 = inf秒\n", " u574.tsp: 执行时间 = 0.7088秒\n", " rat575.tsp: 执行时间 = 0.6515秒\n", " p654.tsp: 执行时间 = 0.9786秒\n", " d657.tsp: 执行时间 = 0.9157秒\n", " gr666.tsp: 执行时间 = 1.0282秒\n", " u724.tsp: 执行时间 = 1.0141秒\n", " rat783.tsp: 执行时间 = 1.1461秒\n", " dsj1000.tsp: 执行时间 = 1.8257秒\n", " pr1002.tsp: 执行时间 = 2.8392秒\n", " u1060.tsp: 执行时间 = 2.6807秒\n", " vm1084.tsp: 执行时间 = 2.6446秒\n", " pcb1173.tsp: 执行时间 = 2.8048秒\n", " d1291.tsp: 执行时间 = 2.8732秒\n", " rl1304.tsp: 执行时间 = 3.2245秒\n", " rl1323.tsp: 执行时间 = 3.0296秒\n", " nrw1379.tsp: 执行时间 = 3.6320秒\n", " fl1400.tsp: 执行时间 = 3.4932秒\n", " u1432.tsp: 执行时间 = 3.5985秒\n", "\n", "AAD-TSP:\n", " burma14.tsp: 路径长度 = 30.88\n", " ulysses16.tsp: 路径长度 = 74.20\n", " ulysses22.tsp: 路径长度 = 76.13\n", " dantzig42.tsp: 路径长度 = inf\n", " att48.tsp: 路径长度 = 35594.44\n", " eil51.tsp: 路径长度 = 465.91\n", " berlin52.tsp: 路径长度 = 8383.59\n", " st70.tsp: 路径长度 = 753.15\n", " pr76.tsp: 路径长度 = 113661.65\n", " eil76.tsp: 路径长度 = 622.71\n", " gr96.tsp: 路径长度 = 623.53\n", " rat99.tsp: 路径长度 = 1377.07\n", " rd100.tsp: 路径长度 = 8864.57\n", " kroB100.tsp: 路径长度 = 25613.43\n", " kroD100.tsp: 路径长度 = 24720.72\n", " kroA100.tsp: 路径长度 = 23078.70\n", " kroC100.tsp: 路径长度 = 23205.07\n", " kroE100.tsp: 路径长度 = 24382.95\n", " eil101.tsp: 路径长度 = 702.70\n", " lin105.tsp: 路径长度 = 18092.45\n", " pr107.tsp: 路径长度 = 45487.66\n", " pr124.tsp: 路径长度 = 60665.35\n", " bier127.tsp: 路径长度 = 122761.77\n", " ch130.tsp: 路径长度 = 7093.18\n", " pr136.tsp: 路径长度 = 110107.30\n", " gr137.tsp: 路径长度 = 849.98\n", " pr144.tsp: 路径长度 = 61399.21\n", " kroA150.tsp: 路径长度 = 28613.32\n", " ch150.tsp: 路径长度 = 7161.32\n", " kroB150.tsp: 路径长度 = 28339.58\n", " pr152.tsp: 路径长度 = 80000.73\n", " u159.tsp: 路径长度 = 50463.07\n", " rat195.tsp: 路径长度 = 2490.60\n", " d198.tsp: 路径长度 = 17340.94\n", " kroB200.tsp: 路径长度 = 34175.92\n", " kroA200.tsp: 路径长度 = 30478.90\n", " gr202.tsp: 路径长度 = 529.30\n", " tsp225.tsp: 路径长度 = 4169.09\n", " ts225.tsp: 路径长度 = 139697.02\n", " pr226.tsp: 路径长度 = 87543.04\n", " gr229.tsp: 路径长度 = 1764.18\n", " gil262.tsp: 路径长度 = 2757.03\n", " pr264.tsp: 路径长度 = 56762.06\n", " a280.tsp: 路径长度 = 2828.71\n", " pr299.tsp: 路径长度 = 52408.65\n", " linhp318.tsp: 路径长度 = 49153.11\n", " lin318.tsp: 路径长度 = 49153.11\n", " rd400.tsp: 路径长度 = 16651.71\n", " fl417.tsp: 路径长度 = 13630.60\n", " gr431.tsp: 路径长度 = 2153.00\n", " pr439.tsp: 路径长度 = 118466.33\n", " pcb442.tsp: 路径长度 = 54291.55\n", " d493.tsp: 路径长度 = 38869.88\n", " att532.tsp: 路径长度 = 99028.54\n", " ali535.tsp: 路径长度 = 2269.30\n", " pa561.tsp: 路径长度 = inf\n", " u574.tsp: 路径长度 = 39154.50\n", " rat575.tsp: 路径长度 = 7398.48\n", " p654.tsp: 路径长度 = 38249.53\n", " d657.tsp: 路径长度 = 54801.59\n", " gr666.tsp: 路径长度 = 3507.73\n", " u724.tsp: 路径长度 = 47256.49\n", " rat783.tsp: 路径长度 = 9468.73\n", " dsj1000.tsp: 路径长度 = 21147745.60\n", " pr1002.tsp: 路径长度 = 278851.88\n", " u1060.tsp: 路径长度 = 241924.19\n", " vm1084.tsp: 路径长度 = 263604.55\n", " pcb1173.tsp: 路径长度 = 62453.05\n", " d1291.tsp: 路径长度 = 55389.49\n", " rl1304.tsp: 路径长度 = 284242.81\n", " rl1323.tsp: 路径长度 = 299654.18\n", " nrw1379.tsp: 路径长度 = 61838.87\n", " fl1400.tsp: 路径长度 = 22420.49\n", " u1432.tsp: 路径长度 = 167338.88\n", " burma14.tsp: 执行时间 = 0.0212秒\n", " ulysses16.tsp: 执行时间 = 0.0254秒\n", " ulysses22.tsp: 执行时间 = 0.0340秒\n", " dantzig42.tsp: 执行时间 = inf秒\n", " att48.tsp: 执行时间 = 0.0693秒\n", " eil51.tsp: 执行时间 = 0.0755秒\n", " berlin52.tsp: 执行时间 = 0.0881秒\n", " st70.tsp: 执行时间 = 0.1139秒\n", " pr76.tsp: 执行时间 = 0.1455秒\n", " eil76.tsp: 执行时间 = 0.1086秒\n", " gr96.tsp: 执行时间 = 0.2177秒\n", " rat99.tsp: 执行时间 = 0.1861秒\n", " rd100.tsp: 执行时间 = 0.1733秒\n", " kroB100.tsp: 执行时间 = 0.1947秒\n", " kroD100.tsp: 执行时间 = 0.1958秒\n", " kroA100.tsp: 执行时间 = 0.2082秒\n", " kroC100.tsp: 执行时间 = 0.1707秒\n", " kroE100.tsp: 执行时间 = 0.1582秒\n", " eil101.tsp: 执行时间 = 0.2089秒\n", " lin105.tsp: 执行时间 = 0.2248秒\n", " pr107.tsp: 执行时间 = 0.1293秒\n", " pr124.tsp: 执行时间 = 0.2008秒\n", " bier127.tsp: 执行时间 = 0.2334秒\n", " ch130.tsp: 执行时间 = 0.2159秒\n", " pr136.tsp: 执行时间 = 0.2525秒\n", " gr137.tsp: 执行时间 = 0.4666秒\n", " pr144.tsp: 执行时间 = 0.1867秒\n", " kroA150.tsp: 执行时间 = 0.3946秒\n", " ch150.tsp: 执行时间 = 0.4033秒\n", " kroB150.tsp: 执行时间 = 0.4610秒\n", " pr152.tsp: 执行时间 = 0.3713秒\n", " u159.tsp: 执行时间 = 0.3393秒\n", " rat195.tsp: 执行时间 = 0.5750秒\n", " d198.tsp: 执行时间 = 0.5679秒\n", " kroB200.tsp: 执行时间 = 0.6496秒\n", " kroA200.tsp: 执行时间 = 0.9275秒\n", " gr202.tsp: 执行时间 = 0.8817秒\n", " tsp225.tsp: 执行时间 = 1.1539秒\n", " ts225.tsp: 执行时间 = 0.7152秒\n", " pr226.tsp: 执行时间 = 0.5740秒\n", " gr229.tsp: 执行时间 = 0.9931秒\n", " gil262.tsp: 执行时间 = 1.8501秒\n", " pr264.tsp: 执行时间 = 0.7189秒\n", " a280.tsp: 执行时间 = 1.2460秒\n", " pr299.tsp: 执行时间 = 1.5777秒\n", " linhp318.tsp: 执行时间 = 2.2579秒\n", " lin318.tsp: 执行时间 = 2.2018秒\n", " rd400.tsp: 执行时间 = 4.5916秒\n", " fl417.tsp: 执行时间 = 7.5823秒\n", " gr431.tsp: 执行时间 = 5.4522秒\n", " pr439.tsp: 执行时间 = 2.5368秒\n", " pcb442.tsp: 执行时间 = 2.7801秒\n", " d493.tsp: 执行时间 = 4.9482秒\n", " att532.tsp: 执行时间 = 6.3833秒\n", " ali535.tsp: 执行时间 = 8.2581秒\n", " pa561.tsp: 执行时间 = inf秒\n", " u574.tsp: 执行时间 = 8.8392秒\n", " rat575.tsp: 执行时间 = 6.0627秒\n", " p654.tsp: 执行时间 = 12.9592秒\n", " d657.tsp: 执行时间 = 9.9684秒\n", " gr666.tsp: 执行时间 = 19.6285秒\n", " u724.tsp: 执行时间 = 13.3697秒\n", " rat783.tsp: 执行时间 = 22.3859秒\n", " dsj1000.tsp: 执行时间 = 59.6672秒\n", " pr1002.tsp: 执行时间 = 41.2541秒\n", " u1060.tsp: 执行时间 = 49.7501秒\n", " vm1084.tsp: 执行时间 = 35.7943秒\n", " pcb1173.tsp: 执行时间 = 45.7643秒\n", " d1291.tsp: 执行时间 = 17.4007秒\n", " rl1304.tsp: 执行时间 = 49.8281秒\n", " rl1323.tsp: 执行时间 = 44.1189秒\n", " nrw1379.tsp: 执行时间 = 96.8080秒\n", " fl1400.tsp: 执行时间 = 265.7287秒\n", " u1432.tsp: 执行时间 = 79.1341秒\n", "\n", "MEoH-TSP:\n", " burma14.tsp: 路径长度 = 38.80\n", " ulysses16.tsp: 路径长度 = 104.65\n", " ulysses22.tsp: 路径长度 = 91.92\n", " dantzig42.tsp: 路径长度 = inf\n", " att48.tsp: 路径长度 = 37686.87\n", " eil51.tsp: 路径长度 = 458.95\n", " berlin52.tsp: 路径长度 = 8835.06\n", " st70.tsp: 路径长度 = 871.65\n", " pr76.tsp: 路径长度 = 123787.14\n", " eil76.tsp: 路径长度 = 577.27\n", " gr96.tsp: 路径长度 = 573.48\n", " rat99.tsp: 路径长度 = 1492.74\n", " rd100.tsp: 路径长度 = 10510.18\n", " kroB100.tsp: 路径长度 = 25679.71\n", " kroD100.tsp: 路径长度 = 26072.81\n", " kroA100.tsp: 路径长度 = 22683.29\n", " kroC100.tsp: 路径长度 = 24294.06\n", " kroE100.tsp: 路径长度 = 25221.45\n", " eil101.tsp: 路径长度 = 720.41\n", " lin105.tsp: 路径长度 = 19041.58\n", " pr107.tsp: 路径长度 = 51115.61\n", " pr124.tsp: 路径长度 = 68371.30\n", " bier127.tsp: 路径长度 = 138054.23\n", " ch130.tsp: 路径长度 = 7091.76\n", " pr136.tsp: 路径长度 = 123247.21\n", " gr137.tsp: 路径长度 = 901.99\n", " pr144.tsp: 路径长度 = 60133.16\n", " kroA150.tsp: 路径长度 = 31060.89\n", " ch150.tsp: 路径长度 = 7589.72\n", " kroB150.tsp: 路径长度 = 29848.14\n", " pr152.tsp: 路径长度 = 92682.12\n", " u159.tsp: 路径长度 = 51577.24\n", " rat195.tsp: 路径长度 = 2575.61\n", " d198.tsp: 路径长度 = 19454.99\n", " kroB200.tsp: 路径长度 = 34079.08\n", " kroA200.tsp: 路径长度 = 33224.38\n", " gr202.tsp: 路径长度 = 559.57\n", " tsp225.tsp: 路径长度 = 4430.19\n", " ts225.tsp: 路径长度 = 131162.09\n", " pr226.tsp: 路径长度 = 96212.20\n", " gr229.tsp: 路径长度 = 1987.56\n", " gil262.tsp: 路径长度 = 2748.90\n", " pr264.tsp: 路径长度 = 59000.73\n", " a280.tsp: 路径长度 = 3448.00\n", " pr299.tsp: 路径长度 = 61338.05\n", " linhp318.tsp: 路径长度 = 50085.92\n", " lin318.tsp: 路径长度 = 50085.92\n", " rd400.tsp: 路径长度 = 17599.52\n", " fl417.tsp: 路径长度 = 13680.66\n", " gr431.tsp: 路径长度 = 2263.78\n", " pr439.tsp: 路径长度 = 134814.09\n", " pcb442.tsp: 路径长度 = 58899.52\n", " d493.tsp: 路径长度 = 43050.15\n", " att532.tsp: 路径长度 = 103710.35\n", " ali535.tsp: 路径长度 = 2630.32\n", " pa561.tsp: 路径长度 = inf\n", " u574.tsp: 路径长度 = 46620.28\n", " rat575.tsp: 路径长度 = 7808.10\n", " p654.tsp: 路径长度 = 41009.57\n", " d657.tsp: 路径长度 = 63518.97\n", " gr666.tsp: 路径长度 = 3920.88\n", " u724.tsp: 路径长度 = 49538.41\n", " rat783.tsp: 路径长度 = 11151.44\n", " dsj1000.tsp: 路径长度 = 23977443.37\n", " pr1002.tsp: 路径长度 = 320713.45\n", " u1060.tsp: 路径长度 = 270485.28\n", " vm1084.tsp: 路径长度 = 273437.36\n", " pcb1173.tsp: 路径长度 = 71441.00\n", " d1291.tsp: 路径长度 = 62211.60\n", " rl1304.tsp: 路径长度 = 303550.70\n", " rl1323.tsp: 路径长度 = 334237.62\n", " nrw1379.tsp: 路径长度 = 68362.91\n", " fl1400.tsp: 路径长度 = 23757.04\n", " u1432.tsp: 路径长度 = 173489.17\n", " burma14.tsp: 执行时间 = 0.0010秒\n", " ulysses16.tsp: 执行时间 = 0.0012秒\n", " ulysses22.tsp: 执行时间 = 0.0012秒\n", " dantzig42.tsp: 执行时间 = inf秒\n", " att48.tsp: 执行时间 = 0.0033秒\n", " eil51.tsp: 执行时间 = 0.0032秒\n", " berlin52.tsp: 执行时间 = 0.0030秒\n", " st70.tsp: 执行时间 = 0.0036秒\n", " pr76.tsp: 执行时间 = 0.0047秒\n", " eil76.tsp: 执行时间 = 0.0040秒\n", " gr96.tsp: 执行时间 = 0.0063秒\n", " rat99.tsp: 执行时间 = 0.0046秒\n", " rd100.tsp: 执行时间 = 0.0046秒\n", " kroB100.tsp: 执行时间 = 0.0046秒\n", " kroD100.tsp: 执行时间 = 0.0036秒\n", " kroA100.tsp: 执行时间 = 0.0069秒\n", " kroC100.tsp: 执行时间 = 0.0060秒\n", " kroE100.tsp: 执行时间 = 0.0053秒\n", " eil101.tsp: 执行时间 = 0.0063秒\n", " lin105.tsp: 执行时间 = 0.0086秒\n", " pr107.tsp: 执行时间 = 0.0042秒\n", " pr124.tsp: 执行时间 = 0.0061秒\n", " bier127.tsp: 执行时间 = 0.0059秒\n", " ch130.tsp: 执行时间 = 0.0068秒\n", " pr136.tsp: 执行时间 = 0.0069秒\n", " gr137.tsp: 执行时间 = 0.0077秒\n", " pr144.tsp: 执行时间 = 0.0056秒\n", " kroA150.tsp: 执行时间 = 0.0073秒\n", " ch150.tsp: 执行时间 = 0.0069秒\n", " kroB150.tsp: 执行时间 = 0.0083秒\n", " pr152.tsp: 执行时间 = 0.0107秒\n", " u159.tsp: 执行时间 = 0.0089秒\n", " rat195.tsp: 执行时间 = 0.0107秒\n", " d198.tsp: 执行时间 = 0.0084秒\n", " kroB200.tsp: 执行时间 = 0.0090秒\n", " kroA200.tsp: 执行时间 = 0.0118秒\n", " gr202.tsp: 执行时间 = 0.0115秒\n", " tsp225.tsp: 执行时间 = 0.0096秒\n", " ts225.tsp: 执行时间 = 0.0114秒\n", " pr226.tsp: 执行时间 = 0.0107秒\n", " gr229.tsp: 执行时间 = 0.0099秒\n", " gil262.tsp: 执行时间 = 0.0154秒\n", " pr264.tsp: 执行时间 = 0.0059秒\n", " a280.tsp: 执行时间 = 0.0127秒\n", " pr299.tsp: 执行时间 = 0.0178秒\n", " linhp318.tsp: 执行时间 = 0.0173秒\n", " lin318.tsp: 执行时间 = 0.0220秒\n", " rd400.tsp: 执行时间 = 0.0297秒\n", " fl417.tsp: 执行时间 = 0.0236秒\n", " gr431.tsp: 执行时间 = 0.0250秒\n", " pr439.tsp: 执行时间 = 0.0130秒\n", " pcb442.tsp: 执行时间 = 0.0156秒\n", " d493.tsp: 执行时间 = 0.0196秒\n", " att532.tsp: 执行时间 = 0.0229秒\n", " ali535.tsp: 执行时间 = 0.0202秒\n", " pa561.tsp: 执行时间 = inf秒\n", " u574.tsp: 执行时间 = 0.0193秒\n", " rat575.tsp: 执行时间 = 0.0200秒\n", " p654.tsp: 执行时间 = 0.0310秒\n", " d657.tsp: 执行时间 = 0.0275秒\n", " gr666.tsp: 执行时间 = 0.0308秒\n", " u724.tsp: 执行时间 = 0.0300秒\n", " rat783.tsp: 执行时间 = 0.0357秒\n", " dsj1000.tsp: 执行时间 = 0.0577秒\n", " pr1002.tsp: 执行时间 = 0.0629秒\n", " u1060.tsp: 执行时间 = 0.0943秒\n", " vm1084.tsp: 执行时间 = 0.0649秒\n", " pcb1173.tsp: 执行时间 = 0.0674秒\n", " d1291.tsp: 执行时间 = 0.0787秒\n", " rl1304.tsp: 执行时间 = 0.1418秒\n", " rl1323.tsp: 执行时间 = 0.0974秒\n", " nrw1379.tsp: 执行时间 = 0.1103秒\n", " fl1400.tsp: 执行时间 = 0.1604秒\n", " u1432.tsp: 执行时间 = 0.0944秒\n", "\n", "各算法在不同实例上的路径长度:\n", " 贪心算法 最近邻算法 插入法 EoH-TSP AAD-TSP MEoH-TSP\n", "burma14 38.69 38.69 32.44 38.69 30.88 38.80\n", "ulysses16 104.73 104.73 79.39 88.25 74.20 104.65\n", "ulysses22 89.64 89.64 76.99 82.21 76.13 91.92\n", "dantzig42 0.00 0.00 inf inf inf inf\n", "att48 40526.42 40526.42 37314.09 40526.42 35594.44 37686.87\n", "... ... ... ... ... ... ...\n", "rl1304 339797.47 339797.47 314295.61 335160.35 284242.81 303550.70\n", "rl1323 332094.97 332094.97 341512.46 331159.20 299654.18 334237.62\n", "nrw1379 70015.46 70015.46 66216.21 69794.61 61838.87 68362.91\n", "fl1400 26971.88 26971.88 22955.32 27057.04 22420.49 23757.04\n", "u1432 188815.01 188815.01 171110.62 196453.25 167338.88 173489.17\n", "\n", "[74 rows x 6 columns]\n", "\n", "各算法在不同实例上的运行时长:\n", " 贪心算法 最近邻算法 插入法 EoH-TSP AAD-TSP MEoH-TSP\n", "burma14 0.0001 0.0000 0.0010 0.0136 0.0212 0.0010\n", "ulysses16 0.0000 0.0000 0.0004 0.0113 0.0254 0.0012\n", "ulysses22 0.0001 0.0001 0.0011 0.0144 0.0340 0.0012\n", "dantzig42 0.0000 0.0000 inf inf inf inf\n", "att48 0.0003 0.0003 0.0112 0.0363 0.0693 0.0033\n", "... ... ... ... ... ... ...\n", "rl1304 0.0839 0.0824 130.1252 3.2245 49.8281 0.1418\n", "rl1323 0.0859 0.0859 129.8820 3.0296 44.1189 0.0974\n", "nrw1379 0.1045 0.1040 158.2882 3.6320 96.8080 0.1103\n", "fl1400 0.1030 0.1028 186.6609 3.4932 265.7287 0.1604\n", "u1432 0.2142 0.1910 212.7076 3.5985 79.1341 0.0944\n", "\n", "[74 rows x 6 columns]\n" ] } ], "source": [ "# 用于存储每个算法在每个实例上的结果 \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", " \"MEoH-TSP\": tsp_06,\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 MEoH-TSP\n", "burma14 38.69 38.69 32.44 38.69 30.88 38.80\n", "ulysses16 104.73 104.73 79.39 88.25 74.20 104.65\n", "ulysses22 89.64 89.64 76.99 82.21 76.13 91.92\n", "dantzig42 0.00 0.00 inf inf inf inf\n", "att48 40526.42 40526.42 37314.09 40526.42 35594.44 37686.87\n", "... ... ... ... ... ... ...\n", "rl1304 339797.47 339797.47 314295.61 335160.35 284242.81 303550.70\n", "rl1323 332094.97 332094.97 341512.46 331159.20 299654.18 334237.62\n", "nrw1379 70015.46 70015.46 66216.21 69794.61 61838.87 68362.91\n", "fl1400 26971.88 26971.88 22955.32 27057.04 22420.49 23757.04\n", "u1432 188815.01 188815.01 171110.62 196453.25 167338.88 173489.17\n", "\n", "[74 rows x 6 columns]\n", "\n", "各算法在不同实例上的运行时长:\n", " 贪心算法 最近邻算法 插入法 EoH-TSP AAD-TSP MEoH-TSP\n", "burma14 0.0001 0.0000 0.0010 0.0136 0.0212 0.0010\n", "ulysses16 0.0000 0.0000 0.0004 0.0113 0.0254 0.0012\n", "ulysses22 0.0001 0.0001 0.0011 0.0144 0.0340 0.0012\n", "dantzig42 0.0000 0.0000 inf inf inf inf\n", "att48 0.0003 0.0003 0.0112 0.0363 0.0693 0.0033\n", "... ... ... ... ... ... ...\n", "rl1304 0.0839 0.0824 130.1252 3.2245 49.8281 0.1418\n", "rl1323 0.0859 0.0859 129.8820 3.0296 44.1189 0.0974\n", "nrw1379 0.1045 0.1040 158.2882 3.6320 96.8080 0.1103\n", "fl1400 0.1030 0.1028 186.6609 3.4932 265.7287 0.1604\n", "u1432 0.2142 0.1910 212.7076 3.5985 79.1341 0.0944\n", "\n", "[74 rows x 6 columns]\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": 6, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "各算法在不同实例上的排名:\n", " 贪心算法 最近邻算法 插入法 EoH-TSP AAD-TSP MEoH-TSP\n", "burma14 3 3 2 3 1 6\n", "ulysses16 5 5 2 3 1 4\n", "ulysses22 4 4 2 3 1 6\n", "dantzig42 1 1 3 3 3 3\n", "att48 4 4 2 4 1 3\n", "... ... ... ... ... ... ...\n", "rl1304 5 5 3 4 1 2\n", "rl1323 3 3 6 2 1 5\n", "nrw1379 5 5 2 4 1 3\n", "fl1400 4 4 2 6 1 3\n", "u1432 4 4 2 6 1 3\n", "\n", "[74 rows x 6 columns]\n", "\n", "各算法在所有实例上的平均排名:\n", "贪心算法 3.77\n", "最近邻算法 3.77\n", "插入法 2.73\n", "EoH-TSP 4.04\n", "AAD-TSP 1.26\n", "MEoH-TSP 3.24\n", "dtype: float64\n", "\n", "各算法在不同实例上的运行时长排名:\n", " 贪心算法 最近邻算法 插入法 EoH-TSP AAD-TSP MEoH-TSP\n", "burma14 2 1 3 5 6 4\n", "ulysses16 2 1 3 5 6 4\n", "ulysses22 1 2 3 5 6 4\n", "dantzig42 1 1 3 3 3 3\n", "att48 2 1 4 5 6 3\n", "... ... ... ... ... ... ...\n", "rl1304 2 1 6 4 5 3\n", "rl1323 2 1 6 4 5 3\n", "nrw1379 2 1 6 4 5 3\n", "fl1400 2 1 5 4 6 3\n", "u1432 3 2 6 4 5 1\n", "\n", "[74 rows x 6 columns]\n", "\n", "各算法在所有实例上的平均运行时长排名:\n", "贪心算法 1.61\n", "最近邻算法 1.50\n", "插入法 5.31\n", "EoH-TSP 4.09\n", "AAD-TSP 5.39\n", "MEoH-TSP 2.92\n", "dtype: float64\n", "\n", "各算法在所有实例上的平均路径长度:\n", "贪心算法 389892.12\n", "最近邻算法 389892.12\n", "插入法 inf\n", "EoH-TSP inf\n", "AAD-TSP inf\n", "MEoH-TSP inf\n", "dtype: float64\n", "\n", "各算法在所有实例上的平均运行时长:\n", "贪心算法 0.0184\n", "最近邻算法 0.0182\n", "插入法 inf\n", "EoH-TSP inf\n", "AAD-TSP inf\n", "MEoH-TSP inf\n", "dtype: float64\n" ] } ], "source": [ "# 统计df_results中每行的分别排行,得到每个算法的排名\n", "rank_results = df_results.rank(axis=1, method='min', ascending=True)\n", "rank_results = rank_results.astype(int) # 转换为整数类型\n", "print(\"\\n各算法在不同实例上的排名:\")\n", "print(rank_results)\n", "# 计算得到各算法在所有实例上的平均排名\n", "mean_rank = rank_results.mean(axis=0)\n", "print(\"\\n各算法在所有实例上的平均排名:\")\n", "print(mean_rank.round(2)) # 平均排名保留2位小数\n", "\n", "# 统计df_time中每行的分别排行,得到每个算法的排名\n", "rank_time = df_time.rank(axis=1, method='min', ascending=True)\n", "rank_time = rank_time.astype(int) # 转换为整数类型\n", "print(\"\\n各算法在不同实例上的运行时长排名:\")\n", "print(rank_time)\n", "# 计算得到各算法在所有实例上的平均排名\n", "mean_rank_time = rank_time.mean(axis=0)\n", "print(\"\\n各算法在所有实例上的平均运行时长排名:\")\n", "print(mean_rank_time.round(2)) # 平均排名保留2位小数\n", "# 计算每个算法的平均路径长度\n", "mean_results = df_results.mean(axis=0)\n", "print(\"\\n各算法在所有实例上的平均路径长度:\")\n", "print(mean_results.round(2)) # 平均路径长度保留2位小数\n", "# 计算每个算法的平均运行时长\n", "mean_time = df_time.mean(axis=0)\n", "print(\"\\n各算法在所有实例上的平均运行时长:\")\n", "print(mean_time.round(4)) # 平均运行时长保留4位小数" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei\n" ] }, { "data": { "image/png": "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Nnfu3Jx00klZsmRJjj/++JxxxhlrNN6mTqAEAAAArBPnn39++vfvny5dumTixImZMGFCXn755UyfPj3HH3987r333hx55JHlfVjrlr4tWbKk0TFramqSrNl+RzU1NfniF7+Y1157LXvvvXd+85vfrPZYmwuBEgAAALDWjR07NjfffHMqKytz5513pmvXruVzHTt2zNChQ9OhQ4f8/e9/L+9jVLecbe7cuSmVSg2OW7fUbWVPbluZ999/P//2b/+WJ598Ml27ds3DDz+82mNtTgRKAAAAwFo3YsSIlEqlfOxjHys/7e2D2rVrl4MPPjhJ8txzzyVJ+WlvNTU1mTFjRoPjTpo0qV7bIkqlUs4555wMGzYs22+/fR599NFGN/+mPoESAAAAsNa99957H9mmbhZS3d5JO+20Uzp16pRkeSDVkLrjhxxySOGavvnNb+Y3v/lNttlmmzzyyCPZddddC4+xuRIosV4MHz48FRUV5dff/va31R7r8ssvL4+z5ZZbZuHChavUb+DAgfVqqHtVVVWlY8eO2W233XL88cfn0ksvXaP6GrtOkdfZZ5+9wrgvvPBCvvnNb2b//fdP+/bt07Jly2y33XbZZ599csIJJ+Sqq67K008/naVLl67Qd8qUKY1eq6qqKttvv32OOeaY/O///m/mzZu32vcOAABQp24G0WuvvZbp06evcH7+/PkZPXp0kuRjH/tYkqSioiJ9+vRJktxyyy0r9Bk5cmTGjx+fysrKnHjiiYXq+f73v58bbrghW265ZR566KHsvffehfpv7lqs7wI2Bl3/60/ru4S1aspVJ6zza95+++0r/H7YYYet1li//vWvyz8vWLAg99xzT7761a+udm1LlizJW2+9lbfeeisTJ07Mn//85wwaNCh77rlnfvCDH+SUU05Z7bGbQm1tbb797W/nhhtuWGEN8ezZszN79uyMGzcuDz74YJLkxhtvzPnnn7/K4y9ZsiSzZs3KrFmz8uijj+bqq6/O73//+3zqU59q0vsAAAA2L7169UqHDh3y9ttv57TTTsvQoUPL+yjNnj07/fr1y9tvv51WrVrl5JNPLvfr379/brnlljz88MMZMmRILrzwwlRUVGTq1Knp27dvkuTcc88tz2Sq8/vf/z4XXnhhdtxxxwwfPrzeuR//+Me54oor0rp16/zxj3/MJz/5ybV785ug1Q6UZs+encGDB+fPf/5zJk+enGXLlqVz5845+uijM2DAgHTv3r3Bfk8//XSuuuqqjBw5MgsWLMguu+yS008/Pf379y/v3s6mraamJnfffXeSpG3btlmwYEHuvvvu/PSnPy28K/8zzzyT1157rd5Yt99+e+FA6dZbb81BBx2UZPkUy3nz5uWtt97K6NGj88c//jEvvfRS/vGPf+TUU09N3759c/PNN6dZs1Wb4HfBBRfU+z/DDxo9enT5/wC//vWv54ILLmiw3Qc3hPvWt76VG264IUmy/fbb57zzzkuPHj2y7bbbZtGiRZkyZUqefvrpDBs2LNOmTfvI+nr37p3LL7+8/PvixYszfvz4/L//9//yzDPPZMaMGTnhhBPy8ssvZ/vtt1+lewYAAPiwtm3b5vbbb8+XvvSljBw5Mt27d0+3bt1SWVmZiRMnZsmSJWnRokV+9rOfpXPnzuV+u+yyS26++eacc845GTBgQK677rp07Ngx48aNy9KlS3PggQdmyJAhK1xvwYIFmTp16grHZ8yYkQsvvDBJsuWWW+Z73/teozX//ve/XyGoOuCAA8rftepWhEyePDkdOnQotxkwYEAGDBhQ4E9n47NagdKrr76aww47LLNnz05lZWW9/wBuvvnmDB06NA8++GAOP/zwev2GDh2as846K7W1tencuXO6dOmScePG5dJLL80DDzyQJ554Im3atGmSG2PDNWzYsMydOzdJct1116Vfv36ZP39+hg0bltNOO63QWHUznTp06JD+/fvnoosuymOPPZY33nij3v8BfZRddtklH//4x1c43qdPn1xxxRV54IEH0rdv37z99tu59dZbs80222Tw4MGrNHbHjh3TsWPHBs+9/fbb9do1VMMHvfzyy7nxxhuTJPvvv38ef/zxtG/fvl6bT33qUzn99NPzk5/8JI888shHfqbat2+/wnU/+clP5vTTT8/JJ5+c++67L3PmzMk111yTq6++eqVjAQAArMxxxx2XsWPH5pprrslf//rXTJs2LaVSKdtvv30OO+ywfOc738kBBxywQr8zzzwz3bt3z5VXXpmRI0fmlVdeSbdu3XL66afnoosuKjRBZcmSJeXVHnWrPBpTt5fTB7377rt555136h1btmxZvWOruhXLxmy19lD6xje+kdmzZ6dnz56ZNGlSxo8fn5deein//Oc/c+KJJ2bhwoU555xz6i3HmTJlSvr165fa2toMHjw406dPz5gxYzJhwoTsvvvuGT169Caf3rHcr371qyTJXnvtlb59+2avvfZKsuIyuI+yZMmS/O53v0uSnHrqqTnzzDPTvHnzLFu2LEOHDm3Smr/whS9k5MiRadeuXZJkyJAheeGFF5r0Gqvi/vvvL3+uLr/88hXCpA875phj0rNnz9W6VvPmzesFSH/+859XaxwAAIAP+tjHPpaf//znmTBhQhYvXpyamppMmTIlt99+e4NhUp0ePXrkgQceyDvvvFNeWXHZZZc1GiadffbZKZVKmTJlSr3jXbt2TalUWqVX3ZK8D5oyZcpH9hs4cOAa/AltHAoHSgsXLszjjz+eZPneLDvuuGP53DbbbJNf/vKXqaioyOTJkzN+/PjyuSFDhqSmpia9evVK//79U1FRkSTZeeedc+uttyZJbrrpprz55ptrdENs2GbPnp2HH344ScrL0r7yla8kSR5++OFC7/8DDzyQd999tzxWp06dctRRRyUpHk6tit122y1XXnll+ferrrqqya/xUT44XbOxZaVNadddd80222yzwrUBAADYvBUOlJYsWZJly5YlSbp167bC+a222ipbb711kuT9999PsnxPmnvvvTdJ0q9fvxX69OjRI3vssUeWLl2aYcOGFS2JjcjQoUPz/vvvp6KiohwkfeUrX0lFRUVqa2sLzSyqC4123XXX8obRdSHVyy+/nDFjxjRx9csT7rpZQX/84x8bfILa2tSyZcvyz//4xz/WyTVbtFi+Mra2tnadXA8AAIANX+FAqX379unSpUuS5Y/n+7BXX30177zzTtq3b19+JOC0adMyc+bMJGl0+U3d8VGjRhUtiY1I3XK3z3zmM9lpp52SLJ+l9ulPfzrJqs8sevvtt8tLsOqCqST50pe+VN4zaG3MUmrTpk169OiRZPlsvbURWq3MJz7xifLPF1100QpTN5vam2++WV5PvMMOO6zVawEAALDxWK1NuS+//PKcddZZ6du3b6699tocccQRadGiRZ555pl85zvfSUVFRQYPHlxexzhhwoQkSVVVVaNfSutmO9W1bUhNTU1qamrKv8+fP391ymc9eemllzJ27NgkWeEpbF/96lfz1FNPZezYsXnppZeyzz77rHSsO+64ozw76INjtW3bNr17985vf/vb/Pa3v83VV19dnmHTVA444IA8+OCDSZLXXnsthxxySJOOvzKnnHJKvve972XWrFl57bXXsttuu+WYY47JEUcckUMOOSSf/OQns8UWWzTZ9a644orynk1HHHFEk40LAACQJBlYvb4raBoD563vCta51dqU+8wzz8wf/vCHdOjQISeffHI6dOiQ9u3b53Of+1xatmyZBx98MF/72tfK7efMmZNk+eymur2TPqzuseh1bRty5ZVXprq6uvyqmynFxqFudlJVVVVOOeWUeudOPfXUVFVV1Wu3MnWzjw4++ODyTLg6dQHT7Nmz89BDD61x3R9Wt6dQsvL/XteGtm3bZtiwYeWnxr3//vv585//nIsuuihHHHFE2rdvn4MPPjiDBg3KG2+8sVrXWLJkScaOHZt+/frlJz/5SZLly97+v//v/2uy+wAAAGDjtlqBUqlUyqRJk/LOO++kefPm6d69e/baa6+0bNky48aNy0033VTeLDn5v8fsfXD/lw+rCxMWLVrUaJuLL7448+bNK7+mT5++OuWzHtTW1uaOO+5IkpxwwgkrPJ2sffv2Of7445Msn320sv16XnnllTz//PNJVpzplCS9evUqBy6//vWvm6L8etq2bVv++b333mvy8T/KwQcfnFdeeSUXX3zxCjP+3n///YwePTqXXnppunfvnsGDB3/keL/61a9SUVFRflVVVWX//fcvb5bfsmXL3Hrrrdl7773Xyv0AAACw8VmtQOn8889P//7906VLl0ycODETJkzIyy+/nOnTp+f444/PvffemyOPPLIcCtQtfVuyZEmjY9YtZWvdunWjbaqqqtKuXbt6LzYODz/8cHkfrYZCoA8enzlzZh599NFGx6qbwdSiRYucdtppK5xv0aJF/u3f/i1Jcv/992fevKadevjBEOmD/w3Onj0748aNa/A1efLkJq1hm222yRVXXJF//vOfGTt2bH72s5/l/PPPr7dUcPHixbnoootW+3GV2223Xc4+++yMGTMmZ5xxRhNVDgAAwKagcKA0duzY3HzzzamsrMydd96Zrl27ls917NgxQ4cOTYcOHfL3v/89d911V5L/W842d+7c8n4sH1a3dKiuLZuWuiVq7du3zwknnNBgmw/OXGpsQ+1ly5aVnwTXq1evbLvttg22qwunFi9eXP7vsKm8/fbb5Z/rnmiYJDfccEP22WefBl/nnHNOk9ZQp6KiIvvuu2/OO++83Hjjjfn73/+eV199Nb179y63+eEPf7jSzbt79+6dl156qfx69dVXM3v27MyaNSu33XabmUkAAACsoHCgNGLEiJRKpXzsYx9rcA+jdu3a5eCDD06SPPfcc0lS3uOmpqYmM2bMaHDcSZMm1WvLpmP+/PkZNmxYkuWhYlVVVb0lVnWvVq1aZe7cuUmS++67r8HlZI899lh5b6AHH3ywwXEqKirqbZTd1E97e+GFF8o/77777k06dlP42Mc+lnvuuaf85MT3338/9957b6Pt27dvn49//OPl18c+9rFGgzoAAABIViNQWpU9Y+pmIdXtnbTTTjulU6dOSZYHUg2pO74un5jFunHXXXetdG+shixcuDC///3vVzi+Kht2f9iIESPKgeWaWrhwYUaOHJkk2WKLLbL//vuXzw0cODClUqnB1xNPPNEk119VzZo1S9++fcu/T5w4cZ1eHwAAgE1b4eep180geu211zJ9+vQVZinNnz8/o0ePTrJ8pkSyfFlOnz59cuONN+aWW27JqaeeWq/PyJEjM378+FRWVubEE09crRthw1U3Q2j77bfPj3/8449sf9FFF2XatGm5/fbb6y0VW7BgQXmmzdFHH51zzz13peP861//yrnnnptSqZRf//rXueyyy9bgLpa77bbbynsyfeELX0iLFoU/QuvMBzfsbtZstbZLAwAAgAYV/jbcq1evdOjQIW+//XZOO+20DB06tLyP0uzZs9OvX7+8/fbbadWqVU4++eRyv/79++eWW27Jww8/nCFDhuTCCy9MRUVFpk6dWp5Jce6555ZnMrFpmDx5coYPH54kOemkkxrcRPvDnnvuuVxzzTV58sknM23atOy0005Jkt///vdZuHBhkuTrX/96TjrppI8c68Ybb8zzzz/fJIHShAkTcvHFF5d//6//+q81Gm91lEqlVFRUrFLbuiWnSbLLLrusrZIAAADYDBWettC2bdvcfvvtadWqVUaOHJnu3bvnYx/7WPbee+906dIlf/zjH9OiRYv87Gc/S+fOncv9dtlll9x8881p1qxZBgwYkC5duuSAAw7IbrvtlldffTUHHnhghgwZ0qQ3x/r361//urwE8oMB48rUtaubWVSnbqZTmzZtctxxxxUa6/XXX290ueWq+OMf/5gePXqUl3xefPHF2W+//VZ7vNX1gx/8IAMGDGh0L7I6Y8eOzdVXX51k+eykL3zhC+uiPAAAADYTq7Ve57jjjsvYsWNzzTXX5K9//WumTZuWUqmU7bffPocddli+853v5IADDlih35lnnpnu3bvnyiuvzMiRI/PKK6+kW7duOf3003PRRRelVatWa3xDbFjqAqGOHTvmM5/5zCr1OeSQQ7Ljjjvmn//8Z37961/n+9//fqZNm1beh+i4445LmzZtVmmsk046qTyr6Pbbby9vVP1hkydPTocOHZIsD7Lmz5+ft956K6NHj84DDzyQl156qdz2a1/7Wn74wx+u0vWb2oIFC3LNNdfkxz/+cY466qgcffTR2X///bPtttumVCpl6tSp+ctf/pJf/epXqampSZL8x3/8h83uAQAAaFKrvQHMxz72sfz85z8v3K9Hjx554IEHVveybERGjBhR3gy6T58+q7yPT0VFRb70pS/lJz/5SV599dWMGjUqjz76aOGZTsnyPb/23Xff/P3vf89dd92Vn/zkJ6mqqlqh3Qc3sG7MXnvtlUGDBuVLX/rSKl+/qW2//fZp3rx5amtr88gjj+SRRx5ptG2zZs3y7W9/uzxTCQAAAJrKhruj8AZkylUnrO8SNkp1S9SSrNJ+Rx900kkn5Sc/+Ul5nMceeyxJUlVVlRNOKPZ+nHTSSfn73/+euXPn5v77788pp5yy0vaVlZVp165dqqurs/vuu+eTn/xkevXqlU9/+tOFrrs2/Od//mfOPPPM/PnPf87f/va3jB07NpMnT868efPSvHnztG/fPrvvvns+/elP58wzz8zuu+++vksGAABgE1RRqpv2sRGaP39+qqurM2/evLRr126V+y1evDiTJ0/OLrvsYpkdrEU+awAAwEoNrF7fFTSNgfPWdwVNokjO4lniAAAAABQiUAIAAACgEIESAAAAAIUIlAAAAAAoRKAEAAAAQCECJQAAAAAKESgBAAAAUIhACQAAAIBCBEoAAAAAFCJQAgAAAKAQgRIAAAAAhQiUAAAAAChEoAQAAABAIQIlAAAAAAoRKAEAAABQiEAJAAAAgEIESgAAAAAUIlACAAAAoBCBEgAAAACFCJQAAAAAKKTF+i5gozCwen1XsHYNnLfWL/HEE0/kyCOPLNTn29/+dq699tomreOII47Ik08+mSQplUqr1KeioiJJcvjhh+eJJ574yPZTpkzJLrvssto11vlwfe+++25uu+22/PnPf864ceMyZ86ctGrVKh07dsx2222XT37ykzniiCPymc98Jttss80K433w3j+oWbNmadeuXbp27ZpPf/rT+fd///fss88+a1w/AAAAmy6BEmwE/vSnP+Xss8/O22+/Xe/4kiVLMn/+/EycODEjRozIddddl0MOOSTPPPPMKo+9bNmyzJ07Ny+++GJefPHF3HDDDbnkkkvygx/8oKlvAwAAgE2EQIl17utf/3ouuOCCj2zXoUOHdVBN0+vcuXNeeumlRs8fe+yxmTFjRnbYYYf85S9/+cjxRowYkT59+mTp0qVp3rx5Tj/99HzhC1/ILrvskubNm+fNN9/MmDFj8tBDD2XkyJGrVOMH61u2bFlmzpyZ+++/Pz//+c9TW1ub//mf/8n222+f888/f5XGAwAAYPMiUGKd69ixYz7+8Y+v7zLWmsrKypXeX2Vl5Sq1q/P//X//XzlMeuihh/LZz352hTbHHXdcvv/972fq1Kl57LHHPnLMD1933333zbHHHpujjz46J510UpLksssuy9e+9rU0b978I8cDAABg82JTbtiAzZgxI88++2ySpE+fPg2GSR+08847p2/fvqt9vS996Uvp2bNnkmT27NkZM2bMao8FAADApkugxEZnypQp+e53v5u99947W265Zdq0aZPddtst55133kqXmm2Mpk2bVv65e/fu6+Sahx56aPnnqVOnrpNrAgAAsHERKLFRuf3227PHHnvk2muvzSuvvJIFCxZk0aJFmThxYm666aZ84hOfyJVXXrm+y2wyLVu2LP/8j3/8Y51cs0WL/1sJW1tbu06uCQAAwMZFoMRGo+5JZzU1NWnbtm0uu+yyPPXUU3n66adzzTXXpEOHDqmtrc33vve93Hjjjeu73Cax5557plWrVkmS+++/P0OHDl3r1/z73/9e/nmHHXZY69cDAABg42NTbta52bNnZ9y4cR/Zbvfddy9vYL106dKcd955KZVKadu2bZ566qnsv//+5baHHnpoTjrppHzqU5/KzJkzc+GFF+aUU05Z6ZPiVqWG9a1169Y599xzc/3116dUKuWrX/1qfvjDH+aEE07IoYcemkMOOSQ77rhjk13vueeey8MPP5wkadOmTQ466KAmGxsAAIBNh0CJde7GG29cpRlEkydPTteuXZMk9957b954440kyfe///16YVKdnXfeOUOGDMlXv/rVLFy4MLfddlv69+/f6Pj77LPPatW/rg0ePDivv/56/vznPydZvvTtg8vfdtpppxx99NE588wzc8QRRxQef9myZZk1a1aGDRuW73//++Vlbt/61rfKs6MAAADggyx5Y6Pw6KOPJkkqKipW+hSzU045JdXV1fX6bOxat26dP/3pT7njjjvyqU99aoXz06ZNy2233ZYjjzwyn/vc5/LWW2995JgVFRXlV/PmzdO5c+dccMEFmTNnTpLkxBNPzP/8z/80+b0AAACwaTBDiXXusssuy8CBAwv1qVue1rVr13Ts2LHRdi1btswnPvGJPPHEEx+5pK1UKq3StSsqKho8vnTp0rz66quN9vvgkr01VVFRkdNPPz2nn3563nzzzQwfPjzPP/98nnvuuQwfPjyLFi1KkvzlL3/JkUcemWeeeSZt27YtdI1WrVrlkEMOyb//+7/ny1/+cpPUDQAAwKZJoMRG4d13302SbLfddh/ZtlOnTvX6rC1vvPHGSpfNfXDJXlPabrvtctJJJ+Wkk05KkixYsCA///nPc8kll2Tx4sV5+eWXc+211+aSSy5pdIyXXnqp/HPz5s2z5ZZbplOnTvWe8AYAAACN8e2RjUpjs4U+aFVnHm0q2rZtm//8z/9M27Ztc/755ydJ7r777pUGSh//+MfXVXkAAABsguyhxEZh6623TpLMmjXrI9u++eab9fqsLV27dk2pVGr0tTZmJ63MOeecU55hNHHixHV6bQAAADYvAiU2CnUzaqZMmZLZs2c32m7p0qV54YUX6vXZXLRs2TLbbLNNkqRZMx9tAAAA1h7fOtkofPazn02yfDnbrbfe2mi73//+95k3b169PhuzIsv3pk+fXg7bdtlll7VVEgAAAAiU2Dj06dMnO+ywQ5LkiiuuyNixY1doM3369Fx44YVJkjZt2uScc85ZpzWuDa+88kp69eqVv/3tbyttt3jx4vz7v/97OYDq3bv3uigPAACAzZRNuVnnZs+enXHjxn1ku9atW2fXXXdNklRWVuamm27KF77whbz33nv59Kc/nf79++foo49OixYtMnLkyFx11VXlGTpXX311OnTosFbvY10olUp55JFH8sgjj6R79+7p3bt3DjnkkOy4445p06ZN3n777Tz77LO5+eabM3ny5CTJTjvtVA7WAAAAYG0QKLHO3Xjjjbnxxhs/st1+++2XF198sfz7CSeckNtuuy3nnXdeFixYkMsuuyyXXXZZvT7NmzfPoEGD8vWvf72py14vtthii2y11VaZM2dOJk6cmGuuuWal7T/5yU/md7/7Xaqrq9dRhQAAAGyOBEqrYuC89V0B/39nnXVWDj/88Fx77bV5+OGHM23atCxbtiw77LBDjjrqqPzHf/xH9tlnn/VdZpPZZZdd8uabb+Zvf/tb/vrXv+bZZ5/Na6+9lrfeeitLly5N27Zt06VLlxxwwAE56aSTcsIJJ9iQGwAAgLWuolRk198NzPz581NdXZ158+alXbt2q9xv8eLFmTx5cnbZZZe0atVqLVYImzefNQAAYKUGbiKrKzaRiShFchZTGQAAAAAoRKAEAAAAQCECJQAAAAAKESgBAAAAUIhACQAAAIBCBEoAAAAAFCJQAgAAAKAQgRIAAAAAhQiUAAAAAChksw6USqXS+i4BNmk+YwAAAJumzTJQatZs+W0vW7ZsPVcCm7ba2tok//eZAwAAYNOwWX7La9GiRZo1a5bFixev71Jgk7Zw4cI0b948lZWV67sUAAAAmtBmGSg1a9Ysbdq0yYIFC9Z3KbDJKpVKmT9/frbccstUVFSs73IAAABoQptloJQk7dq1y8KFCzNnzpz1XQpsckqlUmbMmJGlS5emurp6fZcDAABAE2uxvgtYX6qrq7No0aLMmjUr//rXv1JdXZ0WLVqYSQGrqVQqpba2NgsXLsz8+fOzdOnS7LjjjmnTps36Lg0AAIAmttkGSkmy3XbbpWXLlpk7d27++c9/ru9yYJPQvHnzbLnllqmurhYmAQAAbKI260CpoqIiW2+9dbbaaqu8//775SdSAaunWbNmqaysNNMPAABgE7dZB0p1KioqUllZ6UlUAAAAAKtgs92UGwAAAIDVI1ACAAAAoBCBEgAAAACFCJQAAAAAKESgBAAAAEAhAiUAAAAACikcKE2ZMiUVFRWr9HryySdX6P/000+nd+/e2XbbbdO6devstddeGTRoUBYvXtwkNwQAAADA2tWiaIdWrVqlZ8+ejZ6fOXNmJk2alFatWmX//fevd27o0KE566yzUltbm86dO6dLly4ZN25cLr300jzwwAN54okn0qZNm8I3AQAAAMC6UzhQ6tSpU4YPH97o+a9+9auZNGlSTjzxxFRXV5ePT5kyJf369UttbW0GDx6cCy+8MBUVFZk6dWqOPfbYjB49OgMGDMj111+/encCAAAAwDrRpHsoLViwIPfdd1+S5Iwzzqh3bsiQIampqUmvXr3Sv3//VFRUJEl23nnn3HrrrUmSm266KW+++WZTlgQAAABAE2vSQOmee+7Jv/71r2y77bb53Oc+Vz5eKpVy7733Jkn69eu3Qr8ePXpkjz32yNKlSzNs2LCmLAkAAACAJtakgdJvfvObJMlpp52WFi3+bzXdtGnTMnPmzCRpdP+luuOjRo1qypIAAAAAaGKF91BqzMyZM/PYY48lWXG524QJE5IkVVVV2WGHHRrs361bt3ptG1JTU5Oampry7/Pnz1+jmgEAAAAorslmKA0dOjTLli3L7rvvnoMOOqjeuTlz5iRJ2rdvX9476cO22mqrem0bcuWVV6a6urr86tKlSxNVDwAAAMCqarJAqW6524dnJyXJ4sWLkyQtW7ZstH9VVVWSZNGiRY22ufjiizNv3rzya/r06WtSMgAAAACroUmWvL300ksZO3ZsKioq8tWvfnWF861atUqSLFmypNEx6paytW7dutE2VVVV5eAJAAAAgPWjSWYo/frXv06SHHbYYdl5551XOF+3nG3u3LkplUoNjlG31K2uLQAAAAAbpjUOlJYtW5bf/va3SRpe7pYku+22W5Lls5BmzJjRYJtJkybVawsAAADAhmmNA6XHH388//znP9OqVaucfPLJDbbZaaed0qlTpyTJiBEjGmxTd/yQQw5Z05IAAAAAWIvWOFCqW+524oknprq6usE2FRUV6dOnT5LklltuWeH8yJEjM378+FRWVubEE09c05IAAAAAWIvWKFBatGhR7rnnniSNL3er079//7Rs2TIPP/xwhgwZUt5LaerUqenbt2+S5Nxzzy3PZAIAAABgw7RGgdJ9992X9957L9tuu20+97nPrbTtLrvskptvvjnNmjXLgAED0qVLlxxwwAHZbbfd8uqrr+bAAw/MkCFD1qQcAAAAANaBNQqU6pa7nXbaaWnRosVHtj/zzDPz1FNP5fOf/3wWLVqUV155Jd26dcvAgQMzfPjwbLHFFmtSDgAAAADrwEenQCvx4IMPFu7To0ePPPDAA2tyWQAAAADWozXelBsAAACAzYtACQAAAIBCBEoAAAAAFCJQAgAAAKAQgRIAAAAAhQiUAAAAAChEoAQAAABAIQIlAAAAAAoRKAEA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AAAUIlACAAAAoBCBEgAAAACFCJQAAAAAKESgBAAAAEAhAiUAAAAAChEoAQAAAFCIQAkAAACAQgRKAAAAABQiUAIAAACgEIESAAAAAIUIlAAAAAAoRKAEAAAAQCECJQAAAAAKESgBAAAAUIhACQAAAIBCBEoAAAAAFCJQAgAAAKAQgRIAAAAAhQiUAAAAAChEoAQAAABAIQIlAAAAAAoRKAEAAABQiEAJAAAAgEIESgAAAAAUIlACAAAAoBCBEgAAAACFCJQAAAAAKESgBAAAAEAhAiUAAAAAChEoAQAAAFCIQAkAAACAQgRKAAAAABQiUAIAAACgEIESAAAAAIUIlAAAAAAoRKAEAAAAQCECJQAAAAAKESgBAAAAUIhACQAAAIBCBEoAAAAAFCJQAgAAAKAQgRIAAAAAhQiUAAAAAChEoAQAAABAIQIlAAAAAAoRKAEAAABQiEAJAAAAgEIESgAAAAAUIlACAAAAoBCBEgAAAACFCJQAAAAAKESgBAAAAEAhAiUAAAAAChEoAQAAAFCIQAkAAACAQgRKAAAAABQiUAIAAACgEIESAAAAAIUIlAAAAAAoRKAEAAAAQCGrFSidffbZqaioWOlr8eLFDfZ9+umn07t372y77bZp3bp19tprrwwaNKjR9gAAAABsWFqsSefddtstHTt2bPBcs2YrZlVDhw7NWWedldra2nTu3DldunTJuHHjcumll+aBBx7IE088kTZt2qxJSQAAAACsZWsUKH3ve9/L2WefvUptp0yZkn79+qW2tjaDBw/OhRdemIqKikydOjXHHntsRo8enQEDBuT6669fk5IAAAAAWMvW2R5KQ4YMSU1NTXr16pX+/funoqIiSbLzzjvn1ltvTZLcdNNNefPNN9dVSQAAAACshnUSKJVKpdx7771Jkn79+q1wvkePHtljjz2ydOnSDBs2bF2UBAAAAMBqWqNA6fe//32++MUv5qijjsppp52Wn/70p5k3b94K7aZNm5aZM2cmSXr27NngWHXHR40atSYlAQAAALCWrdEeSn/605/q/f673/0ul112We6444587nOfKx+fMGFCkqSqqio77LBDg2N169atXtuG1NTUpKampvz7/PnzV7t2AAAAAFbPas1Q2nXXXXPFFVdk7NixmT9/ft577708/PDDOeSQQzJnzpx88YtfzHPPPVduP2fOnCRJ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Sfvtt1+SpKKiIn369EmS3HLLLSv0GTlyZMaPH5/KysqceOKJTV0SAAAAAE2ocKD0/PPP57LLLisvUfughx56KMcdd1zef//9HH/88dl1113L5/r375+WLVvm4YcfzpAhQ8p7KU2dOjV9+/ZNkpx77rnlmUwAAAAAbJgqSo3tkt2IJ554IkceeWSSpFOnTtlxxx2zZMmSTJs2LXPnzk2SHHTQQXnwwQfToUOHen1vv/32nHPOOVm2bFk6d+6cjh07Zty4cVm6dGkOPPDAPPnkk9liiy1WuZb58+enuro68+bNS7t27YrcBgAAALC+Daxe3xU0jYHz1ncFTaJIzlJ4htJ+++2X6667LieeeGK22GKLjB8/PuPHj0/r1q1z3HHH5bbbbsvIkSNXCJOS5Mwzz8xTTz2Vz3/+81m0aFFeeeWVdOvWLQMHDszw4cMLhUkAAAAArB+FZyhtSMxQAgAAoCGlUikjRozIsGHD8tRTT2X8+PFZuHBhOnTokE996lP55je/WV5905i77rort956a1544YXMnTs3HTp0yD777JNTTz21vHXL6nr00UdzzDHHJEmOPvroPProoyu0mThxYn75y19m1KhRmThxYmbPnp1ly5alS5cu+exnP5v//M//rLfVzEbJDKUNSpGcRaAEAADAJuexxx7LZz/72SRJs2bN0r1792yxxRaZMGFCFixYkCS55JJLMmjQoBX61tTU5NRTT83999+fJOnWrVu22WabzJo1K2+88UY+8YlP5Lnnnlvt2hYvXpx99tknEydOTNJ4oPSLX/wiX/va11JRUZGOHTtmhx12yL/+9a9MmTIlS5YsSevWrXPvvffm2GOPXe1a1juB0gZlrS55AwAAgA1dqVRK9+7dc8MNN+Ttt9/Oq6++mjFjxuSdd97JxRdfnCS5/PLL88c//nGFvuecc07uv//+HHbYYRk/fnxef/31PPvss5k2bVpmzZqVK664Yo1qu/zyyzNx4sSPfMr5vvvum6FDh+bNN9/MrFmzMmbMmLz66qt54403ctppp2XRokX56le/mkWLFq1RPbA6zFACAABgkzN//vy0adMmLVq0aPD88ccfnz//+c858cQTM2zYsPLxuqeX77HHHhkzZkxat27dpHX94x//yP7775+jjz46p556as4555xGZyitzJIlS9KpU6fMmTMnDz/8cHn53EbHDKUNihlKAAAAbNbatWvXaJiUpBzAvPbaa/WOX3vttUmWL4dr6jCpVCrlvPPOS7NmzXL99dev0VgtW7bMLrvskiRZuHBhU5QHhQiUAAAA2OwsXrw4SeqFRosWLcpjjz2WioqKnHDCCXniiSfSr1+/HH300TnppJNy7bXX5r333lvta95yyy156qmncvHFF6dbt25rVP+7776bV199Nc2bN89+++23RmPB6mg8rgUAAIBNUKlUyt13350k6dmzZ/n42LFj8/7776dz58750Y9+lKuuuqpev3vuuSdDhgzJn/70p+y///6FrvnWW2/loosuSvfu3XPRRRetdu1z5szJCy+8kO9973v517/+lf79+6dr166rPR6sLjOUAAAA2KzcfPPNeeGFF9KyZct85zvfKR+fOXNmkmT27Nm56qqr8oUvfCHjx49PTU1Nnn322RxwwAGZMWNGevfuXX5S3Kr67ne/m3fffTfXX399qqqqCvWdO3duKioqUlFRka233jpHH3103nrrrfzyl7/M4MGDC40FTUWgBAAAwGZjzJgx+fa3v51k+dPWdt111/K5f/3rX0mSpUuXplu3bvnDH/6Q3XffPS1btsxBBx2UP/3pT2nTpk2mTZuW2267bZWv+dhjj2Xo0KE5+eSTc+yxxxauuUWLFunZs2d69uyZ7t27p7KyMpMnT87QoUMzderUwuNBUxAoAQAAsFmYPHlyPv/5z2fx4sX58pe/nAsvvLDe+VatWpV/vuCCC1JZWVnvfKdOnXLaaaclWf40uFWxePHinH/++Wnbtm3+93//d7Xqbtu2bYYPH57hw4dnwoQJmTlzZi644II88sgjOfTQQzN37tzVGhfWhEAJAACATd6sWbNyzDHHZObMmTnhhBPyy1/+MhUVFfXabLXVVuWf99hjjwbH2XPPPZMkU6ZMWaXr/uhHP8rEiRNz2WWXZccdd1y94j9km222yfXXX5/Pf/7zmTVr1ho/MQ5Wh0AJAACATdq7776bY445Jq+//noOP/zw3H333SvMPkqS3XffvfxzY/sc1R2vra1dpWu/8MILSZLBgwenU6dO9V51S++eeuqp8rHp06ev8n2dcMIJSZYv44N1zVPeAAAA2GQtWLAgxx9/fMaNG5eDDjooDzzwQFq3bt1g2x133DFdunTJ9OnTM2nSpAbb1B3v3LlzoTreeuutRs8tWbIkb775ZpJVD6qS5P3336/3v7AumaEEAADAJqmmpia9e/fOqFGjsvfee+ehhx7KlltuudI+p5xySpLk9ttvX+Hc4sWL87vf/S5JctRRR61SDffdd19KpVKDr7qNvY8++ujysa5du67y/d13331Jkv3333+V+0BTESgBAACwyamtrc1pp52Wv/71r9l1113zyCOPZOutt/7Ifv3790/btm0zYsSI/PCHP8yyZcuSJIsWLcr555+fmTNnZquttsq///u/1+v3+9//Pl27ds2nP/3pJruHb33rW3n88cdXmLU0derUnHXWWXnsscfSunXr9OvXr8muCavKkjcAAAA2OXfddVd5Bk+zZs3KM48+bPvtt8/dd99d/r1Tp0654447cvLJJ+eSSy7JT3/60+y000557bXXMm/evLRp0yZ33nlntt1223rjLFiwIFOnTm3Se7j//vvz05/+NK1bt0737t3TqlWrzJgxIzNnzsyyZcuy5ZZb5o477sjOO+/cpNeFVSFQAgAAYJNTU1NT/nnChAmZMGFCg+0aCmO+8IUv5LnnnssVV1yRJ554Ii+++GK23Xbb9O7dOxdffHGjT4Braj/5yU/y4IMP5umnn86MGTMyd+7cbLHFFjnggAPSq1evXHDBBYX3coKmUlEqlUrru4jVNX/+/FRXV2fevHlp167d+i4HAAAAKGJg9fquoGkMnLe+K2gSRXIWeygBAAAAUIhACQAAAIBCBEoAAAAAFGJTbgAAADZ9m8pePckms18PGzczlAAAAAAoRKAEAAAAQCECJQAAAAAKESgBAAAAUIhACQAAAIBCBEoAAAAAFCJQAgAAAKAQgRIAAAAAhQiUAAAAAChEoAQAAABAIQIlAAAAAAoRKAEAAABQiEAJAAAAgEIESgAAAAAUIlACAAAAoBCBEgAAAACFCJQAAAAAKESgBAAAAEAhAiUAAAAAChEoAQAAAFCIQAkAAACAQgRKAAAAABQiUAIAAACgEIESAAAAAIUIlAAAAAAoRKAEAAAAQCECJQAAAAAKESgBAAAAUIhACQAAAIBCBEoAAAAAFCJQAgAAAKAQgRIAAAAAhQiUAAAAAChEoAQAAABAIQIlAAAAAAoRKAEAAABQiEAJAAAAgEIESgAAAAAUIlACAAAAoBCBEgAAAACFCJQAAAAAKESgBAAAAEAhAiUAAAAAChEoAQAAAFCIQAkAAACAQgRKAAAAABQiUAIAAACgkMKBUqlUyvDhw9O/f/8ceuihad++fVq2bJkddtghJ510Uh5//PGV9n/66afTu3fvbLvttmndunX22muvDBo0KIsXL17tmwAAAABg3SkcKP31r3/NZz7zmVx99dUZPXp0tttuu3z84x/Pe++9l3vuuSdHHXVU/vu//7vBvkOHDs1nPvOZ3H///amqqsqee+6ZiRMn5tJLL81hhx2WhQsXrvENAQAAALB2rdYMpe7du+eGG27I22+/nVdffTVjxozJO++8k4svvjhJcvnll+ePf/xjvX5TpkxJv379Ultbm8GDB2f69OkZM2ZMJkyYkN133z2jR4/OgAEDmuauAAAAAFhrCgdKBx98cP7xj3/k61//erbaaqvy8ZYtW+aKK67IcccdlyS5+eab6/UbMmRIampq0qtXr/Tv3z8VFRVJkp133jm33nprkuSmm27Km2++udo3AwAAAMDaVzhQateuXVq0aNHo+WOOOSZJ8tprr5WPlUql3HvvvUmSfv36rdCnR48e2WOPPbJ06dIMGzasaEkAAAAArENN/pS3us21W7duXT42bdq0zJw5M0nSs2fPBvvVHR81alRTlwQAAABAE2p8qtFqKJVKufvuu5PUD44mTJiQJKmqqsoOO+zQYN9u3brVa9uQmpqa1NTUlH+fP3/+GtcMAAAAQDFNOkPp5ptvzgsvvJCWLVvmO9/5Tvn4nDlzkiTt27cv7530YXX7MdW1bciVV16Z6urq8qtLly5NVzwAAAAAq6TJAqUxY8bk29/+dpLlT3nbddddy+fqlsG1bNmy0f5VVVVJkkWLFjXa5uKLL868efPKr+nTpzdF6QAAAAAU0CRL3iZPnpzPf/7zWbx4cb785S/nwgsvrHe+VatWSZIlS5Y0OkbdUrYP7r30YVVVVeXgCQAAAID1Y41nKM2aNSvHHHNMZs6cmRNOOCG//OUvV1jWVrecbe7cuSmVSg2OU7fUra4tAAAAABumNQqU3n333RxzzDF5/fXXc/jhh+fuu+9OZWXlCu122223JMtnIc2YMaPBsSZNmlSvLQAAAAAbptUOlBYsWJDjjz8+48aNy0EHHZQHHnig0eVqO+20Uzp16pQkGTFiRINt6o4fcsghq1sSAAAAAOvAagVKNTU16d27d0aNGpW99947Dz30ULbccstG21dUVKRPnz5JkltuuWWF8yNHjsz48eNTWVmZE088cXVKAgAAAGAdKRwo1dbW5rTTTstf//rX7LrrrnnkkUey9dZbf2S//v37p2XLlnn44YczZMiQ8l5KU6dOTd++fZMk5557bnkmEwAAAAAbpsJPebvrrrty3333JUmaNWuWU045pcF222+/fe6+++7y77vssktuvvnmnHPOORkwYECuu+66dOzYMePGjcvSpUtz4IEHZsiQIat3FwAAAACsM4UDpZqamvLPEyZMyIQJExpst/POO69w7Mwzz0z37t1z5ZVXZuTIkXnllVfSrVu3nH766bnooovSqlWrouUAAAAAsI5VlOrWnm2E5s+fn+rq6sybNy/t2rVb3+UAAACwoRpYvb4raDoD563vCprOpvK+bCLvSZGcZbWf8gYAAADA5kmgBAAAAEAhAiUAAAAAChEoAQAAAFCIQAkAAACAQgRKAAAAABQiUAIAAACgEIESAAAAAIUIlAAAAAAoRKAEAAAAQCECJQAAAAAKESgBAAAAUIhACQAAAIBCBEoAAAAAFCJQAgAAAKAQgRIAAAAAhQiUAAAAAChEoAQAAABAIQIlAAAAAAoRKAEAAABQiEAJAAAAgEIESgAAAAAUIlACAAAAoBCBEgAAAACFCJQAAAAAKESgBAAAAEAhAiUAAAAAChEoAQAAAFCIQAkAAACAQgRKAAAAABQiUAIAAACgEIESAAAAAIUIlAAAAAAoRKAEAAAAQCECJQAAAAAKESgBAAAAUIhACQAAAIBCBEoAAAAAFCJQAgAAAKAQgRIAAAAAhQiUAAAAAChEoAQAAABAIQIlAAAAAAoRKAEAAABQiEAJAAAAgEIESgAAAAAUIlACAAAAoBCBEgAAAACFCJQAAAAAKESgBAAAAEAhAiUAAAAAChEoAQAAAFCIQAkAAACAQgRKAAAAABQiUAIAAACgEIESAAAAAIUIlAAAAAAoRKAEAAAAQCECJQAAAAAKESgBAAAAUIhACQAAAIBCBEoAAAAAFCJQAgAAAKAQgRIAAAAAhQiUAAAAAChEoAQAAABAIQIlAAAAAAoRKAEAAABQSOFAafLkybn55pvzta99Lfvtt19atGiRioqKXH755R/Z9+mnn07v3r2z7bbbpnXr1tlrr70yaNCgLF68eLWKBwAAAGDda1G0w3XXXZfrrruu8IWGDh2as846K7W1tencuXO6dOmScePG5dJLL80DDzyQJ554Im3atCk8LgAAAADrVuEZSh06dMjnP//5/M///E/+/Oc/56STTvrIPlOmTEm/fv1SW1ubwYMHZ/r06RkzZkwmTJiQ3XffPaNHj86AAQNW6wYAAAAAWLcKz1C65JJL6v1+5513fmSfIUOGpKamJr169Ur//v3Lx3feeefceuut6dmzZ2666ab893//d7bbbruiJQEAAACwDq31TblLpVLuvffeJEm/fv1WON+jR4/sscceWbp0aYYNG7a2ywEAAABgDa31QGnatGmZOXNmkqRnz54Ntqk7PmrUqLVdDgAAAABrqPCSt6ImTJiQJKmqqsoOO+zQYJtu3brVa9uYmpqa1NTUlH+fP39+E1UJAAAAwKpa6zOU5syZkyRp3759KioqGmyz1VZb1WvbmCuvvDLV1dXlV5cuXZq2WAAAAAA+0loPlBYvXpwkadmyZaNtqqqqkiSLFi1a6VgXX3xx5s2bV35Nnz696QoFAAAAYJWs9SVvrVq1SpIsWbKk0TZ1y9hat2690rGqqqrK4RMAAAAA68dan6FUt5xt7ty5KZVKDbapW+pW1xYAAACADddaD5R22223JMtnIc2YMaPBNpMmTarXFgAAAIAN11oPlHbaaad06tQpSTJixIgG29QdP+SQQ9Z2OQAAAACsobUeKFVUVKRPnz5JkltuuWWF8yNHjsz48eNTWVmZE088cW2XAwAAAMAaWuuBUpL0798/LVu2zMMPP5whQ4aU91KaOnVq+vbtmyQ599xzyzOZAAAAANhwVZQa2ym7ESNGjEjv3r3Lvy9YsCA1NTVp06ZNvae0vfDCC+nSpUv599tvvz3nnHNOli1bls6dO6djx44ZN25cli5dmgMPPDBPPvlktthii0LFz58/P9XV1Zk3b17atWtXqC8AAACbkYHV67uCpjNw3vquoOlsKu/LJvKeFMlZWhQdfOnSpXnnnXdWOL5w4cIsXLiw/HttbW2982eeeWa6d++eK6+8MiNHjswrr7ySbt265fTTT89FF12UVq1aFS0FAAAAgPWgcKB0xBFHpOCkprIePXrkgQceWK2+AAAAAGwY1skeSgAAAABsOgRKAAAAABQiUAIAAACgEIESAAAAAIUIlAAAAAAoRKAEAAAAQCECJQAAAAAKESgBAAAAUIhACQAAAIBCBEoAAAAAFCJQAgAAAKAQgRIAAAAAhQiUAAAAAChEoAQAAABAIQIlAAAAAAoRKAEAAABQiEAJAABgHbvkkktSUVGRioqKXH755Ws83i9+8YvyeOeee+4q93v00UfL/T772c+ucR3A5kOgBAAAsA794x//yJAhQ5psvLfeeisXXXRR4X6LFy/O17/+9SarA9i8CJQAAADWkVKplPPOOy+VlZU56qijmmTM7373u5k7d25OOOGEQv0uv/zyTJw4MSeeeGKT1MGGY01mwM2aNSu33357vvnNb+bggw9OVVVV4ZlvdcyA27S1WN8FAAAAbC5uueWWPPXUU/nRj36UV155ZY3He/TRRzN06NB8/etfT8eOHfOnP/1plfrVzZI67rjj0qdPn9x///1rXAsbhjWdAXfnnXfmu9/97hrXYQbcps8MJQAAgHWgbmnaXnvt1aRf2Dt27JgrrrhilfvVzZJq1qxZrr/++jWugw1HU8yAa9euXY455ph8//vfz7Bhw/If//EfqzWOGXCbPjOUAAAA1oHvfve7effdd3PPPfeksrJyjcer+8L+q1/9Ku3bt1/lfnWzpH7wgx+kW7du+dvf/rbGtbBhaIoZcH379k3fvn3Lv48ZM6bwGGbAbR7MUAIAAFjLHnvssQwdOjRf/epXc/jhh6/xeHVf2D/zmc/kzDPPXOV+dbOkunfvvlobebPhauoZcKvLDLjNh0AJAABgLVq8eHHOP//8VFdX5+qrr17j8eq+sC9btiw33HBDob51s6Suv/76VFVVrXEtbDjq3tsbbrihSWbAra66WVIXX3xxunXrtt7qYO2z5A0AAGAtqluadv3112e77bZb4/HqvrBfeOGF+fjHP77K/epmSZ188sk59thj17gONhxNPQNudZkBt3kRKAEAAKwldUvTDjjggCZ54lXdF/Ydd9wxl1122Sr3q5sl1bZt2/zv//7vGtfBhqOpZ8CtibpZUnfccYcZcJsBgRIAAMBacsEFF+T999/PjTfemGbN1nzHkQEDBuTdd9/Nz3/+87Rt23aV+/3oRz/KxIkTM2TIkOy4445rXAcbjqaeAbe6zIDb/AiUAAAA1pIXXnghFRUVDT46fd68eUmWhz3XX399unTpktGjR3/keEnyzW9+M9/85jfrnVuwYEGS5I477sgf//jHJMmsWbPq9Rs8ePAKs1gWLVqUJHnqqafSqVOnJMno0aPTpUuXVb9R1oumngG3usyA2zwJlAAAANai2travPnmm42eX7BgQRYsWJBWrVqt8pgrG2/RokXlkOjD3nrrrUb7LVmypDxubW3tKtfC+tPUM+BWlxlwmydPeQMAAFhL5s6dm1Kp1ODrrLPOSpIMGjQopVIpU6ZM+cjxXnzxxUbHq9tTqV+/fuVjde67775G+912221JkqOPPrp8rGvXrk3+Z0HT++AMuE6dOtV7/e53v0uyPOzp1KlTDjrooLVaR7J8BtyH6/j2t7+d5P9mwHXq1CnTp09fa7Ww7pihBAAAsIG59tprc+211+bQQw/NnXfeub7LYQO2NmbArS4z4DYvZigBAABsYObOnZupU6eW90CChjT1DLjVZQbc5kmgBAAAAJuRa6+9Nl27ds1pp522vkthIyZQAgAAWA9++ctfplQq5ZJLLlnh3MCBA1MqlfLEE0+s8nh1fX7xi18UquPss89OqVTKo48+WqgfG6+VzYCbPn16OnToUH4NHjw4SfKb3/ym3vERI0as67LZwNhDCQAAAEiyfH+jd955Z4XjNTU1qampKf++dOnSdVkWG6CK0ge3/t/IzJ8/P9XV1Zk3b17atWu3vssBAABgQzWwen1X0HQGzlvfFTSdTeV92UTekyI5iyVvAAAAABRiyRsAAEBT21RmXST1Zl5Mnjw5jz76aJ599tk8++yzefnll1NbW5tBgwY1uBfUqpg3b16uueaa3HPPPZk0aVJatmyZfffdN1//+tdz+umnN9hnzJgx+e1vf5tRo0ZlypQpeeutt9KsWbPssssuOe6443LhhRdmu+22W616gFUjUAIAAGCVXHfddbnuuuuabLw33ngjRx55ZCZMmJDmzZvn4x//eJYuXZrhw4fnqaeeyt/+9rfceOONK/S75557cvXVV6d58+bp1KlT9t5778ydOzfjx4/Pyy+/nNtuuy2PPPJIPvGJTzRZrUB9AiUAAABWSYcOHfL5z38+Bx98cA466KD84he/yB/+8IfVHu+MM87IhAkTsvfee+ePf/xjunbtmiQZO3Zsjj/++PzsZz9Ljx49csYZZ9Trd/jhh+fAAw/M0UcfXW+fl6lTp6Zv377561//mjPOOCPjxo1b7do2ZF3/60/ru4QmM6XV+q6A1SVQAgAAYJV8eFnbnXfeudpjjR07No8//niS5Be/+EU5TEqS/fbbLz/+8Y9z2mmnZeDAgSsESsccc0yDY+6888757W9/m06dOuXll1/OhAkTsttuu612jUDjbMoNAADAOjdixIgkyY477phDDz10hfN9+vRJs2bNMmnSpDz//POrPG7Hjh2z1VZbJUkWLlzYNMUCKxAoAQAAsM7NmTMnSdK5c+cGz7ds2TIdOnRIkjzzzDOrPO5rr72Wd999N1tuuaXZSbAWCZQAAABY56qrlz8J74033mjw/JIlS/L2228nSV599dWPHO/tt9/O/fffnxNPPDFJcuWVV6ZNmzZNVC3wYQIlAAAA1rmDDjooSfLPf/4zzz777Arn77vvvixbtizJ/81m+rAXX3wxFRUVqaioyLbbbpvevXundevWeeCBB/KNb3xj7RUPCJQAAABY9w455JAceOCBSZKzzz47r732WvncqFGj8t3vfrf8+6JFixoco23btunZs2d69OiRrl27pnnz5hk3blxuv/32vPvuu2v3BmAzJ1ACAABgvRg6dGg6deqUf/zjH9lzzz2z++67Z5dddsmhhx6ahQsX5gtf+EKS5cFRQ7p3757hw4dnxIgRmTx5ciZPnpw+ffrk7rvvzhFHHJH3339/Xd4ObFYESgAAAKwXu+++e1544YV8+9vfTteuXTNlypT861//yle+8pWMGTMm7dq1S5J06tRplcbr0qVL7rzzzuy333556aWXcuedd67N8mGzJlACAAA2aA8++GA++9nPZuutt84WW2yRAw44ID/96U/L++usqrq9dj7q9atf/apevzFjxqR///457LDDstNOO6V169bZYost8vGPfzz9+/fPm2++2ZS3u9np1KlTrr322rz++uupqanJ7Nmz85vf/Ca77LJLnnvuuSQpL41bFc2aNcvnPve5JMvfO2DtaLG+CwAAAGjMVVddlYsvvjhJ0q1bt7Rt2zZjx47Nt771rTz66KO5995706zZqv07ec+ePRs9N2fOnLzyyitJkkMPPbTeuXvuuSdXX311mjdvnk6dOmXvvffO3LlzM378+Lz88su57bbb8sgjj+QTn/jEat4lDXn55Zfz6quvplWrVvnsZz9bqG/dUjdL3mDtESgBAAAbpKeffjrf+9730qxZs/zmN7/J6aefniQZO3Zsjj322Nx///358Y9/nAsvvHCVxhs+fHij5y655JK88sorOfjgg7P77rvXO3f44YfnwAMPzNFHH11egpUkU6dOTd++ffPXv/41Z5xxRsaNG7cad0lDSqVSOUj8yle+kq222mqV+77//vv505/+lCTZf//910Z5QCx5AwAANlCXX355SqVSzj333HKYlCT77bdffvzjHydZPoNp6dKla3SdUqmUoUOHJknOOOOMFc4fc8wx6dOnT70wKUl23nnn/Pa3v01FRUVefvnlTJgwYY3q2FRde+216dq1a0477bQVzg0fPjyPPfZYSqVS+dg777yTc845Jw888EC22267XHXVVSv0O/vss/Pss8/W65csn9XUu3fvjB8/Pp06dcrJJ5/c9DcEJBEoAQAbmabaS+WFF17IpZdemsMPPzwdOnRIZWVlOnbsmOOOOy733ntvo/1++ctffuT+Kw899NCa3uZGp6nel1mzZuX222/PN7/5zRx88MGpqqpKRUVFzj333I/sW1NTk2uuuSYHHnhg2rZtmy233DIHHXRQbrjhhsJ1bArW92ela9euq7Rf0Q9+8IMG+8+fPz+PPvpokqRfv34rnD/llFPSrl27vPPOO3n88ccL3dOHPfXUU5kyZUoqKysbDD1WpmPHjuXZMwsXLlyjOjYGI0aMSIcOHcqvuk2vr7zyynrHp0+fXu4zd+7cTJ06NbNmzVphvOeeey6f/exnU11dnf322y/77rtvOnXqlF/96lfp3LlzHn300XTo0GGFfr/61a9yyCGHpLq6Ovvvv38++clPZvvtt88+++yTBx98MB07dsz999+/QggINB2BEsAGZH1/IZs7d25+97vf5T//8z/z6U9/Om3atElFRUXhfQs2Jev7Panzj3/8I1/5yley/fbbp1WrVtl1111z4YUXZu7cuev8Xuo8/fTT6d27d7bddtu0bt06e+21VwYNGpTFixc32mfJkiW57rrrcuihh6a6ujqVlZXZfvvt06dPn/z1r3/9yGteddVVOeGEE/LYY49lq622Svfu3ct7qfTp02eV7+X111/PAQcckEGDBuVvf/tb2rVrl/322y/vv/9+HnrooXzpS1/K2WefvdLxOnbsmJ49ezb4WtWlGZvCe5I03fuSJHfeeWfOOuus/L//9/8yevToLFmyZJX6vffeezn88MNz4YUX5oUXXsjOO++cXXfdNS+88EK+8Y1vpHfv3qu0l8r6/sw31ebPG8Jn5aCDDmr0M/LBvYY+9alPNXjtF154IUuWLEmrVq1ywAEHrHC+srIyBx10UJJk1KhRq3Q/jfnNb36TJPnc5z7XYHixMq+99lrefffdbLnlltltt93WqI6NwdKlS/POO++UXzU1NUmWh2kfPF5bW7tK4x1xxBE588wz06lTp7z++uuZPHly9tprrwwcODCvvPJKPv7xjzfY7/bbb89ZZ52VLl26ZPr06Rk7dmyWLFmSHj165Ic//GHGjx9f/u8DWDsEShu49f0Xzab6crm+7+O1117LlVdemV69eqVTp06prKzM1ltvnSOPPDK33XZboTrW97005Rf+9X0vTfW+rO/7aKrZChvCF7Innngip512Wn784x9nxIgRWbRo0Spf88M2hfdlQ3hPkuTxxx/PgQcemDvuuCO1tbXZe++9M2vWrPJMjFX5gtmU95IkQ4cOzWc+85ncf//9qaqqyp577pmJEyfm0ksvzWGHHdbgv9IvXLgwRxxxRL7zne9k1KhR2XrrrbPvvvtm8eLFue+++3L00Udn8ODBjV7zg3up3HHHHXn99dczduzYjBkzJtttt115L5VVUSqVsv322+dHP/pRZsyYkUmTJuW5557L22+/nZ/+9KflpzzdcMMNjY5x3HHHZfjw4Q2+DjnkkI+sYVN4T5KmfV+SpF27djnmmGPy/e9/P8OGDct//Md/rFK/b3/72xk1alR22GGHvPDCC3n55Zfz4osvZuLEidl7773zxz/+MVdeeeVKx9gQPvN1mz+PHDkyy5Yty957753tt98+48ePz9VXX5299947L7zwwkrH2FA+K3fffXejn5ELLrggSbL99tvn6KOPbvDadcvHdtppp7Ro0fDWr926davXdnXU1NTk7rvvTtLwcrfGvP3227n//vtz4oknJlk+Q6dNmzarXcfG4ogjjkipVPrIV9euXct9Bg4cmFKplCeeeGKF8fbff//86le/ymuvvZYFCxbkvffey9ixY3PZZZetdHbRGWeckV/+8pd5+eWX884775SDruHDh+d73/teoT2XgNUjUNqAbQh/0WyKL5fr+z5qa2uz++6753vf+14eeeSRVFZWZv/9909lZWWeeOKJ9O3bN8cdd9xK//V2Q7mXpOm+8K/ve2mq92V938cHrclshQ3lC1nr1q1z2GGH5cILL8xdd92VK664YpWv+UGbwvuyobwn7733Xv7t3/4tixYtyre+9a288cYbef755zNt2rT07NkzkyZNanApyNq8lylTpqRfv36pra3N4MGDM3369IwZMyYTJkzI7rvvntGjR2fAgAEr9Pvxj3+cp59+Ottuu22eeeaZTJ48Oc8//3xmz56dgQMHJkm+973vZeLEiQ1etyn3Utlxxx0zceLEDBgwINtvv335eLNmzfLNb34z5513XpLk5ptvXuU/lyI2lfckafo9bvr27ZuHH344l19+eU488cRsvfXWH9nnnXfeye23316+p/322698rmvXrvnFL36RJBkyZEj+9a9/NTjGhvKZP/zww3PPPffk3XffzT//+c8899xzmThxYl5//fUcddRReeeddz4y9NgYPiu//vWvkyRf/vKX07x58wbbzJkzJ0lW+v/Vdefq2q6OBx54IHPnzk11dXW+8IUvrLTtiy++WP5HiW233Ta9e/dO69at88ADD+Qb3/jGatcAsDESKG2gNpS/aK7pl8sN4T5KpVLat2+fSy65JK+//nqmT5+e0aNH580338zvfve7tG7dOg8//HAuueSSDf5ekqb5wr8h3EtTvC8bwn180JrMVtgQvpAlybHHHpsnn3wyQ4YMySmnnFLvy8Oq2lTelw3lPfnZz36Wt956K3vuuWd+/OMfp7KyMkmyzTbb5I477kiLFi3ypz/9KWPGjFln9zJkyJDU1NSkV69e6d+/fyoqKpIs35z21ltvTZLcdNNNK8ycqnvizn//93/X+7OvrKzMZZddlv333z+1tbV55JFHVrhmU++l0qpVq5XOJOjVq1eS5TMp14ZN4T1J1u0eNyszatSo1NbWplmzZunTp88K5w899NB07tw57733XqMzEzeUz/yabv68MXxWpk6dmqeeeirJymcE1f2jUsuWLRttU1VVlSRrNKO2brnbKaecklatWq20bdu2bdOzZ8/06NEjXbt2TfPmzTNu3Ljcfvvteffdd1e7BoCNkUBpA7Wh/EVzTb9cbgj30bx580yaNCmDBg0qT4uuc+qpp+ayyy5Lktx6660rnTWxIdxL0jRf+DeEe2mK92VDuI+msKF8IWsqm8L7siG9J/fcc0+S5U+z+fC/4u+0007l5a6///3vG+zf1PdSKpXKm/A2NF6PHj2yxx57ZOnSpRk2bFi9c3Vf+D78ma+z6667JkmD+9ysy71Ukv/7Itu6detG24wdOzZf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", "text/plain": [ "
" ] }, "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": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "测试实例: GR96.tsp\n", "\n", "使用算法: test\n", "执行时间:0.2226秒, 路径长度:629.57\n", "\n", "测试实例: XIT1083.tsp\n", "\n", "使用算法: test\n", "执行时间:169.8405秒, 路径长度:4018.53\n", "\n", "测试实例: RBU737.tsp\n", "\n", "使用算法: test\n", "执行时间:60.1185秒, 路径长度:3735.38\n", "\n", "测试实例: ulysses16.tsp\n", "\n", "使用算法: test\n", "执行时间:0.0236秒, 路径长度:74.00\n", "\n", "测试实例: PBK411.tsp\n", "\n", "使用算法: test\n", "执行时间:8.7138秒, 路径长度:1544.15\n", "\n", "测试实例: PR76.tsp\n", "\n", "使用算法: test\n", "执行时间:0.1272秒, 路径长度:120233.54\n", "\n", "测试实例: CHN144.tsp\n", "\n", "使用算法: test\n", "执行时间:0.4914秒, 路径长度:33138.13\n", "\n", "测试实例: eil76.tsp\n", "\n", "使用算法: test\n", "执行时间:0.1449秒, 路径长度:588.83\n", "\n", "测试实例: eil101.tsp\n", "\n", "使用算法: test\n", "执行时间:0.2218秒, 路径长度:693.38\n", "\n", "测试实例: ulysses8.tsp\n", "\n", "使用算法: test\n", "执行时间:0.0171秒, 路径长度:37.83\n", "\n", "算法在各个实例上的表现:\n", "\n", "test:\n", " GR96.tsp: 路径长度 = 629.57\n", " XIT1083.tsp: 路径长度 = 4018.53\n", " RBU737.tsp: 路径长度 = 3735.38\n", " ulysses16.tsp: 路径长度 = 74.00\n", " PBK411.tsp: 路径长度 = 1544.15\n", " PR76.tsp: 路径长度 = 120233.54\n", " CHN144.tsp: 路径长度 = 33138.13\n", " eil76.tsp: 路径长度 = 588.83\n", " eil101.tsp: 路径长度 = 693.38\n", " ulysses8.tsp: 路径长度 = 37.83\n", " GR96.tsp: 执行时间 = 0.2226秒\n", " XIT1083.tsp: 执行时间 = 169.8405秒\n", " RBU737.tsp: 执行时间 = 60.1185秒\n", " ulysses16.tsp: 执行时间 = 0.0236秒\n", " PBK411.tsp: 执行时间 = 8.7138秒\n", " PR76.tsp: 执行时间 = 0.1272秒\n", " CHN144.tsp: 执行时间 = 0.4914秒\n", " eil76.tsp: 执行时间 = 0.1449秒\n", " eil101.tsp: 执行时间 = 0.2218秒\n", " ulysses8.tsp: 执行时间 = 0.0171秒\n" ] } ], "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 }