2344 lines
193 KiB
Plaintext
2344 lines
193 KiB
Plaintext
{
|
||
"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": 3,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"过滤后的文件列表:\n",
|
||
"burma14.tsp: 14\n",
|
||
"ulysses16.tsp: 16\n",
|
||
"gr17.tsp: 17\n",
|
||
"gr21.tsp: 21\n",
|
||
"ulysses22.tsp: 22\n",
|
||
"gr24.tsp: 24\n",
|
||
"fri26.tsp: 26\n",
|
||
"bays29.tsp: 29\n",
|
||
"bayg29.tsp: 29\n",
|
||
"swiss42.tsp: 42\n",
|
||
"dantzig42.tsp: 42\n",
|
||
"hk48.tsp: 48\n",
|
||
"gr48.tsp: 48\n",
|
||
"att48.tsp: 48\n",
|
||
"eil51.tsp: 51\n",
|
||
"berlin52.tsp: 52\n",
|
||
"brazil58.tsp: 58\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",
|
||
"gr120.tsp: 120\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",
|
||
"si175.tsp: 175\n",
|
||
"brg180.tsp: 180\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",
|
||
"si535.tsp: 535\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"
|
||
]
|
||
}
|
||
],
|
||
"source": [
|
||
"def get_file_number(filename):\n",
|
||
" \"\"\"从文件名中提取数字部分\"\"\"\n",
|
||
" try:\n",
|
||
" # 假设文件名格式为\"file_123.tsp\"\n",
|
||
" number = int(''.join(filter(str.isdigit, filename)))\n",
|
||
" return number\n",
|
||
" except ValueError:\n",
|
||
" print(f\"无法从文件名提取数字: {filename}\")\n",
|
||
" return float('inf')\n",
|
||
"\n",
|
||
"# 过滤文件列表,仅保留数字小于1000的文件\n",
|
||
"filtered_files = [f for f in test_files if get_file_number(f) < 1000]\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": null,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"\n",
|
||
"测试实例: burma14.tsp\n",
|
||
"\n",
|
||
"使用算法: 贪心算法\n",
|
||
"执行时间:0.0000秒, 路径长度:38.69\n",
|
||
"\n",
|
||
"使用算法: 最近邻算法\n",
|
||
"执行时间:0.0001秒, 路径长度:38.69\n",
|
||
"\n",
|
||
"使用算法: 插入法\n",
|
||
"执行时间:0.0004秒, 路径长度:32.44\n",
|
||
"\n",
|
||
"使用算法: EoH-TSP\n",
|
||
"执行时间:0.0127秒, 路径长度:38.41\n",
|
||
"\n",
|
||
"使用算法: AAD-TSP\n",
|
||
"执行时间:0.0236秒, 路径长度:30.88\n",
|
||
"\n",
|
||
"使用算法: MEoH-TSP\n",
|
||
"执行时间:0.0015秒, 路径长度:38.80\n",
|
||
"\n",
|
||
"测试实例: ulysses16.tsp\n",
|
||
"\n",
|
||
"使用算法: 贪心算法\n",
|
||
"执行时间:0.0001秒, 路径长度:104.73\n",
|
||
"\n",
|
||
"使用算法: 最近邻算法\n",
|
||
"执行时间:0.0000秒, 路径长度:104.73\n",
|
||
"\n",
|
||
"使用算法: 插入法\n",
|
||
"执行时间:0.0006秒, 路径长度:79.39\n",
|
||
"\n",
|
||
"使用算法: EoH-TSP\n",
|
||
"执行时间:0.0131秒, 路径长度:98.29\n",
|
||
"\n",
|
||
"使用算法: AAD-TSP\n",
|
||
"执行时间:0.0275秒, 路径长度:75.10\n",
|
||
"\n",
|
||
"使用算法: MEoH-TSP\n",
|
||
"执行时间:0.0011秒, 路径长度:104.65\n",
|
||
"\n",
|
||
"测试实例: gr17.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",
|
||
"测试实例: gr21.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",
|
||
"测试实例: ulysses22.tsp\n",
|
||
"\n",
|
||
"使用算法: 贪心算法\n",
|
||
"执行时间:0.0001秒, 路径长度:89.64\n",
|
||
"\n",
|
||
"使用算法: 最近邻算法\n",
|
||
"执行时间:0.0001秒, 路径长度:89.64\n",
|
||
"\n",
|
||
"使用算法: 插入法\n",
|
||
"执行时间:0.0013秒, 路径长度:76.99\n",
|
||
"\n",
|
||
"使用算法: EoH-TSP\n",
|
||
"执行时间:0.0149秒, 路径长度:89.49\n",
|
||
"\n",
|
||
"使用算法: AAD-TSP\n",
|
||
"执行时间:0.0332秒, 路径长度:76.59\n",
|
||
"\n",
|
||
"使用算法: MEoH-TSP\n",
|
||
"执行时间:0.0010秒, 路径长度:91.92\n",
|
||
"\n",
|
||
"测试实例: gr24.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",
|
||
"测试实例: fri26.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",
|
||
"测试实例: bays29.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",
|
||
"测试实例: bayg29.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",
|
||
"测试实例: swiss42.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",
|
||
"测试实例: 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",
|
||
"测试实例: hk48.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",
|
||
"测试实例: gr48.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.0110秒, 路径长度:37314.09\n",
|
||
"\n",
|
||
"使用算法: EoH-TSP\n",
|
||
"执行时间:0.0375秒, 路径长度:40526.42\n",
|
||
"\n",
|
||
"使用算法: AAD-TSP\n",
|
||
"执行时间:0.0738秒, 路径长度:35594.44\n",
|
||
"\n",
|
||
"使用算法: MEoH-TSP\n",
|
||
"执行时间:0.0019秒, 路径长度:37686.87\n",
|
||
"\n",
|
||
"测试实例: eil51.tsp\n",
|
||
"\n",
|
||
"使用算法: 贪心算法\n",
|
||
"执行时间:0.0003秒, 路径长度:513.61\n",
|
||
"\n",
|
||
"使用算法: 最近邻算法\n",
|
||
"执行时间:0.0002秒, 路径长度:513.61\n",
|
||
"\n",
|
||
"使用算法: 插入法\n",
|
||
"执行时间:0.0160秒, 路径长度:496.25\n",
|
||
"\n",
|
||
"使用算法: EoH-TSP\n",
|
||
"执行时间:0.0369秒, 路径长度:513.61\n",
|
||
"\n",
|
||
"使用算法: AAD-TSP\n",
|
||
"执行时间:0.0695秒, 路径长度:465.91\n",
|
||
"\n",
|
||
"使用算法: MEoH-TSP\n",
|
||
"执行时间:0.0017秒, 路径长度:458.95\n",
|
||
"\n",
|
||
"测试实例: berlin52.tsp\n",
|
||
"\n",
|
||
"使用算法: 贪心算法\n",
|
||
"执行时间:0.0003秒, 路径长度:8980.92\n",
|
||
"\n",
|
||
"使用算法: 最近邻算法\n",
|
||
"执行时间:0.0003秒, 路径长度:8980.92\n",
|
||
"\n",
|
||
"使用算法: 插入法\n",
|
||
"执行时间:0.0145秒, 路径长度:9014.89\n",
|
||
"\n",
|
||
"使用算法: EoH-TSP\n",
|
||
"执行时间:0.0420秒, 路径长度:8901.85\n",
|
||
"\n",
|
||
"使用算法: AAD-TSP\n",
|
||
"执行时间:0.0648秒, 路径长度:7938.36\n",
|
||
"\n",
|
||
"使用算法: MEoH-TSP\n",
|
||
"执行时间:0.0023秒, 路径长度:8835.06\n",
|
||
"\n",
|
||
"测试实例: brazil58.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",
|
||
"测试实例: st70.tsp\n",
|
||
"\n",
|
||
"使用算法: 贪心算法\n",
|
||
"执行时间:0.0003秒, 路径长度:805.53\n",
|
||
"\n",
|
||
"使用算法: 最近邻算法\n",
|
||
"执行时间:0.0003秒, 路径长度:805.53\n",
|
||
"\n",
|
||
"使用算法: 插入法\n",
|
||
"执行时间:0.0586秒, 路径长度:778.99\n",
|
||
"\n",
|
||
"使用算法: EoH-TSP\n",
|
||
"执行时间:0.0601秒, 路径长度:805.53\n",
|
||
"\n",
|
||
"使用算法: AAD-TSP\n",
|
||
"执行时间:0.0983秒, 路径长度:753.15\n",
|
||
"\n",
|
||
"使用算法: MEoH-TSP\n",
|
||
"执行时间:0.0041秒, 路径长度:871.65\n",
|
||
"\n",
|
||
"测试实例: pr76.tsp\n",
|
||
"\n",
|
||
"使用算法: 贪心算法\n",
|
||
"执行时间:0.0007秒, 路径长度:153461.92\n",
|
||
"\n",
|
||
"使用算法: 最近邻算法\n",
|
||
"执行时间:0.0007秒, 路径长度:153461.92\n",
|
||
"\n",
|
||
"使用算法: 插入法\n",
|
||
"执行时间:0.0521秒, 路径长度:125936.21\n",
|
||
"\n",
|
||
"使用算法: EoH-TSP\n",
|
||
"执行时间:0.0669秒, 路径长度:145445.91\n",
|
||
"\n",
|
||
"使用算法: AAD-TSP\n",
|
||
"执行时间:0.1357秒, 路径长度:111623.46\n",
|
||
"\n",
|
||
"使用算法: MEoH-TSP\n",
|
||
"执行时间:0.0041秒, 路径长度:123787.14\n",
|
||
"\n",
|
||
"测试实例: eil76.tsp\n",
|
||
"\n",
|
||
"使用算法: 贪心算法\n",
|
||
"执行时间:0.0006秒, 路径长度:711.99\n",
|
||
"\n",
|
||
"使用算法: 最近邻算法\n",
|
||
"执行时间:0.0006秒, 路径长度:711.99\n",
|
||
"\n",
|
||
"使用算法: 插入法\n",
|
||
"执行时间:0.0502秒, 路径长度:612.39\n",
|
||
"\n",
|
||
"使用算法: EoH-TSP\n",
|
||
"执行时间:0.0650秒, 路径长度:669.24\n",
|
||
"\n",
|
||
"使用算法: AAD-TSP\n",
|
||
"执行时间:0.1130秒, 路径长度:622.71\n",
|
||
"\n",
|
||
"使用算法: MEoH-TSP\n",
|
||
"执行时间:0.0046秒, 路径长度:577.27\n",
|
||
"\n",
|
||
"测试实例: gr96.tsp\n",
|
||
"\n",
|
||
"使用算法: 贪心算法\n",
|
||
"执行时间:0.0010秒, 路径长度:707.09\n",
|
||
"\n",
|
||
"使用算法: 最近邻算法\n",
|
||
"执行时间:0.0008秒, 路径长度:707.09\n",
|
||
"\n",
|
||
"使用算法: 插入法\n",
|
||
"执行时间:0.0906秒, 路径长度:651.44\n",
|
||
"\n",
|
||
"使用算法: EoH-TSP\n",
|
||
"执行时间:0.0877秒, 路径长度:678.04\n",
|
||
"\n",
|
||
"使用算法: AAD-TSP\n",
|
||
"执行时间:0.1959秒, 路径长度:623.53\n",
|
||
"\n",
|
||
"使用算法: MEoH-TSP\n",
|
||
"执行时间:0.0050秒, 路径长度:573.48\n",
|
||
"\n",
|
||
"测试实例: rat99.tsp\n",
|
||
"\n",
|
||
"使用算法: 贪心算法\n",
|
||
"执行时间:0.0011秒, 路径长度:1564.72\n",
|
||
"\n",
|
||
"使用算法: 最近邻算法\n",
|
||
"执行时间:0.0014秒, 路径长度:1564.72\n",
|
||
"\n",
|
||
"使用算法: 插入法\n",
|
||
"执行时间:0.1013秒, 路径长度:1482.02\n",
|
||
"\n",
|
||
"使用算法: EoH-TSP\n",
|
||
"执行时间:0.0813秒, 路径长度:1564.72\n",
|
||
"\n",
|
||
"使用算法: AAD-TSP\n",
|
||
"执行时间:0.2110秒, 路径长度:1377.07\n",
|
||
"\n",
|
||
"使用算法: MEoH-TSP\n",
|
||
"执行时间:0.0055秒, 路径长度:1492.74\n",
|
||
"\n",
|
||
"测试实例: rd100.tsp\n",
|
||
"\n",
|
||
"使用算法: 贪心算法\n",
|
||
"执行时间:0.0014秒, 路径长度:9941.16\n",
|
||
"\n",
|
||
"使用算法: 最近邻算法\n",
|
||
"执行时间:0.0008秒, 路径长度:9941.16\n",
|
||
"\n",
|
||
"使用算法: 插入法\n",
|
||
"执行时间:0.1103秒, 路径长度:8979.37\n",
|
||
"\n",
|
||
"使用算法: EoH-TSP\n",
|
||
"执行时间:0.0916秒, 路径长度:9941.16\n",
|
||
"\n",
|
||
"使用算法: AAD-TSP\n",
|
||
"执行时间:0.1830秒, 路径长度:8864.57\n",
|
||
"\n",
|
||
"使用算法: MEoH-TSP\n",
|
||
"执行时间:0.0057秒, 路径长度:10510.18\n",
|
||
"\n",
|
||
"测试实例: kroB100.tsp\n",
|
||
"\n",
|
||
"使用算法: 贪心算法\n",
|
||
"执行时间:0.0013秒, 路径长度:29155.04\n",
|
||
"\n",
|
||
"使用算法: 最近邻算法\n",
|
||
"执行时间:0.0013秒, 路径长度:29155.04\n",
|
||
"\n",
|
||
"使用算法: 插入法\n",
|
||
"执行时间:0.1989秒, 路径长度:25580.92\n",
|
||
"\n",
|
||
"使用算法: EoH-TSP\n",
|
||
"执行时间:0.1028秒, 路径长度:29155.04\n",
|
||
"\n",
|
||
"使用算法: AAD-TSP\n",
|
||
"执行时间:0.1727秒, 路径长度:25392.46\n",
|
||
"\n",
|
||
"使用算法: MEoH-TSP\n",
|
||
"执行时间:0.0031秒, 路径长度:25679.71\n",
|
||
"\n",
|
||
"测试实例: kroD100.tsp\n",
|
||
"\n",
|
||
"使用算法: 贪心算法\n",
|
||
"执行时间:0.0013秒, 路径长度:26950.46\n",
|
||
"\n",
|
||
"使用算法: 最近邻算法\n",
|
||
"执行时间:0.0011秒, 路径长度:26950.46\n",
|
||
"\n",
|
||
"使用算法: 插入法\n",
|
||
"执行时间:0.0972秒, 路径长度:25204.27\n",
|
||
"\n",
|
||
"使用算法: EoH-TSP\n",
|
||
"执行时间:0.0926秒, 路径长度:26950.46\n",
|
||
"\n",
|
||
"使用算法: AAD-TSP\n",
|
||
"执行时间:0.1731秒, 路径长度:24720.72\n",
|
||
"\n",
|
||
"使用算法: MEoH-TSP\n",
|
||
"执行时间:0.0050秒, 路径长度:26072.81\n",
|
||
"\n",
|
||
"测试实例: kroA100.tsp\n",
|
||
"\n",
|
||
"使用算法: 贪心算法\n",
|
||
"执行时间:0.0008秒, 路径长度:26856.39\n",
|
||
"\n",
|
||
"使用算法: 最近邻算法\n",
|
||
"执行时间:0.0011秒, 路径长度:26856.39\n",
|
||
"\n",
|
||
"使用算法: 插入法\n",
|
||
"执行时间:0.1127秒, 路径长度:24307.78\n",
|
||
"\n",
|
||
"使用算法: EoH-TSP\n",
|
||
"执行时间:0.0879秒, 路径长度:26856.39\n",
|
||
"\n",
|
||
"使用算法: AAD-TSP\n",
|
||
"执行时间:0.1697秒, 路径长度:23182.14\n",
|
||
"\n",
|
||
"使用算法: MEoH-TSP\n",
|
||
"执行时间:0.0055秒, 路径长度:22683.29\n",
|
||
"\n",
|
||
"测试实例: kroC100.tsp\n",
|
||
"\n",
|
||
"使用算法: 贪心算法\n",
|
||
"执行时间:0.0011秒, 路径长度:26327.36\n",
|
||
"\n",
|
||
"使用算法: 最近邻算法\n",
|
||
"执行时间:0.0012秒, 路径长度:26327.36\n",
|
||
"\n",
|
||
"使用算法: 插入法\n",
|
||
"执行时间:0.0993秒, 路径长度:25262.17\n",
|
||
"\n",
|
||
"使用算法: EoH-TSP\n",
|
||
"执行时间:0.0777秒, 路径长度:26327.36\n",
|
||
"\n",
|
||
"使用算法: AAD-TSP\n",
|
||
"执行时间:0.1771秒, 路径长度:23392.80\n",
|
||
"\n",
|
||
"使用算法: MEoH-TSP\n",
|
||
"执行时间:0.0034秒, 路径长度:24294.06\n",
|
||
"\n",
|
||
"测试实例: kroE100.tsp\n",
|
||
"\n",
|
||
"使用算法: 贪心算法\n",
|
||
"执行时间:0.0012秒, 路径长度:27587.19\n",
|
||
"\n",
|
||
"使用算法: 最近邻算法\n",
|
||
"执行时间:0.0012秒, 路径长度:27587.19\n",
|
||
"\n",
|
||
"使用算法: 插入法\n",
|
||
"执行时间:0.0974秒, 路径长度:25902.00\n",
|
||
"\n",
|
||
"使用算法: EoH-TSP\n",
|
||
"执行时间:0.0787秒, 路径长度:27587.19\n",
|
||
"\n",
|
||
"使用算法: AAD-TSP\n",
|
||
"执行时间:0.1789秒, 路径长度:23845.70\n",
|
||
"\n",
|
||
"使用算法: MEoH-TSP\n",
|
||
"执行时间:0.0045秒, 路径长度:25221.45\n",
|
||
"\n",
|
||
"测试实例: eil101.tsp\n",
|
||
"\n",
|
||
"使用算法: 贪心算法\n",
|
||
"执行时间:0.0006秒, 路径长度:825.24\n",
|
||
"\n",
|
||
"使用算法: 最近邻算法\n",
|
||
"执行时间:0.0007秒, 路径长度:825.24\n",
|
||
"\n",
|
||
"使用算法: 插入法\n",
|
||
"执行时间:0.0935秒, 路径长度:702.96\n",
|
||
"\n",
|
||
"使用算法: EoH-TSP\n",
|
||
"执行时间:0.0784秒, 路径长度:847.59\n",
|
||
"\n",
|
||
"使用算法: AAD-TSP\n",
|
||
"执行时间:0.2062秒, 路径长度:702.70\n",
|
||
"\n",
|
||
"使用算法: MEoH-TSP\n",
|
||
"执行时间:0.0059秒, 路径长度:720.41\n",
|
||
"\n",
|
||
"测试实例: lin105.tsp\n",
|
||
"\n",
|
||
"使用算法: 贪心算法\n",
|
||
"执行时间:0.0014秒, 路径长度:20362.76\n",
|
||
"\n",
|
||
"使用算法: 最近邻算法\n",
|
||
"执行时间:0.0013秒, 路径长度:20362.76\n",
|
||
"\n",
|
||
"使用算法: 插入法\n",
|
||
"执行时间:0.1062秒, 路径长度:16934.62\n",
|
||
"\n",
|
||
"使用算法: EoH-TSP\n",
|
||
"执行时间:0.0898秒, 路径长度:20362.76\n",
|
||
"\n",
|
||
"使用算法: AAD-TSP\n",
|
||
"执行时间:0.2152秒, 路径长度:18234.30\n",
|
||
"\n",
|
||
"使用算法: MEoH-TSP\n",
|
||
"执行时间:0.0048秒, 路径长度:19041.58\n",
|
||
"\n",
|
||
"测试实例: pr107.tsp\n",
|
||
"\n",
|
||
"使用算法: 贪心算法\n",
|
||
"执行时间:0.0015秒, 路径长度:46678.15\n",
|
||
"\n",
|
||
"使用算法: 最近邻算法\n",
|
||
"执行时间:0.0010秒, 路径长度:46678.15\n",
|
||
"\n",
|
||
"使用算法: 插入法\n",
|
||
"执行时间:0.1361秒, 路径长度:52587.76\n",
|
||
"\n",
|
||
"使用算法: EoH-TSP\n",
|
||
"执行时间:0.0982秒, 路径长度:47029.63\n",
|
||
"\n",
|
||
"使用算法: AAD-TSP\n",
|
||
"执行时间:0.1367秒, 路径长度:45055.24\n",
|
||
"\n",
|
||
"使用算法: MEoH-TSP\n",
|
||
"执行时间:0.0038秒, 路径长度:51115.61\n",
|
||
"\n",
|
||
"测试实例: gr120.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",
|
||
"测试实例: pr124.tsp\n",
|
||
"\n",
|
||
"使用算法: 贪心算法\n",
|
||
"执行时间:0.0019秒, 路径长度:69299.43\n",
|
||
"\n",
|
||
"使用算法: 最近邻算法\n",
|
||
"执行时间:0.0014秒, 路径长度:69299.43\n",
|
||
"\n",
|
||
"使用算法: 插入法\n",
|
||
"执行时间:0.2075秒, 路径长度:65318.19\n",
|
||
"\n",
|
||
"使用算法: EoH-TSP\n",
|
||
"执行时间:0.1241秒, 路径长度:69299.43\n",
|
||
"\n",
|
||
"使用算法: AAD-TSP\n",
|
||
"执行时间:0.1977秒, 路径长度:62203.14\n",
|
||
"\n",
|
||
"使用算法: MEoH-TSP\n",
|
||
"执行时间:0.0073秒, 路径长度:68371.30\n",
|
||
"\n",
|
||
"测试实例: bier127.tsp\n",
|
||
"\n",
|
||
"使用算法: 贪心算法\n",
|
||
"执行时间:0.0022秒, 路径长度:135751.78\n",
|
||
"\n",
|
||
"使用算法: 最近邻算法\n",
|
||
"执行时间:0.0020秒, 路径长度:135751.78\n",
|
||
"\n",
|
||
"使用算法: 插入法\n",
|
||
"执行时间:0.2092秒, 路径长度:140690.94\n",
|
||
"\n",
|
||
"使用算法: EoH-TSP\n",
|
||
"执行时间:0.1129秒, 路径长度:135751.78\n",
|
||
"\n",
|
||
"使用算法: AAD-TSP\n",
|
||
"执行时间:0.1844秒, 路径长度:124341.92\n",
|
||
"\n",
|
||
"使用算法: MEoH-TSP\n",
|
||
"执行时间:0.0067秒, 路径长度:138054.23\n",
|
||
"\n",
|
||
"测试实例: ch130.tsp\n",
|
||
"\n",
|
||
"使用算法: 贪心算法\n",
|
||
"执行时间:0.0016秒, 路径长度:7575.29\n",
|
||
"\n",
|
||
"使用算法: 最近邻算法\n",
|
||
"执行时间:0.0015秒, 路径长度:7575.29\n",
|
||
"\n",
|
||
"使用算法: 插入法\n",
|
||
"执行时间:0.1986秒, 路径长度:7279.21\n",
|
||
"\n",
|
||
"使用算法: EoH-TSP\n",
|
||
"执行时间:0.1079秒, 路径长度:7575.29\n",
|
||
"\n",
|
||
"使用算法: AAD-TSP\n",
|
||
"执行时间:0.1865秒, 路径长度:7093.18\n",
|
||
"\n",
|
||
"使用算法: MEoH-TSP\n",
|
||
"执行时间:0.0061秒, 路径长度:7091.76\n",
|
||
"\n",
|
||
"测试实例: pr136.tsp\n",
|
||
"\n",
|
||
"使用算法: 贪心算法\n",
|
||
"执行时间:0.0011秒, 路径长度:120777.86\n",
|
||
"\n",
|
||
"使用算法: 最近邻算法\n",
|
||
"执行时间:0.0017秒, 路径长度:120777.86\n",
|
||
"\n",
|
||
"使用算法: 插入法\n",
|
||
"执行时间:0.2612秒, 路径长度:109587.25\n",
|
||
"\n",
|
||
"使用算法: EoH-TSP\n",
|
||
"执行时间:0.1175秒, 路径长度:118776.81\n",
|
||
"\n",
|
||
"使用算法: AAD-TSP\n",
|
||
"执行时间:0.2230秒, 路径长度:110107.30\n",
|
||
"\n",
|
||
"使用算法: MEoH-TSP\n",
|
||
"执行时间:0.0071秒, 路径长度:123247.21\n",
|
||
"\n",
|
||
"测试实例: gr137.tsp\n",
|
||
"\n",
|
||
"使用算法: 贪心算法\n",
|
||
"执行时间:0.0016秒, 路径长度:1022.22\n",
|
||
"\n",
|
||
"使用算法: 最近邻算法\n",
|
||
"执行时间:0.0016秒, 路径长度:1022.22\n",
|
||
"\n",
|
||
"使用算法: 插入法\n",
|
||
"执行时间:0.2303秒, 路径长度:821.29\n",
|
||
"\n",
|
||
"使用算法: EoH-TSP\n",
|
||
"执行时间:0.1218秒, 路径长度:1022.22\n",
|
||
"\n",
|
||
"使用算法: AAD-TSP\n",
|
||
"执行时间:0.4495秒, 路径长度:849.98\n",
|
||
"\n",
|
||
"使用算法: MEoH-TSP\n",
|
||
"执行时间:0.0058秒, 路径长度:901.99\n",
|
||
"\n",
|
||
"测试实例: pr144.tsp\n",
|
||
"\n",
|
||
"使用算法: 贪心算法\n",
|
||
"执行时间:0.0021秒, 路径长度:61650.72\n",
|
||
"\n",
|
||
"使用算法: 最近邻算法\n",
|
||
"执行时间:0.0013秒, 路径长度:61650.72\n",
|
||
"\n",
|
||
"使用算法: 插入法\n",
|
||
"执行时间:0.2701秒, 路径长度:73033.13\n",
|
||
"\n",
|
||
"使用算法: EoH-TSP\n",
|
||
"执行时间:0.1208秒, 路径长度:61650.72\n",
|
||
"\n",
|
||
"使用算法: AAD-TSP\n",
|
||
"执行时间:0.1746秒, 路径长度:61399.21\n",
|
||
"\n",
|
||
"使用算法: MEoH-TSP\n",
|
||
"执行时间:0.0086秒, 路径长度:60133.16\n",
|
||
"\n",
|
||
"测试实例: kroA150.tsp\n",
|
||
"\n",
|
||
"使用算法: 贪心算法\n",
|
||
"执行时间:0.0028秒, 路径长度:33609.87\n",
|
||
"\n",
|
||
"使用算法: 最近邻算法\n",
|
||
"执行时间:0.0019秒, 路径长度:33609.87\n",
|
||
"\n",
|
||
"使用算法: 插入法\n",
|
||
"执行时间:0.3224秒, 路径长度:29966.54\n",
|
||
"\n",
|
||
"使用算法: EoH-TSP\n",
|
||
"执行时间:0.1338秒, 路径长度:33609.87\n",
|
||
"\n",
|
||
"使用算法: AAD-TSP\n",
|
||
"执行时间:0.3611秒, 路径长度:28865.70\n",
|
||
"\n",
|
||
"使用算法: MEoH-TSP\n",
|
||
"执行时间:0.0073秒, 路径长度:31060.89\n",
|
||
"\n",
|
||
"测试实例: ch150.tsp\n",
|
||
"\n",
|
||
"使用算法: 贪心算法\n",
|
||
"执行时间:0.0021秒, 路径长度:8194.61\n",
|
||
"\n",
|
||
"使用算法: 最近邻算法\n",
|
||
"执行时间:0.0020秒, 路径长度:8194.61\n",
|
||
"\n",
|
||
"使用算法: 插入法\n",
|
||
"执行时间:0.3264秒, 路径长度:7994.29\n",
|
||
"\n",
|
||
"使用算法: EoH-TSP\n",
|
||
"执行时间:0.1287秒, 路径长度:8194.61\n",
|
||
"\n",
|
||
"使用算法: AAD-TSP\n",
|
||
"执行时间:0.3433秒, 路径长度:7161.32\n",
|
||
"\n",
|
||
"使用算法: MEoH-TSP\n",
|
||
"执行时间:0.0076秒, 路径长度:7589.72\n",
|
||
"\n",
|
||
"测试实例: kroB150.tsp\n",
|
||
"\n",
|
||
"使用算法: 贪心算法\n",
|
||
"执行时间:0.0020秒, 路径长度:32825.75\n",
|
||
"\n",
|
||
"使用算法: 最近邻算法\n",
|
||
"执行时间:0.0018秒, 路径长度:32825.75\n",
|
||
"\n",
|
||
"使用算法: 插入法\n",
|
||
"执行时间:0.3046秒, 路径长度:31588.68\n",
|
||
"\n",
|
||
"使用算法: EoH-TSP\n",
|
||
"执行时间:0.1527秒, 路径长度:32825.75\n",
|
||
"\n",
|
||
"使用算法: AAD-TSP\n",
|
||
"执行时间:0.3598秒, 路径长度:27629.77\n",
|
||
"\n",
|
||
"使用算法: MEoH-TSP\n",
|
||
"执行时间:0.0073秒, 路径长度:29848.14\n",
|
||
"\n",
|
||
"测试实例: pr152.tsp\n",
|
||
"\n",
|
||
"使用算法: 贪心算法\n",
|
||
"执行时间:0.0018秒, 路径长度:85702.95\n",
|
||
"\n",
|
||
"使用算法: 最近邻算法\n",
|
||
"执行时间:0.0021秒, 路径长度:85702.95\n",
|
||
"\n",
|
||
"使用算法: 插入法\n",
|
||
"执行时间:0.3183秒, 路径长度:88530.82\n",
|
||
"\n",
|
||
"使用算法: EoH-TSP\n",
|
||
"执行时间:0.1537秒, 路径长度:85702.95\n",
|
||
"\n",
|
||
"使用算法: AAD-TSP\n",
|
||
"执行时间:0.2798秒, 路径长度:80138.53\n",
|
||
"\n",
|
||
"使用算法: MEoH-TSP\n",
|
||
"执行时间:0.0075秒, 路径长度:92682.12\n",
|
||
"\n",
|
||
"测试实例: u159.tsp\n",
|
||
"\n",
|
||
"使用算法: 贪心算法\n",
|
||
"执行时间:0.0027秒, 路径长度:54669.03\n",
|
||
"\n",
|
||
"使用算法: 最近邻算法\n",
|
||
"执行时间:0.0025秒, 路径长度:54669.03\n",
|
||
"\n",
|
||
"使用算法: 插入法\n",
|
||
"执行时间:0.4279秒, 路径长度:49981.41\n",
|
||
"\n",
|
||
"使用算法: EoH-TSP\n",
|
||
"执行时间:0.1361秒, 路径长度:57436.69\n",
|
||
"\n",
|
||
"使用算法: AAD-TSP\n",
|
||
"执行时间:0.3134秒, 路径长度:50450.56\n",
|
||
"\n",
|
||
"使用算法: MEoH-TSP\n",
|
||
"执行时间:0.0080秒, 路径长度:51577.24\n",
|
||
"\n",
|
||
"测试实例: si175.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",
|
||
"测试实例: brg180.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",
|
||
"测试实例: rat195.tsp\n",
|
||
"\n",
|
||
"使用算法: 贪心算法\n",
|
||
"执行时间:0.0029秒, 路径长度:2761.96\n",
|
||
"\n",
|
||
"使用算法: 最近邻算法\n",
|
||
"执行时间:0.0037秒, 路径长度:2761.96\n",
|
||
"\n",
|
||
"使用算法: 插入法\n",
|
||
"执行时间:0.6782秒, 路径长度:2814.57\n",
|
||
"\n",
|
||
"使用算法: EoH-TSP\n",
|
||
"执行时间:0.2262秒, 路径长度:2761.96\n",
|
||
"\n",
|
||
"使用算法: AAD-TSP\n",
|
||
"执行时间:0.5450秒, 路径长度:2490.60\n",
|
||
"\n",
|
||
"使用算法: MEoH-TSP\n",
|
||
"执行时间:0.0096秒, 路径长度:2575.61\n",
|
||
"\n",
|
||
"测试实例: d198.tsp\n",
|
||
"\n",
|
||
"使用算法: 贪心算法\n",
|
||
"执行时间:0.0035秒, 路径长度:18620.07\n",
|
||
"\n",
|
||
"使用算法: 最近邻算法\n",
|
||
"执行时间:0.0034秒, 路径长度:18620.07\n",
|
||
"\n",
|
||
"使用算法: 插入法\n",
|
||
"执行时间:0.7665秒, 路径长度:17631.80\n",
|
||
"\n",
|
||
"使用算法: EoH-TSP\n",
|
||
"执行时间:0.2328秒, 路径长度:18620.07\n",
|
||
"\n",
|
||
"使用算法: AAD-TSP\n",
|
||
"执行时间:0.6346秒, 路径长度:17340.94\n",
|
||
"\n",
|
||
"使用算法: MEoH-TSP\n",
|
||
"执行时间:0.0096秒, 路径长度:19454.99\n",
|
||
"\n",
|
||
"测试实例: kroB200.tsp\n",
|
||
"\n",
|
||
"使用算法: 贪心算法\n",
|
||
"执行时间:0.0048秒, 路径长度:36981.59\n",
|
||
"\n",
|
||
"使用算法: 最近邻算法\n",
|
||
"执行时间:0.0044秒, 路径长度:36981.59\n",
|
||
"\n",
|
||
"使用算法: 插入法\n",
|
||
"执行时间:0.8086秒, 路径长度:35421.70\n",
|
||
"\n",
|
||
"使用算法: EoH-TSP\n",
|
||
"执行时间:0.2236秒, 路径长度:36981.59\n",
|
||
"\n",
|
||
"使用算法: AAD-TSP\n",
|
||
"执行时间:0.7370秒, 路径长度:33640.13\n",
|
||
"\n",
|
||
"使用算法: MEoH-TSP\n",
|
||
"执行时间:0.0096秒, 路径长度:34079.08\n",
|
||
"\n",
|
||
"测试实例: kroA200.tsp\n",
|
||
"\n",
|
||
"使用算法: 贪心算法\n",
|
||
"执行时间:0.0036秒, 路径长度:35798.41\n",
|
||
"\n",
|
||
"使用算法: 最近邻算法\n",
|
||
"执行时间:0.0041秒, 路径长度:35798.41\n",
|
||
"\n",
|
||
"使用算法: 插入法\n",
|
||
"执行时间:0.7806秒, 路径长度:35337.51\n",
|
||
"\n",
|
||
"使用算法: EoH-TSP\n",
|
||
"执行时间:0.2562秒, 路径长度:35798.41\n",
|
||
"\n",
|
||
"使用算法: AAD-TSP\n",
|
||
"执行时间:0.9131秒, 路径长度:30670.41\n",
|
||
"\n",
|
||
"使用算法: MEoH-TSP\n",
|
||
"执行时间:0.0094秒, 路径长度:33224.38\n",
|
||
"\n",
|
||
"测试实例: gr202.tsp\n",
|
||
"\n",
|
||
"使用算法: 贪心算法\n",
|
||
"执行时间:0.0035秒, 路径长度:619.40\n",
|
||
"\n",
|
||
"使用算法: 最近邻算法\n",
|
||
"执行时间:0.0036秒, 路径长度:619.40\n",
|
||
"\n",
|
||
"使用算法: 插入法\n",
|
||
"执行时间:0.8228秒, 路径长度:570.14\n",
|
||
"\n",
|
||
"使用算法: EoH-TSP\n",
|
||
"执行时间:0.2452秒, 路径长度:619.40\n",
|
||
"\n",
|
||
"使用算法: AAD-TSP\n",
|
||
"执行时间:0.9537秒, 路径长度:529.30\n",
|
||
"\n",
|
||
"使用算法: MEoH-TSP\n",
|
||
"执行时间:0.0115秒, 路径长度:559.57\n",
|
||
"\n",
|
||
"测试实例: tsp225.tsp\n",
|
||
"\n",
|
||
"使用算法: 贪心算法\n",
|
||
"执行时间:0.0056秒, 路径长度:4829.00\n",
|
||
"\n",
|
||
"使用算法: 最近邻算法\n",
|
||
"执行时间:0.0053秒, 路径长度:4829.00\n",
|
||
"\n",
|
||
"使用算法: 插入法\n",
|
||
"执行时间:1.1286秒, 路径长度:4468.20\n",
|
||
"\n",
|
||
"使用算法: EoH-TSP\n",
|
||
"执行时间:0.3133秒, 路径长度:4786.42\n",
|
||
"\n",
|
||
"使用算法: AAD-TSP\n",
|
||
"执行时间:1.3025秒, 路径长度:4169.09\n",
|
||
"\n",
|
||
"使用算法: MEoH-TSP\n",
|
||
"执行时间:0.0135秒, 路径长度:4430.19\n",
|
||
"\n",
|
||
"测试实例: ts225.tsp\n",
|
||
"\n",
|
||
"使用算法: 贪心算法\n",
|
||
"执行时间:0.0054秒, 路径长度:152493.55\n",
|
||
"\n",
|
||
"使用算法: 最近邻算法\n",
|
||
"执行时间:0.0043秒, 路径长度:152493.55\n",
|
||
"\n",
|
||
"使用算法: 插入法\n",
|
||
"执行时间:1.1650秒, 路径长度:160009.16\n",
|
||
"\n",
|
||
"使用算法: EoH-TSP\n",
|
||
"执行时间:0.2852秒, 路径长度:146183.10\n",
|
||
"\n",
|
||
"使用算法: AAD-TSP\n",
|
||
"执行时间:0.7431秒, 路径长度:139697.02\n",
|
||
"\n",
|
||
"使用算法: MEoH-TSP\n",
|
||
"执行时间:0.0119秒, 路径长度:131162.09\n",
|
||
"\n",
|
||
"测试实例: pr226.tsp\n",
|
||
"\n",
|
||
"使用算法: 贪心算法\n",
|
||
"执行时间:0.0060秒, 路径长度:94685.45\n",
|
||
"\n",
|
||
"使用算法: 最近邻算法\n",
|
||
"执行时间:0.0057秒, 路径长度:94685.45\n",
|
||
"\n",
|
||
"使用算法: 插入法\n",
|
||
"执行时间:1.1606秒, 路径长度:91024.65\n",
|
||
"\n",
|
||
"使用算法: EoH-TSP\n",
|
||
"执行时间:0.2520秒, 路径长度:94402.09\n",
|
||
"\n",
|
||
"使用算法: AAD-TSP\n",
|
||
"执行时间:0.6014秒, 路径长度:86898.96\n",
|
||
"\n",
|
||
"使用算法: MEoH-TSP\n",
|
||
"执行时间:0.0098秒, 路径长度:96212.20\n",
|
||
"\n",
|
||
"测试实例: gr229.tsp\n",
|
||
"\n",
|
||
"使用算法: 贪心算法\n",
|
||
"执行时间:0.0042秒, 路径长度:2014.71\n",
|
||
"\n",
|
||
"使用算法: 最近邻算法\n",
|
||
"执行时间:0.0041秒, 路径长度:2014.71\n",
|
||
"\n",
|
||
"使用算法: 插入法\n",
|
||
"执行时间:1.1942秒, 路径长度:1825.83\n",
|
||
"\n",
|
||
"使用算法: EoH-TSP\n",
|
||
"执行时间:0.2973秒, 路径长度:2014.71\n",
|
||
"\n",
|
||
"使用算法: AAD-TSP\n",
|
||
"执行时间:1.0651秒, 路径长度:1764.18\n",
|
||
"\n",
|
||
"使用算法: MEoH-TSP\n",
|
||
"执行时间:0.0106秒, 路径长度:1987.56\n",
|
||
"\n",
|
||
"测试实例: gil262.tsp\n",
|
||
"\n",
|
||
"使用算法: 贪心算法\n",
|
||
"执行时间:0.0061秒, 路径长度:3241.47\n",
|
||
"\n",
|
||
"使用算法: 最近邻算法\n",
|
||
"执行时间:0.0059秒, 路径长度:3241.47\n",
|
||
"\n",
|
||
"使用算法: 插入法\n",
|
||
"执行时间:1.7562秒, 路径长度:2804.23\n",
|
||
"\n",
|
||
"使用算法: EoH-TSP\n",
|
||
"执行时间:0.3549秒, 路径长度:3259.42\n",
|
||
"\n",
|
||
"使用算法: AAD-TSP\n",
|
||
"执行时间:1.7680秒, 路径长度:2757.03\n",
|
||
"\n",
|
||
"使用算法: MEoH-TSP\n",
|
||
"执行时间:0.0148秒, 路径长度:2748.90\n",
|
||
"\n",
|
||
"测试实例: pr264.tsp\n",
|
||
"\n",
|
||
"使用算法: 贪心算法\n",
|
||
"执行时间:0.0072秒, 路径长度:58022.86\n",
|
||
"\n",
|
||
"使用算法: 最近邻算法\n",
|
||
"执行时间:0.0077秒, 路径长度:58022.86\n",
|
||
"\n",
|
||
"使用算法: 插入法\n",
|
||
"执行时间:1.8404秒, 路径长度:58225.34\n",
|
||
"\n",
|
||
"使用算法: EoH-TSP\n",
|
||
"执行时间:0.3514秒, 路径长度:58328.28\n",
|
||
"\n",
|
||
"使用算法: AAD-TSP\n",
|
||
"执行时间:0.7800秒, 路径长度:56762.06\n",
|
||
"\n",
|
||
"使用算法: MEoH-TSP\n",
|
||
"执行时间:0.0110秒, 路径长度:59000.73\n",
|
||
"\n",
|
||
"测试实例: a280.tsp\n",
|
||
"\n",
|
||
"使用算法: 贪心算法\n",
|
||
"执行时间:0.0078秒, 路径长度:3148.11\n",
|
||
"\n",
|
||
"使用算法: 最近邻算法\n",
|
||
"执行时间:0.0067秒, 路径长度:3148.11\n",
|
||
"\n",
|
||
"使用算法: 插入法\n",
|
||
"执行时间:2.3428秒, 路径长度:3101.79\n",
|
||
"\n",
|
||
"使用算法: EoH-TSP\n",
|
||
"执行时间:0.4005秒, 路径长度:3182.09\n",
|
||
"\n",
|
||
"使用算法: AAD-TSP\n",
|
||
"执行时间:1.3379秒, 路径长度:2828.71\n",
|
||
"\n",
|
||
"使用算法: MEoH-TSP\n",
|
||
"执行时间:0.0235秒, 路径长度:3448.00\n",
|
||
"\n",
|
||
"测试实例: pr299.tsp\n",
|
||
"\n",
|
||
"使用算法: 贪心算法\n",
|
||
"执行时间:0.0080秒, 路径长度:59899.01\n",
|
||
"\n",
|
||
"使用算法: 最近邻算法\n",
|
||
"执行时间:0.0081秒, 路径长度:59899.01\n",
|
||
"\n",
|
||
"使用算法: 插入法\n",
|
||
"执行时间:2.7502秒, 路径长度:58124.45\n",
|
||
"\n",
|
||
"使用算法: EoH-TSP\n",
|
||
"执行时间:0.4686秒, 路径长度:59665.82\n",
|
||
"\n",
|
||
"使用算法: AAD-TSP\n",
|
||
"执行时间:1.6891秒, 路径长度:52408.65\n",
|
||
"\n",
|
||
"使用算法: MEoH-TSP\n",
|
||
"执行时间:0.0188秒, 路径长度:61338.05\n",
|
||
"\n",
|
||
"测试实例: linhp318.tsp\n",
|
||
"\n",
|
||
"使用算法: 贪心算法\n",
|
||
"执行时间:0.0091秒, 路径长度:54033.58\n",
|
||
"\n",
|
||
"使用算法: 最近邻算法\n",
|
||
"执行时间:0.0095秒, 路径长度:54033.58\n",
|
||
"\n",
|
||
"使用算法: 插入法\n",
|
||
"执行时间:3.3922秒, 路径长度:49454.81\n",
|
||
"\n",
|
||
"使用算法: EoH-TSP\n",
|
||
"执行时间:0.4706秒, 路径长度:54033.58\n",
|
||
"\n",
|
||
"使用算法: AAD-TSP\n",
|
||
"执行时间:2.0133秒, 路径长度:49153.11\n",
|
||
"\n",
|
||
"使用算法: MEoH-TSP\n",
|
||
"执行时间:0.0179秒, 路径长度:50085.92\n",
|
||
"\n",
|
||
"测试实例: lin318.tsp\n",
|
||
"\n",
|
||
"使用算法: 贪心算法\n",
|
||
"执行时间:0.0090秒, 路径长度:54033.58\n",
|
||
"\n",
|
||
"使用算法: 最近邻算法\n",
|
||
"执行时间:0.0100秒, 路径长度:54033.58\n",
|
||
"\n",
|
||
"使用算法: 插入法\n",
|
||
"执行时间:3.0405秒, 路径长度:49454.81\n",
|
||
"\n",
|
||
"使用算法: EoH-TSP\n",
|
||
"执行时间:0.4989秒, 路径长度:54033.58\n",
|
||
"\n",
|
||
"使用算法: AAD-TSP\n",
|
||
"执行时间:2.1533秒, 路径长度:49153.11\n",
|
||
"\n",
|
||
"使用算法: MEoH-TSP\n",
|
||
"执行时间:0.0144秒, 路径长度:50085.92\n",
|
||
"\n",
|
||
"测试实例: rd400.tsp\n",
|
||
"\n",
|
||
"使用算法: 贪心算法\n",
|
||
"执行时间:0.0146秒, 路径长度:19168.05\n",
|
||
"\n",
|
||
"使用算法: 最近邻算法\n",
|
||
"执行时间:0.0130秒, 路径长度:19168.05\n",
|
||
"\n",
|
||
"使用算法: 插入法\n",
|
||
"执行时间:6.2033秒, 路径长度:18629.98\n",
|
||
"\n",
|
||
"使用算法: EoH-TSP\n",
|
||
"执行时间:0.6545秒, 路径长度:19168.05\n",
|
||
"\n",
|
||
"使用算法: AAD-TSP\n",
|
||
"执行时间:4.0579秒, 路径长度:16644.77\n",
|
||
"\n",
|
||
"使用算法: MEoH-TSP\n",
|
||
"执行时间:0.0251秒, 路径长度:17599.52\n",
|
||
"\n",
|
||
"测试实例: fl417.tsp\n",
|
||
"\n",
|
||
"使用算法: 贪心算法\n",
|
||
"执行时间:0.0158秒, 路径长度:15114.12\n",
|
||
"\n",
|
||
"使用算法: 最近邻算法\n",
|
||
"执行时间:0.0143秒, 路径长度:15114.12\n",
|
||
"\n",
|
||
"使用算法: 插入法\n",
|
||
"执行时间:6.8448秒, 路径长度:14179.84\n",
|
||
"\n",
|
||
"使用算法: EoH-TSP\n",
|
||
"执行时间:0.6920秒, 路径长度:15256.42\n",
|
||
"\n",
|
||
"使用算法: AAD-TSP\n",
|
||
"执行时间:7.5032秒, 路径长度:13630.60\n",
|
||
"\n",
|
||
"使用算法: MEoH-TSP\n",
|
||
"执行时间:0.0222秒, 路径长度:13680.66\n",
|
||
"\n",
|
||
"测试实例: gr431.tsp\n",
|
||
"\n",
|
||
"使用算法: 贪心算法\n",
|
||
"执行时间:0.0168秒, 路径长度:2516.25\n",
|
||
"\n",
|
||
"使用算法: 最近邻算法\n",
|
||
"执行时间:0.0160秒, 路径长度:2516.25\n",
|
||
"\n",
|
||
"使用算法: 插入法\n",
|
||
"执行时间:7.8286秒, 路径长度:2214.43\n",
|
||
"\n",
|
||
"使用算法: EoH-TSP\n",
|
||
"执行时间:0.7390秒, 路径长度:2516.25\n",
|
||
"\n",
|
||
"使用算法: AAD-TSP\n",
|
||
"执行时间:4.9121秒, 路径长度:2153.00\n",
|
||
"\n",
|
||
"使用算法: MEoH-TSP\n",
|
||
"执行时间:0.0279秒, 路径长度:2263.78\n",
|
||
"\n",
|
||
"测试实例: pr439.tsp\n",
|
||
"\n",
|
||
"使用算法: 贪心算法\n",
|
||
"执行时间:0.0166秒, 路径长度:131282.09\n",
|
||
"\n",
|
||
"使用算法: 最近邻算法\n",
|
||
"执行时间:0.0173秒, 路径长度:131282.09\n",
|
||
"\n",
|
||
"使用算法: 插入法\n",
|
||
"执行时间:8.2489秒, 路径长度:130067.88\n",
|
||
"\n",
|
||
"使用算法: EoH-TSP\n",
|
||
"执行时间:0.7680秒, 路径长度:137778.50\n",
|
||
"\n",
|
||
"使用算法: AAD-TSP\n",
|
||
"执行时间:4.0377秒, 路径长度:118466.33\n",
|
||
"\n",
|
||
"使用算法: MEoH-TSP\n",
|
||
"执行时间:0.0248秒, 路径长度:134814.09\n",
|
||
"\n",
|
||
"测试实例: pcb442.tsp\n",
|
||
"\n",
|
||
"使用算法: 贪心算法\n",
|
||
"执行时间:0.0197秒, 路径长度:61984.05\n",
|
||
"\n",
|
||
"使用算法: 最近邻算法\n",
|
||
"执行时间:0.0184秒, 路径长度:61984.05\n",
|
||
"\n",
|
||
"使用算法: 插入法\n",
|
||
"执行时间:8.5325秒, 路径长度:60891.83\n",
|
||
"\n",
|
||
"使用算法: EoH-TSP\n",
|
||
"执行时间:0.7655秒, 路径长度:61234.77\n",
|
||
"\n",
|
||
"使用算法: AAD-TSP\n",
|
||
"执行时间:4.3366秒, 路径长度:54291.55\n",
|
||
"\n",
|
||
"使用算法: MEoH-TSP\n",
|
||
"执行时间:0.0263秒, 路径长度:58899.52\n",
|
||
"\n",
|
||
"测试实例: d493.tsp\n",
|
||
"\n",
|
||
"使用算法: 贪心算法\n",
|
||
"执行时间:0.0233秒, 路径长度:43646.38\n",
|
||
"\n",
|
||
"使用算法: 最近邻算法\n",
|
||
"执行时间:0.0215秒, 路径长度:43646.38\n",
|
||
"\n",
|
||
"使用算法: 插入法\n",
|
||
"执行时间:12.0897秒, 路径长度:39982.31\n",
|
||
"\n",
|
||
"使用算法: EoH-TSP\n",
|
||
"执行时间:0.9611秒, 路径长度:43710.70\n",
|
||
"\n",
|
||
"使用算法: AAD-TSP\n",
|
||
"执行时间:7.7181秒, 路径长度:38869.88\n",
|
||
"\n",
|
||
"使用算法: MEoH-TSP\n",
|
||
"执行时间:0.0307秒, 路径长度:43050.15\n",
|
||
"\n",
|
||
"测试实例: att532.tsp\n",
|
||
"\n",
|
||
"使用算法: 贪心算法\n",
|
||
"执行时间:0.0246秒, 路径长度:112099.45\n",
|
||
"\n",
|
||
"使用算法: 最近邻算法\n",
|
||
"执行时间:0.0269秒, 路径长度:112099.45\n",
|
||
"\n",
|
||
"使用算法: 插入法\n",
|
||
"执行时间:14.9640秒, 路径长度:102201.61\n",
|
||
"\n",
|
||
"使用算法: EoH-TSP\n",
|
||
"执行时间:1.0704秒, 路径长度:112099.45\n",
|
||
"\n",
|
||
"使用算法: AAD-TSP\n",
|
||
"执行时间:9.3354秒, 路径长度:99085.86\n",
|
||
"\n",
|
||
"使用算法: MEoH-TSP\n",
|
||
"执行时间:0.0358秒, 路径长度:103710.35\n",
|
||
"\n",
|
||
"测试实例: si535.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",
|
||
"测试实例: ali535.tsp\n",
|
||
"\n",
|
||
"使用算法: 贪心算法\n",
|
||
"执行时间:0.0307秒, 路径长度:2671.07\n",
|
||
"\n",
|
||
"使用算法: 最近邻算法\n",
|
||
"执行时间:0.0261秒, 路径长度:2671.07\n",
|
||
"\n",
|
||
"使用算法: 插入法\n",
|
||
"执行时间:16.0296秒, 路径长度:2366.95\n",
|
||
"\n",
|
||
"使用算法: EoH-TSP\n",
|
||
"执行时间:1.0984秒, 路径长度:2671.07\n",
|
||
"\n",
|
||
"使用算法: AAD-TSP\n",
|
||
"执行时间:12.9402秒, 路径长度:2269.30\n",
|
||
"\n",
|
||
"使用算法: MEoH-TSP\n",
|
||
"执行时间:0.0365秒, 路径长度: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.0293秒, 路径长度:46881.87\n",
|
||
"\n",
|
||
"使用算法: 最近邻算法\n",
|
||
"执行时间:0.0276秒, 路径长度:46881.87\n",
|
||
"\n",
|
||
"使用算法: 插入法\n",
|
||
"执行时间:18.8292秒, 路径长度:44144.83\n",
|
||
"\n",
|
||
"使用算法: EoH-TSP\n",
|
||
"执行时间:1.2302秒, 路径长度:46881.87\n",
|
||
"\n",
|
||
"使用算法: AAD-TSP\n",
|
||
"执行时间:15.4360秒, 路径长度:39154.50\n",
|
||
"\n",
|
||
"使用算法: MEoH-TSP\n",
|
||
"执行时间:0.0414秒, 路径长度:46620.28\n",
|
||
"\n",
|
||
"测试实例: rat575.tsp\n",
|
||
"\n",
|
||
"使用算法: 贪心算法\n",
|
||
"执行时间:0.0319秒, 路径长度:8449.32\n",
|
||
"\n",
|
||
"使用算法: 最近邻算法\n",
|
||
"执行时间:0.0291秒, 路径长度:8449.32\n",
|
||
"\n",
|
||
"使用算法: 插入法\n",
|
||
"执行时间:19.3889秒, 路径长度:7853.86\n",
|
||
"\n",
|
||
"使用算法: EoH-TSP\n",
|
||
"执行时间:1.4636秒, 路径长度:8430.71\n",
|
||
"\n",
|
||
"使用算法: AAD-TSP\n",
|
||
"执行时间:11.6080秒, 路径长度:7398.48\n",
|
||
"\n",
|
||
"使用算法: MEoH-TSP\n",
|
||
"执行时间:0.0455秒, 路径长度:7808.10\n",
|
||
"\n",
|
||
"测试实例: p654.tsp\n",
|
||
"\n",
|
||
"使用算法: 贪心算法\n",
|
||
"执行时间:0.0374秒, 路径长度:43411.56\n",
|
||
"\n",
|
||
"使用算法: 最近邻算法\n",
|
||
"执行时间:0.0393秒, 路径长度:43411.56\n",
|
||
"\n",
|
||
"使用算法: 插入法\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": null,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"\n",
|
||
"各算法在不同实例上的路径长度:\n",
|
||
" 贪心算法 最近邻算法 插入法 EoH-TSP AAD-TSP MEoH-TSP\n",
|
||
"ulysses8 38.48 38.48 37.83 38.11 37.83 38.48\n",
|
||
"ulysses16 104.73 104.73 79.39 88.25 74.14 104.65\n",
|
||
"PR76 153461.92 153461.92 125936.21 153461.92 112991.57 123787.14\n",
|
||
"eil76 711.99 711.99 612.39 669.24 622.71 577.27\n",
|
||
"GR96 707.09 707.09 651.44 641.82 571.02 573.48\n",
|
||
"eil101 825.24 825.24 702.96 847.59 702.70 720.41\n",
|
||
"CHN144 35884.30 35884.30 35048.39 35884.30 32744.18 35658.61\n",
|
||
"PBK411 1838.48 1838.48 1602.35 1835.85 1554.96 1776.60\n",
|
||
"RBU737 4416.15 4416.15 4097.20 4436.28 3870.50 4101.04\n",
|
||
"XIT1083 4584.27 4584.27 4328.99 4673.87 4051.52 4397.83\n",
|
||
"\n",
|
||
"各算法在不同实例上的运行时长:\n",
|
||
" 贪心算法 最近邻算法 插入法 EoH-TSP AAD-TSP MEoH-TSP\n",
|
||
"ulysses8 0.0000 0.0000 0.0001 0.0065 0.0169 0.0003\n",
|
||
"ulysses16 0.0001 0.0001 0.0005 0.0114 0.0243 0.0011\n",
|
||
"PR76 0.0007 0.0007 0.0446 0.0522 0.1132 0.0038\n",
|
||
"eil76 0.0008 0.0005 0.0396 0.0517 0.1012 0.0043\n",
|
||
"GR96 0.0013 0.0095 0.0993 0.0772 0.2481 0.0061\n",
|
||
"eil101 0.0006 0.0007 0.0900 0.0815 0.1857 0.0053\n",
|
||
"CHN144 0.0019 0.0024 0.2761 0.1257 0.2748 0.0072\n",
|
||
"PBK411 0.0146 0.0171 6.5032 0.7277 4.4427 0.0255\n",
|
||
"RBU737 0.0504 0.0444 40.5620 1.9295 26.4296 0.0562\n",
|
||
"XIT1083 0.0971 0.1277 121.7319 4.1403 80.2114 0.1036\n"
|
||
]
|
||
}
|
||
],
|
||
"source": [
|
||
"# 创建排序用的临时索引\n",
|
||
"temp_results_idx = pd.Index([int(''.join(filter(str.isdigit, idx))) for idx in df_results.index])\n",
|
||
"temp_time_idx = pd.Index([int(''.join(filter(str.isdigit, idx))) for idx in df_time.index])\n",
|
||
"\n",
|
||
"# 按数字排序但保留原始名称\n",
|
||
"df_results = df_results.iloc[temp_results_idx.argsort()]\n",
|
||
"df_time = df_time.iloc[temp_time_idx.argsort()]\n",
|
||
"\n",
|
||
"# 打印结果表格\n",
|
||
"print(\"\\n各算法在不同实例上的路径长度:\")\n",
|
||
"print(df_results.round(2)) # 路径长度保留2位小数\n",
|
||
"# 统计每个算法的运行时长 \n",
|
||
"print(\"\\n各算法在不同实例上的运行时长:\")\n",
|
||
"print(df_time.round(4)) # 运行时间保留4位小数"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 4,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"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+/bty3snfdhWW21Vr21DrrzyylRXV5dfXbp0WZ3yAQAAAFgDqxUo/fd//3cuvvji7Lvvvtlyyy3Ttm3bHHPMMfnb3/6Wgw8+ODU1NbnooovK7RcvXpwkadmyZaNjVlVVJUkWLVrUaJuLL7448+bNK7+mT5++OuUDAAAAsAaadFPuli1bZtCgQUmSJ554ojzbqFWrVkmSJUuWNNq3bilb69atG21TVVWVdu3a1XsBAAAAsG41+VPePvWpTyVJli1blkmTJiX5v+Vsc+fOTalUarBfXfhU1xYAAACADVOTB0qVlZXln99///0kyW677ZZk+SykGTNmNNivLnyqawsAAADAhqnJA6WXX365/POOO+6YJNlpp53SqVOnJMmIESMa7Fd3/JBDDmnqkgAAAABoQk0eKF1zzTVJkj322COdO3dOklRUVKRPnz5JkltuuWWFPiNHjsz48eNTWVmZE088salLAgAAAKAJFQ6UHnnkkVx88cWZPHlyvePz5s3Lt771rfz2t79Nklx66aX1zvfv3z8tW7bMww8/nCFDhpT3Upo6dWr69u2bJDn33HPLM5kAAAAA2DBVlBrbJbsR9913X3m2UefOnbPDDjtk6dKleeWVV7JkyZJUVFTk0ksvzcCBA1foe/vtt+ecc87JsmXL0rlz53Ts2DHjxo3L0qVLc+CBB+bJJ5/MFltsscq1zJ8/P9XV1Zk3b54nvgEAAMDGZmD1+q6gaQyct74raBJFcpbCM5QOPPDAfP/7389RRx2V5s2bZ9y4cRk/fnw6d+6cM888M08//XSDYVKSnHnmmXnqqafy+c9/PosWLcorr7ySbt26ZeDAgRk+fHihMAkAAACA9aPwDKUNiRlKAAAAsBEzQ2mDslZnKAEAAACweRMoAQAAAFCIQAkAAACAQgRKAAAAABQiUAIAAACgEIESAAAAAIUIlAAAAAAoRKAEAAAAQCECJQAAAAAKESgBAAAAUIhACQAAAIBCBEoAAAAAFCJQAgAAAKAQgRIAAAAAhQiUAAAAAChEoAQAAABAIQIlAAAAAAoRKAEAAABQiEAJAAAAgEIESgAAAAAUIlACAAAAoBCBEgAAAACFCJQAAAAAKESgBAAAAEAhAiUAAAAAChEoAQAAAFCIQAkAAACAQgRKAAAAABQiUAIAAACgEIESAAAAAIUIlAAAAAAoRKAEAAAAQCECJQAAAAAKESgBAAAAUIhACQAAAIBCBEoAAAAAFCJQAgAAAKAQgRIAAAAAhQiUAAAAAChEoAQAAABAIQIlAAAAAAoRKAEAAABQiEAJAAAAgEIESgAAAAAUIlACAAAAoBCBEgAAAACFCJQAAAAAKESgBAAAAEAhAiUAAAAAChEoAQAAAFCIQAkAAACAQgRKAAAAABQiUAIAAACgEIESAAAAAIUIlAAAAAAoRKAEAAAAQCECJQAAAAAKESgBAAAAUIhACQAAAIBCBEoAAAAAFCJQAgAAAKAQgRIAAAAAhQiUAAAAAChEoAQAAABAIQIlAAAAAAoRKAEAAABQiEAJAAAAgEIESgAAAAAU0iSB0iWXXJKKiopUVFTk8ssvb7Td008/nd69e2fbbbdN69ats9dee2XQoEFZvHhxU5QBAAAAwDqwxoHSP/7xjwwZMuQj2w0dOjSf+cxncv/996eqqip77rlnJk6cmEsvvTSHHXZYFi5cuKalAAAAALAOrFGgVCqVct5556WysjJHHXVUo+2mTJmSfv36pba2NoMHD8706dMzZsyYTJgwIbvvvntGjx6dAQMGrEkpAAAAAKwjaxQo3XLLLXnqqady6aWXpkuXLo22GzJkSGpqatKrV6/0798/FRUVSZKdd945t956a5Lkpptuyptvvrkm5QAAAACwDqx2oPTWW2/loosuyl577ZXvfve7jbYrlUq59957kyT9+vVb4XyPHj2yxx57ZOnSpRk2bNjqlgMAAADAOrLagdJ3v/vdvPvuu7nhhhtSWVnZaLtp06Zl5syZSZKePXs22Kbu+KhRo1a3HAAAAADWkRar0+mxxx7L0KFD89WvfjWHH374SttOmDAhSVJVVZUddtihwTbdunWr17YxNTU1qampKf8+f/78ImUDAAAA0AQKz1BavHhxzj///FRXV+fqq6/+yPZz5sxJkrRv3768d9KHbbXVVvXaNubKK69MdXV1+bWyfZsAAAAAWDsKB0qXX355Jk6cmB/+8IfZbrvtPrL94sWLkyQtW7ZstE1VVVWSZNGiRSsd6+KLL868efPKr+nTpxeoHAAAAICmUGjJ2z/+8Y8MGTIkBxxwQL7+9a+vUp9WrVolSZYsWdJom7plbK1bt17pWFVVVeXwCQAAAID1o9AMpQsuuCDvv/9+brzxxjRrtmpd65azzZ07N6VSqcE2dUvd6toCAAAAsOEqNEPphRdeSEVFRU488cQVzs2bNy9J8qMf/SjXX399unTpktGjR2e33XZLsnwW0owZM9K5c+cV+k6aNClJym0BAAAA2HAVfspbbW1t3nzzzUbPL1iwIAsWLCgvddtpp53SqVOnzJo1KyNGjMipp566Qp8RI0YkSQ455JCi5QAAAACwjhVa8la3bK2h11lnnZUkGTRoUEqlUqZMmZIkqaioSJ8+fZIkt9xyywpjjhw5MuPHj09lZWWDM58AAAAA2LAUfsrb6ujfv39atmyZhx9+OEOGDCnvpTR16tT07ds3SXLuueemU6dO66IcAAAAANbAOgmUdtlll9x8881p1qxZBgwYkC5duuSAAw7IbrvtlldffTUHHnhghgwZsi5KAQAAAGANrZNAKUnOPPPMPPXUU/n85z+fRYsW5ZVXXkm3bt0ycODADB8+PFtsscW6KgUAAACANVBRqlt/thGaP39+qqurM2/evLRr1259lwMAAAAUMbB6fVfQNAbOW98VNIkiOcs6m6EEAAAAwKZBoAQAAABAIQIlAAAAAAoRKAEAAABQiEAJAAAAgEIESgAAAAAUIlACAAAAoBCBEgAAAACFCJQAAAAAKESgBAAAAEAhAiUAAAAAChEoAQAAAFCIQAkAAACAQgRKAAAAABQiUAIAAACgEIESAAAAAIUIlAAAAAAoRKAEAAAAQCECJQAAAAAKESgBAAAAUIhACQAAAIBCBEoAAAAAFCJQAgAAAKAQgRIAAAAAhQiUAAAAAChEoAQAAABAIQIlAAAAAAoRKAEAAABQiEAJAAAAgEIESgAAAAAUIlACAAAAoBCBEgAAAACFCJQAAAAAKESgBAAAAEAhAiUAAAAAChEoAQAAAFCIQAkAAACAQgRKAAAAABQiUAIAAACgEIESAAAAAIUIlAAAAAAoRKAEAAAAQCECJQAAAAAKESgBAAAAUIhACQAAAIBCBEoAAAAAFCJQAgAAAKAQgRIAAAAAhQiUAAAAAChEoAQAAABAIQIlAAAAAAoRKAEAAABQiEAJAAAAgEIESgAAAAAUIlACAAAAoBCBEgAAAACFCJQAAAAAKESgBAAAAEAhAiUAAAAAChEoAQAAAFCIQAkAAACAQgRKAAAAABQiUAIAAACgEIESAAAAAIUIlAAAAAAoRKAEAAAAQCECJQAAAAAKESgBAAAAUMhqBUr33XdfzjvvvBx44IHZfvvt07Jly7Rv3z49evTIddddlyVLljTa9+mnn07v3r2z7bbbpnXr1tlrr70yaNCgLF68eLVvAgAAAIB1p6JUKpWKdvr0pz+dESNGpKqqKjvssEO22WabzJw5M2+88UaS5MADD8yjjz6a9u3b1+s3dOjQnHXWWamtrU3nzp3TsWPHjBs3LkuXLs1BBx2UJ554Im3atFnlOubPn5/q6urMmzcv7dq1K3obAAAAwPo0sHp9V9A0Bs5b3xU0iSI5y2rNUDr33HPz+OOP57333sukSZMyevTo/POf/8zTTz+dHXfcMc8//3y+//3v1+szZcqU9OvXL7W1tRk8eHCmT5+eMWPGZMKECdl9990zevToDBgwYHXKAQAAAGAdWq0ZSitz991359RTT80OO+xQnrGUJN/4xjdyww03pFevXvnLX/5Sr8/IkSPTs2fPVFZWZvr06dluu+1W6VpmKAEAAMBGzAylDcpan6G0MnvssUeSZOHCheVjpVIp9957b5KkX79+K/Tp0aNH9thjjyxdujTDhg1r6pIAAAAAaEJNHig9/fTTSZIDDjigfGzatGmZOXNmkqRnz54N9qs7PmrUqKYuCQAAAIAm1KIpBqmtrc3MmTNz//3357/+67+yxRZb5MorryyfnzBhQpKUN/FuSLdu3eq1bUhNTU1qamrKv8+fP78pygcAAACggDWaoXTttdemoqIiLVq0SJcuXfKNb3wjRx99dJ555pkcfPDB5XZz5sxJkrRv3z4VFRUNjrXVVlvVa9uQK6+8MtXV1eVXly5d1qR8AAAAAFbDGgVKnTt3Ts+ePXPwwQeXN9J+/PHH89vf/ja1tbXldosXL06StGzZstGxqqqqkiSLFi1qtM3FF1+cefPmlV/Tp09fk/IBAAAAWA1rtOTtlFNOySmnnFL+fdSoUTnvvPNyxRVX5N13382NN96YJGnVqlWSZMmSJY2OVbeUrXXr1o22qaqqKgdPAAAAAKwfTbop9yGHHJIHH3wwVVVVuemmmzJ16tQk/7ecbe7cuSmVSg32rVvqVtcWAAAAgA1Tkz/lbYcddsj++++fZcuWZezYsUmS3XbbLcnyWUgzZsxosN+kSZPqtQUAAABgw9TkgVKSvP/++/X+d6eddkqnTp2SJCNGjGiwT93xQw45ZG2UBAAAAEATafJAacqUKeWZSfvtt1+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": [
|
||
"<Figure size 1200x900 with 1 Axes>"
|
||
]
|
||
},
|
||
"metadata": {},
|
||
"output_type": "display_data"
|
||
}
|
||
],
|
||
"source": [
|
||
"# 提取EoH-TSP和AAD-TSP的运行时间数据\n",
|
||
"selected_algos = ['EoH-TSP', 'AAD-TSP']\n",
|
||
"df_selected = df_time[selected_algos]\n",
|
||
"\n",
|
||
"# 设置matplotlib支持中文显示\n",
|
||
"plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签\n",
|
||
"plt.rcParams['axes.unicode_minus'] = False # 用来正常显示负号\n",
|
||
"plt.rcParams['font.size'] = 16 # 设置更大的字号\n",
|
||
"\n",
|
||
"# 创建柱状图\n",
|
||
"plt.figure(figsize=(12, 9))\n",
|
||
"bar_width = 0.5\n",
|
||
"x = np.arange(len(df_selected.index))\n",
|
||
"\n",
|
||
"# 绘制柱状图\n",
|
||
"bars1 = plt.bar(x - bar_width/2, df_selected['EoH-TSP'], bar_width, label='AAD-TSP')\n",
|
||
"bars2 = plt.bar(x + bar_width/2, df_selected['AAD-TSP'], bar_width, label='EoH-TSP')\n",
|
||
"\n",
|
||
"# 在柱形上添加数值标注\n",
|
||
"for bars in [bars1, bars2]:\n",
|
||
" for bar in bars:\n",
|
||
" height = bar.get_height()\n",
|
||
" plt.text(bar.get_x() + bar.get_width()/2., height,\n",
|
||
" f'{height:.2f}',\n",
|
||
" ha='center', va='bottom',fontsize=16)\n",
|
||
"\n",
|
||
"# 设置图表属性\n",
|
||
"# plt.xlabel('测试实例')\n",
|
||
"# plt.title('在不同实例上的运行时间')\n",
|
||
"plt.xticks(x, df_selected.index, rotation=45,fontsize=20)\n",
|
||
"plt.legend(fontsize=20)\n",
|
||
"\n",
|
||
"# 调整布局避免标签被截断\n",
|
||
"plt.tight_layout()\n",
|
||
"plt.savefig('tsp_time.png',dpi=300)\n",
|
||
"plt.show()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 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
|
||
}
|