832 lines
138 KiB
Plaintext
832 lines
138 KiB
Plaintext
{
|
|
"cells": [
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 1,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"import sys\n",
|
|
"sys.path.append(\"C:/Users/Lenovo/Desktop/LEAD/\")\n",
|
|
"from gcdata.gc import *\n",
|
|
"from gcdata.gc1 import *"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 2,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"['DSJC0125.1.txt', 'DSJC0125.5.txt', 'DSJC0125.9.txt', 'DSJC0250.1.txt', 'DSJC0250.5.txt', 'DSJC0250.9.txt', 'DSJC0500.1.txt', 'DSJC0500.5.txt', 'DSJC0500.9.txt', 'DSJC1000.1.txt', 'DSJC1000.5.txt', 'DSJC1000.9.txt']\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"import os\n",
|
|
"import numpy as np\n",
|
|
"import time\n",
|
|
"import matplotlib.pyplot as plt\n",
|
|
"\n",
|
|
"# 获取gcdata目录下所有txt文件\n",
|
|
"data_dir = \"C:/Users/Lenovo/Desktop/LEAD/\"\n",
|
|
"data_dir2 = \"C:/Users/Lenovo/Desktop/LEAD/gcdata/\"\n",
|
|
"test_files = [f for f in os.listdir(data_dir2) if f.endswith('txt')]\n",
|
|
"print(test_files)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 3,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"# 定义评估函数\n",
|
|
"def evaluate_coloring(coloring_func, adj_matrix):\n",
|
|
" \"\"\"评估图着色算法的性能\"\"\"\n",
|
|
" try:\n",
|
|
" # 计时并执行图着色\n",
|
|
" start_time = time.time()\n",
|
|
" colors = coloring_func(adj_matrix)\n",
|
|
" end_time = time.time()\n",
|
|
" execution_time = end_time - start_time\n",
|
|
" \n",
|
|
" # 检查解的合法性\n",
|
|
" n = len(adj_matrix)\n",
|
|
" for i in range(n):\n",
|
|
" for j in range(n):\n",
|
|
" if adj_matrix[i][j] == 1 and colors[i] == colors[j]:\n",
|
|
" print(f\"非法解:节点{i}和{j}相邻但颜色相同\")\n",
|
|
" return float('inf')\n",
|
|
" \n",
|
|
" # 计算使用的颜色数\n",
|
|
" num_colors = len(set(colors))\n",
|
|
" \n",
|
|
" print(f\"执行时间:{execution_time:.4f}秒, 使用颜色数:{num_colors}\")\n",
|
|
" return num_colors,execution_time\n",
|
|
" \n",
|
|
" except Exception as e:\n",
|
|
" print(f\"评估过程出错: {str(e)}\")\n",
|
|
" return float('inf')\n",
|
|
"\n",
|
|
"# 定义数据加载函数 \n",
|
|
"def load_graph_data(filename):\n",
|
|
" \"\"\"读取图着色问题数据\"\"\"\n",
|
|
" try:\n",
|
|
" filepath = os.path.join(data_dir2, filename)\n",
|
|
" with open(filepath, 'r') as f:\n",
|
|
" first_line = f.readline().strip().split()\n",
|
|
" n_vertices = int(first_line[0])\n",
|
|
" \n",
|
|
" adj_matrix = np.zeros((n_vertices, n_vertices), dtype=np.int32)\n",
|
|
" \n",
|
|
" for line in f:\n",
|
|
" v1, v2 = map(int, line.strip().split())\n",
|
|
" adj_matrix[v1][v2] = 1\n",
|
|
" adj_matrix[v2][v1] = 1\n",
|
|
" \n",
|
|
" return adj_matrix\n",
|
|
" \n",
|
|
" except Exception as e:\n",
|
|
" print(f\"读取数据出错: {str(e)}\")\n",
|
|
" return None"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 4,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"\n",
|
|
"测试实例: DSJC0125.1.txt\n",
|
|
"\n",
|
|
"使用算法: FunSearch-MCP\n",
|
|
"执行时间:0.0106秒, 使用颜色数:7\n",
|
|
"\n",
|
|
"使用算法: EoH-MCP\n",
|
|
"执行时间:0.2657秒, 使用颜色数:6\n",
|
|
"\n",
|
|
"使用算法: AAE-MCP\n",
|
|
"执行时间:0.0070秒, 使用颜色数:6\n",
|
|
"\n",
|
|
"使用算法: 贪心\n",
|
|
"执行时间:0.0020秒, 使用颜色数:8\n",
|
|
"\n",
|
|
"使用算法: Welsh-Powell\n",
|
|
"执行时间:0.0020秒, 使用颜色数:7\n",
|
|
"\n",
|
|
"使用算法: DSATUR\n",
|
|
"执行时间:0.2044秒, 使用颜色数:6\n",
|
|
"\n",
|
|
"测试实例: DSJC0125.5.txt\n",
|
|
"\n",
|
|
"使用算法: FunSearch-MCP\n",
|
|
"执行时间:0.0035秒, 使用颜色数:24\n",
|
|
"\n",
|
|
"使用算法: EoH-MCP\n",
|
|
"执行时间:0.3157秒, 使用颜色数:22\n",
|
|
"\n",
|
|
"使用算法: AAE-MCP\n",
|
|
"执行时间:0.0127秒, 使用颜色数:22\n",
|
|
"\n",
|
|
"使用算法: 贪心\n",
|
|
"执行时间:0.0030秒, 使用颜色数:26\n",
|
|
"\n",
|
|
"使用算法: Welsh-Powell\n",
|
|
"执行时间:0.0030秒, 使用颜色数:23\n",
|
|
"\n",
|
|
"使用算法: DSATUR\n",
|
|
"执行时间:0.2202秒, 使用颜色数:22\n",
|
|
"\n",
|
|
"测试实例: DSJC0125.9.txt\n",
|
|
"\n",
|
|
"使用算法: FunSearch-MCP\n",
|
|
"执行时间:0.0035秒, 使用颜色数:53\n",
|
|
"\n",
|
|
"使用算法: EoH-MCP\n",
|
|
"执行时间:0.3592秒, 使用颜色数:51\n",
|
|
"\n",
|
|
"使用算法: AAE-MCP\n",
|
|
"执行时间:0.0194秒, 使用颜色数:51\n",
|
|
"\n",
|
|
"使用算法: 贪心\n",
|
|
"执行时间:0.0030秒, 使用颜色数:56\n",
|
|
"\n",
|
|
"使用算法: Welsh-Powell\n",
|
|
"执行时间:0.0065秒, 使用颜色数:53\n",
|
|
"\n",
|
|
"使用算法: DSATUR\n",
|
|
"执行时间:0.2307秒, 使用颜色数:51\n",
|
|
"\n",
|
|
"测试实例: DSJC0250.1.txt\n",
|
|
"\n",
|
|
"使用算法: FunSearch-MCP\n",
|
|
"执行时间:0.0111秒, 使用颜色数:12\n",
|
|
"\n",
|
|
"使用算法: EoH-MCP\n",
|
|
"执行时间:1.9986秒, 使用颜色数:10\n",
|
|
"\n",
|
|
"使用算法: AAE-MCP\n",
|
|
"执行时间:0.0197秒, 使用颜色数:10\n",
|
|
"\n",
|
|
"使用算法: 贪心\n",
|
|
"执行时间:0.0091秒, 使用颜色数:13\n",
|
|
"\n",
|
|
"使用算法: Welsh-Powell\n",
|
|
"执行时间:0.0088秒, 使用颜色数:11\n",
|
|
"\n",
|
|
"使用算法: DSATUR\n",
|
|
"执行时间:1.5610秒, 使用颜色数:10\n",
|
|
"\n",
|
|
"测试实例: DSJC0250.5.txt\n",
|
|
"\n",
|
|
"使用算法: FunSearch-MCP\n",
|
|
"执行时间:0.0147秒, 使用颜色数:40\n",
|
|
"\n",
|
|
"使用算法: EoH-MCP\n",
|
|
"执行时间:2.3853秒, 使用颜色数:37\n",
|
|
"\n",
|
|
"使用算法: AAE-MCP\n",
|
|
"执行时间:0.0454秒, 使用颜色数:37\n",
|
|
"\n",
|
|
"使用算法: 贪心\n",
|
|
"执行时间:0.0095秒, 使用颜色数:43\n",
|
|
"\n",
|
|
"使用算法: Welsh-Powell\n",
|
|
"执行时间:0.0153秒, 使用颜色数:41\n",
|
|
"\n",
|
|
"使用算法: DSATUR\n",
|
|
"执行时间:1.7647秒, 使用颜色数:37\n",
|
|
"\n",
|
|
"测试实例: DSJC0250.9.txt\n",
|
|
"\n",
|
|
"使用算法: FunSearch-MCP\n",
|
|
"执行时间:0.0160秒, 使用颜色数:92\n",
|
|
"\n",
|
|
"使用算法: EoH-MCP\n",
|
|
"执行时间:2.9891秒, 使用颜色数:92\n",
|
|
"\n",
|
|
"使用算法: AAE-MCP\n",
|
|
"执行时间:0.1836秒, 使用颜色数:92\n",
|
|
"\n",
|
|
"使用算法: 贪心\n",
|
|
"执行时间:0.0105秒, 使用颜色数:99\n",
|
|
"\n",
|
|
"使用算法: Welsh-Powell\n",
|
|
"执行时间:0.0356秒, 使用颜色数:93\n",
|
|
"\n",
|
|
"使用算法: DSATUR\n",
|
|
"执行时间:1.9386秒, 使用颜色数:92\n",
|
|
"\n",
|
|
"测试实例: DSJC0500.1.txt\n",
|
|
"\n",
|
|
"使用算法: FunSearch-MCP\n",
|
|
"执行时间:0.0522秒, 使用颜色数:18\n",
|
|
"\n",
|
|
"使用算法: EoH-MCP\n",
|
|
"执行时间:16.7812秒, 使用颜色数:16\n",
|
|
"\n",
|
|
"使用算法: AAE-MCP\n",
|
|
"执行时间:0.0935秒, 使用颜色数:16\n",
|
|
"\n",
|
|
"使用算法: 贪心\n",
|
|
"执行时间:0.0439秒, 使用颜色数:20\n",
|
|
"\n",
|
|
"使用算法: Welsh-Powell\n",
|
|
"执行时间:0.0465秒, 使用颜色数:18\n",
|
|
"\n",
|
|
"使用算法: DSATUR\n",
|
|
"执行时间:12.5949秒, 使用颜色数:16\n",
|
|
"\n",
|
|
"测试实例: DSJC0500.5.txt\n",
|
|
"\n",
|
|
"使用算法: FunSearch-MCP\n",
|
|
"执行时间:0.0556秒, 使用颜色数:68\n",
|
|
"\n",
|
|
"使用算法: EoH-MCP\n",
|
|
"执行时间:18.6282秒, 使用颜色数:65\n",
|
|
"\n",
|
|
"使用算法: AAE-MCP\n",
|
|
"执行时间:0.2160秒, 使用颜色数:65\n",
|
|
"\n",
|
|
"使用算法: 贪心\n",
|
|
"执行时间:0.0438秒, 使用颜色数:72\n",
|
|
"\n",
|
|
"使用算法: Welsh-Powell\n",
|
|
"执行时间:0.0799秒, 使用颜色数:71\n",
|
|
"\n",
|
|
"使用算法: DSATUR\n",
|
|
"执行时间:14.6898秒, 使用颜色数:65\n",
|
|
"\n",
|
|
"测试实例: DSJC0500.9.txt\n",
|
|
"\n",
|
|
"使用算法: FunSearch-MCP\n",
|
|
"执行时间:0.0754秒, 使用颜色数:171\n",
|
|
"\n",
|
|
"使用算法: EoH-MCP\n",
|
|
"执行时间:23.0478秒, 使用颜色数:170\n",
|
|
"\n",
|
|
"使用算法: AAE-MCP\n",
|
|
"执行时间:0.3527秒, 使用颜色数:170\n",
|
|
"\n",
|
|
"使用算法: 贪心\n",
|
|
"执行时间:0.0455秒, 使用颜色数:175\n",
|
|
"\n",
|
|
"使用算法: Welsh-Powell\n",
|
|
"执行时间:0.1936秒, 使用颜色数:169\n",
|
|
"\n",
|
|
"使用算法: DSATUR\n",
|
|
"执行时间:14.5305秒, 使用颜色数:170\n",
|
|
"\n",
|
|
"测试实例: DSJC1000.1.txt\n",
|
|
"\n",
|
|
"使用算法: FunSearch-MCP\n",
|
|
"执行时间:0.2045秒, 使用颜色数:29\n",
|
|
"\n",
|
|
"使用算法: EoH-MCP\n",
|
|
"执行时间:122.7522秒, 使用颜色数:27\n",
|
|
"\n",
|
|
"使用算法: AAE-MCP\n",
|
|
"执行时间:0.2949秒, 使用颜色数:27\n",
|
|
"\n",
|
|
"使用算法: 贪心\n",
|
|
"执行时间:0.1469秒, 使用颜色数:31\n",
|
|
"\n",
|
|
"使用算法: Welsh-Powell\n",
|
|
"执行时间:0.1831秒, 使用颜色数:29\n",
|
|
"\n",
|
|
"使用算法: DSATUR\n",
|
|
"执行时间:96.6556秒, 使用颜色数:27\n",
|
|
"\n",
|
|
"测试实例: DSJC1000.5.txt\n",
|
|
"\n",
|
|
"使用算法: FunSearch-MCP\n",
|
|
"执行时间:0.2217秒, 使用颜色数:123\n",
|
|
"\n",
|
|
"使用算法: EoH-MCP\n",
|
|
"执行时间:142.0033秒, 使用颜色数:115\n",
|
|
"\n",
|
|
"使用算法: AAE-MCP\n",
|
|
"执行时间:0.8392秒, 使用颜色数:115\n",
|
|
"\n",
|
|
"使用算法: 贪心\n",
|
|
"执行时间:0.1663秒, 使用颜色数:127\n",
|
|
"\n",
|
|
"使用算法: Welsh-Powell\n",
|
|
"执行时间:0.4809秒, 使用颜色数:121\n",
|
|
"\n",
|
|
"使用算法: DSATUR\n",
|
|
"执行时间:106.3345秒, 使用颜色数:115\n",
|
|
"\n",
|
|
"测试实例: DSJC1000.9.txt\n",
|
|
"\n",
|
|
"使用算法: FunSearch-MCP\n",
|
|
"执行时间:0.2358秒, 使用颜色数:316\n",
|
|
"\n",
|
|
"使用算法: EoH-MCP\n",
|
|
"执行时间:164.6181秒, 使用颜色数:299\n",
|
|
"\n",
|
|
"使用算法: AAE-MCP\n",
|
|
"执行时间:1.3996秒, 使用颜色数:299\n",
|
|
"\n",
|
|
"使用算法: 贪心\n",
|
|
"执行时间:0.1856秒, 使用颜色数:321\n",
|
|
"\n",
|
|
"使用算法: Welsh-Powell\n",
|
|
"执行时间:1.4151秒, 使用颜色数:313\n",
|
|
"\n",
|
|
"使用算法: DSATUR\n",
|
|
"执行时间:128.1266秒, 使用颜色数:299\n",
|
|
"\n",
|
|
"所有算法在各个实例上的表现:\n",
|
|
"\n",
|
|
"FunSearch-MCP:\n",
|
|
" DSJC0125.1.txt: 使用颜色数 = 7\n",
|
|
" DSJC0125.5.txt: 使用颜色数 = 24\n",
|
|
" DSJC0125.9.txt: 使用颜色数 = 53\n",
|
|
" DSJC0250.1.txt: 使用颜色数 = 12\n",
|
|
" DSJC0250.5.txt: 使用颜色数 = 40\n",
|
|
" DSJC0250.9.txt: 使用颜色数 = 92\n",
|
|
" DSJC0500.1.txt: 使用颜色数 = 18\n",
|
|
" DSJC0500.5.txt: 使用颜色数 = 68\n",
|
|
" DSJC0500.9.txt: 使用颜色数 = 171\n",
|
|
" DSJC1000.1.txt: 使用颜色数 = 29\n",
|
|
" DSJC1000.5.txt: 使用颜色数 = 123\n",
|
|
" DSJC1000.9.txt: 使用颜色数 = 316\n",
|
|
" FunSearch-MCP: 执行时间 = {'DSJC0125.1.txt': 0.010560035705566406, 'DSJC0125.5.txt': 0.0035393238067626953, 'DSJC0125.9.txt': 0.003525257110595703, 'DSJC0250.1.txt': 0.011104822158813477, 'DSJC0250.5.txt': 0.01467132568359375, 'DSJC0250.9.txt': 0.01604008674621582, 'DSJC0500.1.txt': 0.05222797393798828, 'DSJC0500.5.txt': 0.05559563636779785, 'DSJC0500.9.txt': 0.07539129257202148, 'DSJC1000.1.txt': 0.204453706741333, 'DSJC1000.5.txt': 0.2216651439666748, 'DSJC1000.9.txt': 0.23581409454345703}\n",
|
|
" EoH-MCP: 执行时间 = {'DSJC0125.1.txt': 0.2657294273376465, 'DSJC0125.5.txt': 0.3157191276550293, 'DSJC0125.9.txt': 0.3592233657836914, 'DSJC0250.1.txt': 1.9986271858215332, 'DSJC0250.5.txt': 2.3853354454040527, 'DSJC0250.9.txt': 2.989116907119751, 'DSJC0500.1.txt': 16.78122878074646, 'DSJC0500.5.txt': 18.628207206726074, 'DSJC0500.9.txt': 23.047802925109863, 'DSJC1000.1.txt': 122.75219559669495, 'DSJC1000.5.txt': 142.00333714485168, 'DSJC1000.9.txt': 164.6181070804596}\n",
|
|
" AAE-MCP: 执行时间 = {'DSJC0125.1.txt': 0.0070340633392333984, 'DSJC0125.5.txt': 0.01272726058959961, 'DSJC0125.9.txt': 0.019374370574951172, 'DSJC0250.1.txt': 0.019664525985717773, 'DSJC0250.5.txt': 0.04539036750793457, 'DSJC0250.9.txt': 0.18355083465576172, 'DSJC0500.1.txt': 0.09353065490722656, 'DSJC0500.5.txt': 0.21602964401245117, 'DSJC0500.9.txt': 0.35271167755126953, 'DSJC1000.1.txt': 0.294903039932251, 'DSJC1000.5.txt': 0.8391859531402588, 'DSJC1000.9.txt': 1.3996093273162842}\n",
|
|
" 贪心: 执行时间 = {'DSJC0125.1.txt': 0.0020036697387695312, 'DSJC0125.5.txt': 0.0030128955841064453, 'DSJC0125.9.txt': 0.0030007362365722656, 'DSJC0250.1.txt': 0.009136676788330078, 'DSJC0250.5.txt': 0.009547948837280273, 'DSJC0250.9.txt': 0.010493755340576172, 'DSJC0500.1.txt': 0.04389691352844238, 'DSJC0500.5.txt': 0.043775320053100586, 'DSJC0500.9.txt': 0.0454859733581543, 'DSJC1000.1.txt': 0.14690470695495605, 'DSJC1000.5.txt': 0.16630005836486816, 'DSJC1000.9.txt': 0.18558239936828613}\n",
|
|
" Welsh-Powell: 执行时间 = {'DSJC0125.1.txt': 0.0020334720611572266, 'DSJC0125.5.txt': 0.003046751022338867, 'DSJC0125.9.txt': 0.006543397903442383, 'DSJC0250.1.txt': 0.008815288543701172, 'DSJC0250.5.txt': 0.015262365341186523, 'DSJC0250.9.txt': 0.03563809394836426, 'DSJC0500.1.txt': 0.04653811454772949, 'DSJC0500.5.txt': 0.07994246482849121, 'DSJC0500.9.txt': 0.19355511665344238, 'DSJC1000.1.txt': 0.1831059455871582, 'DSJC1000.5.txt': 0.48086977005004883, 'DSJC1000.9.txt': 1.4151320457458496}\n",
|
|
" DSATUR: 执行时间 = {'DSJC0125.1.txt': 0.20441937446594238, 'DSJC0125.5.txt': 0.22018790245056152, 'DSJC0125.9.txt': 0.23067665100097656, 'DSJC0250.1.txt': 1.5610229969024658, 'DSJC0250.5.txt': 1.7647099494934082, 'DSJC0250.9.txt': 1.9385864734649658, 'DSJC0500.1.txt': 12.594899415969849, 'DSJC0500.5.txt': 14.689803123474121, 'DSJC0500.9.txt': 14.530549764633179, 'DSJC1000.1.txt': 96.6555712223053, 'DSJC1000.5.txt': 106.33447790145874, 'DSJC1000.9.txt': 128.1265606880188}\n",
|
|
"\n",
|
|
"EoH-MCP:\n",
|
|
" DSJC0125.1.txt: 使用颜色数 = 6\n",
|
|
" DSJC0125.5.txt: 使用颜色数 = 22\n",
|
|
" DSJC0125.9.txt: 使用颜色数 = 51\n",
|
|
" DSJC0250.1.txt: 使用颜色数 = 10\n",
|
|
" DSJC0250.5.txt: 使用颜色数 = 37\n",
|
|
" DSJC0250.9.txt: 使用颜色数 = 92\n",
|
|
" DSJC0500.1.txt: 使用颜色数 = 16\n",
|
|
" DSJC0500.5.txt: 使用颜色数 = 65\n",
|
|
" DSJC0500.9.txt: 使用颜色数 = 170\n",
|
|
" DSJC1000.1.txt: 使用颜色数 = 27\n",
|
|
" DSJC1000.5.txt: 使用颜色数 = 115\n",
|
|
" DSJC1000.9.txt: 使用颜色数 = 299\n",
|
|
" FunSearch-MCP: 执行时间 = {'DSJC0125.1.txt': 0.010560035705566406, 'DSJC0125.5.txt': 0.0035393238067626953, 'DSJC0125.9.txt': 0.003525257110595703, 'DSJC0250.1.txt': 0.011104822158813477, 'DSJC0250.5.txt': 0.01467132568359375, 'DSJC0250.9.txt': 0.01604008674621582, 'DSJC0500.1.txt': 0.05222797393798828, 'DSJC0500.5.txt': 0.05559563636779785, 'DSJC0500.9.txt': 0.07539129257202148, 'DSJC1000.1.txt': 0.204453706741333, 'DSJC1000.5.txt': 0.2216651439666748, 'DSJC1000.9.txt': 0.23581409454345703}\n",
|
|
" EoH-MCP: 执行时间 = {'DSJC0125.1.txt': 0.2657294273376465, 'DSJC0125.5.txt': 0.3157191276550293, 'DSJC0125.9.txt': 0.3592233657836914, 'DSJC0250.1.txt': 1.9986271858215332, 'DSJC0250.5.txt': 2.3853354454040527, 'DSJC0250.9.txt': 2.989116907119751, 'DSJC0500.1.txt': 16.78122878074646, 'DSJC0500.5.txt': 18.628207206726074, 'DSJC0500.9.txt': 23.047802925109863, 'DSJC1000.1.txt': 122.75219559669495, 'DSJC1000.5.txt': 142.00333714485168, 'DSJC1000.9.txt': 164.6181070804596}\n",
|
|
" AAE-MCP: 执行时间 = {'DSJC0125.1.txt': 0.0070340633392333984, 'DSJC0125.5.txt': 0.01272726058959961, 'DSJC0125.9.txt': 0.019374370574951172, 'DSJC0250.1.txt': 0.019664525985717773, 'DSJC0250.5.txt': 0.04539036750793457, 'DSJC0250.9.txt': 0.18355083465576172, 'DSJC0500.1.txt': 0.09353065490722656, 'DSJC0500.5.txt': 0.21602964401245117, 'DSJC0500.9.txt': 0.35271167755126953, 'DSJC1000.1.txt': 0.294903039932251, 'DSJC1000.5.txt': 0.8391859531402588, 'DSJC1000.9.txt': 1.3996093273162842}\n",
|
|
" 贪心: 执行时间 = {'DSJC0125.1.txt': 0.0020036697387695312, 'DSJC0125.5.txt': 0.0030128955841064453, 'DSJC0125.9.txt': 0.0030007362365722656, 'DSJC0250.1.txt': 0.009136676788330078, 'DSJC0250.5.txt': 0.009547948837280273, 'DSJC0250.9.txt': 0.010493755340576172, 'DSJC0500.1.txt': 0.04389691352844238, 'DSJC0500.5.txt': 0.043775320053100586, 'DSJC0500.9.txt': 0.0454859733581543, 'DSJC1000.1.txt': 0.14690470695495605, 'DSJC1000.5.txt': 0.16630005836486816, 'DSJC1000.9.txt': 0.18558239936828613}\n",
|
|
" Welsh-Powell: 执行时间 = {'DSJC0125.1.txt': 0.0020334720611572266, 'DSJC0125.5.txt': 0.003046751022338867, 'DSJC0125.9.txt': 0.006543397903442383, 'DSJC0250.1.txt': 0.008815288543701172, 'DSJC0250.5.txt': 0.015262365341186523, 'DSJC0250.9.txt': 0.03563809394836426, 'DSJC0500.1.txt': 0.04653811454772949, 'DSJC0500.5.txt': 0.07994246482849121, 'DSJC0500.9.txt': 0.19355511665344238, 'DSJC1000.1.txt': 0.1831059455871582, 'DSJC1000.5.txt': 0.48086977005004883, 'DSJC1000.9.txt': 1.4151320457458496}\n",
|
|
" DSATUR: 执行时间 = {'DSJC0125.1.txt': 0.20441937446594238, 'DSJC0125.5.txt': 0.22018790245056152, 'DSJC0125.9.txt': 0.23067665100097656, 'DSJC0250.1.txt': 1.5610229969024658, 'DSJC0250.5.txt': 1.7647099494934082, 'DSJC0250.9.txt': 1.9385864734649658, 'DSJC0500.1.txt': 12.594899415969849, 'DSJC0500.5.txt': 14.689803123474121, 'DSJC0500.9.txt': 14.530549764633179, 'DSJC1000.1.txt': 96.6555712223053, 'DSJC1000.5.txt': 106.33447790145874, 'DSJC1000.9.txt': 128.1265606880188}\n",
|
|
"\n",
|
|
"AAE-MCP:\n",
|
|
" DSJC0125.1.txt: 使用颜色数 = 6\n",
|
|
" DSJC0125.5.txt: 使用颜色数 = 22\n",
|
|
" DSJC0125.9.txt: 使用颜色数 = 51\n",
|
|
" DSJC0250.1.txt: 使用颜色数 = 10\n",
|
|
" DSJC0250.5.txt: 使用颜色数 = 37\n",
|
|
" DSJC0250.9.txt: 使用颜色数 = 92\n",
|
|
" DSJC0500.1.txt: 使用颜色数 = 16\n",
|
|
" DSJC0500.5.txt: 使用颜色数 = 65\n",
|
|
" DSJC0500.9.txt: 使用颜色数 = 170\n",
|
|
" DSJC1000.1.txt: 使用颜色数 = 27\n",
|
|
" DSJC1000.5.txt: 使用颜色数 = 115\n",
|
|
" DSJC1000.9.txt: 使用颜色数 = 299\n",
|
|
" FunSearch-MCP: 执行时间 = {'DSJC0125.1.txt': 0.010560035705566406, 'DSJC0125.5.txt': 0.0035393238067626953, 'DSJC0125.9.txt': 0.003525257110595703, 'DSJC0250.1.txt': 0.011104822158813477, 'DSJC0250.5.txt': 0.01467132568359375, 'DSJC0250.9.txt': 0.01604008674621582, 'DSJC0500.1.txt': 0.05222797393798828, 'DSJC0500.5.txt': 0.05559563636779785, 'DSJC0500.9.txt': 0.07539129257202148, 'DSJC1000.1.txt': 0.204453706741333, 'DSJC1000.5.txt': 0.2216651439666748, 'DSJC1000.9.txt': 0.23581409454345703}\n",
|
|
" EoH-MCP: 执行时间 = {'DSJC0125.1.txt': 0.2657294273376465, 'DSJC0125.5.txt': 0.3157191276550293, 'DSJC0125.9.txt': 0.3592233657836914, 'DSJC0250.1.txt': 1.9986271858215332, 'DSJC0250.5.txt': 2.3853354454040527, 'DSJC0250.9.txt': 2.989116907119751, 'DSJC0500.1.txt': 16.78122878074646, 'DSJC0500.5.txt': 18.628207206726074, 'DSJC0500.9.txt': 23.047802925109863, 'DSJC1000.1.txt': 122.75219559669495, 'DSJC1000.5.txt': 142.00333714485168, 'DSJC1000.9.txt': 164.6181070804596}\n",
|
|
" AAE-MCP: 执行时间 = {'DSJC0125.1.txt': 0.0070340633392333984, 'DSJC0125.5.txt': 0.01272726058959961, 'DSJC0125.9.txt': 0.019374370574951172, 'DSJC0250.1.txt': 0.019664525985717773, 'DSJC0250.5.txt': 0.04539036750793457, 'DSJC0250.9.txt': 0.18355083465576172, 'DSJC0500.1.txt': 0.09353065490722656, 'DSJC0500.5.txt': 0.21602964401245117, 'DSJC0500.9.txt': 0.35271167755126953, 'DSJC1000.1.txt': 0.294903039932251, 'DSJC1000.5.txt': 0.8391859531402588, 'DSJC1000.9.txt': 1.3996093273162842}\n",
|
|
" 贪心: 执行时间 = {'DSJC0125.1.txt': 0.0020036697387695312, 'DSJC0125.5.txt': 0.0030128955841064453, 'DSJC0125.9.txt': 0.0030007362365722656, 'DSJC0250.1.txt': 0.009136676788330078, 'DSJC0250.5.txt': 0.009547948837280273, 'DSJC0250.9.txt': 0.010493755340576172, 'DSJC0500.1.txt': 0.04389691352844238, 'DSJC0500.5.txt': 0.043775320053100586, 'DSJC0500.9.txt': 0.0454859733581543, 'DSJC1000.1.txt': 0.14690470695495605, 'DSJC1000.5.txt': 0.16630005836486816, 'DSJC1000.9.txt': 0.18558239936828613}\n",
|
|
" Welsh-Powell: 执行时间 = {'DSJC0125.1.txt': 0.0020334720611572266, 'DSJC0125.5.txt': 0.003046751022338867, 'DSJC0125.9.txt': 0.006543397903442383, 'DSJC0250.1.txt': 0.008815288543701172, 'DSJC0250.5.txt': 0.015262365341186523, 'DSJC0250.9.txt': 0.03563809394836426, 'DSJC0500.1.txt': 0.04653811454772949, 'DSJC0500.5.txt': 0.07994246482849121, 'DSJC0500.9.txt': 0.19355511665344238, 'DSJC1000.1.txt': 0.1831059455871582, 'DSJC1000.5.txt': 0.48086977005004883, 'DSJC1000.9.txt': 1.4151320457458496}\n",
|
|
" DSATUR: 执行时间 = {'DSJC0125.1.txt': 0.20441937446594238, 'DSJC0125.5.txt': 0.22018790245056152, 'DSJC0125.9.txt': 0.23067665100097656, 'DSJC0250.1.txt': 1.5610229969024658, 'DSJC0250.5.txt': 1.7647099494934082, 'DSJC0250.9.txt': 1.9385864734649658, 'DSJC0500.1.txt': 12.594899415969849, 'DSJC0500.5.txt': 14.689803123474121, 'DSJC0500.9.txt': 14.530549764633179, 'DSJC1000.1.txt': 96.6555712223053, 'DSJC1000.5.txt': 106.33447790145874, 'DSJC1000.9.txt': 128.1265606880188}\n",
|
|
"\n",
|
|
"贪心:\n",
|
|
" DSJC0125.1.txt: 使用颜色数 = 8\n",
|
|
" DSJC0125.5.txt: 使用颜色数 = 26\n",
|
|
" DSJC0125.9.txt: 使用颜色数 = 56\n",
|
|
" DSJC0250.1.txt: 使用颜色数 = 13\n",
|
|
" DSJC0250.5.txt: 使用颜色数 = 43\n",
|
|
" DSJC0250.9.txt: 使用颜色数 = 99\n",
|
|
" DSJC0500.1.txt: 使用颜色数 = 20\n",
|
|
" DSJC0500.5.txt: 使用颜色数 = 72\n",
|
|
" DSJC0500.9.txt: 使用颜色数 = 175\n",
|
|
" DSJC1000.1.txt: 使用颜色数 = 31\n",
|
|
" DSJC1000.5.txt: 使用颜色数 = 127\n",
|
|
" DSJC1000.9.txt: 使用颜色数 = 321\n",
|
|
" FunSearch-MCP: 执行时间 = {'DSJC0125.1.txt': 0.010560035705566406, 'DSJC0125.5.txt': 0.0035393238067626953, 'DSJC0125.9.txt': 0.003525257110595703, 'DSJC0250.1.txt': 0.011104822158813477, 'DSJC0250.5.txt': 0.01467132568359375, 'DSJC0250.9.txt': 0.01604008674621582, 'DSJC0500.1.txt': 0.05222797393798828, 'DSJC0500.5.txt': 0.05559563636779785, 'DSJC0500.9.txt': 0.07539129257202148, 'DSJC1000.1.txt': 0.204453706741333, 'DSJC1000.5.txt': 0.2216651439666748, 'DSJC1000.9.txt': 0.23581409454345703}\n",
|
|
" EoH-MCP: 执行时间 = {'DSJC0125.1.txt': 0.2657294273376465, 'DSJC0125.5.txt': 0.3157191276550293, 'DSJC0125.9.txt': 0.3592233657836914, 'DSJC0250.1.txt': 1.9986271858215332, 'DSJC0250.5.txt': 2.3853354454040527, 'DSJC0250.9.txt': 2.989116907119751, 'DSJC0500.1.txt': 16.78122878074646, 'DSJC0500.5.txt': 18.628207206726074, 'DSJC0500.9.txt': 23.047802925109863, 'DSJC1000.1.txt': 122.75219559669495, 'DSJC1000.5.txt': 142.00333714485168, 'DSJC1000.9.txt': 164.6181070804596}\n",
|
|
" AAE-MCP: 执行时间 = {'DSJC0125.1.txt': 0.0070340633392333984, 'DSJC0125.5.txt': 0.01272726058959961, 'DSJC0125.9.txt': 0.019374370574951172, 'DSJC0250.1.txt': 0.019664525985717773, 'DSJC0250.5.txt': 0.04539036750793457, 'DSJC0250.9.txt': 0.18355083465576172, 'DSJC0500.1.txt': 0.09353065490722656, 'DSJC0500.5.txt': 0.21602964401245117, 'DSJC0500.9.txt': 0.35271167755126953, 'DSJC1000.1.txt': 0.294903039932251, 'DSJC1000.5.txt': 0.8391859531402588, 'DSJC1000.9.txt': 1.3996093273162842}\n",
|
|
" 贪心: 执行时间 = {'DSJC0125.1.txt': 0.0020036697387695312, 'DSJC0125.5.txt': 0.0030128955841064453, 'DSJC0125.9.txt': 0.0030007362365722656, 'DSJC0250.1.txt': 0.009136676788330078, 'DSJC0250.5.txt': 0.009547948837280273, 'DSJC0250.9.txt': 0.010493755340576172, 'DSJC0500.1.txt': 0.04389691352844238, 'DSJC0500.5.txt': 0.043775320053100586, 'DSJC0500.9.txt': 0.0454859733581543, 'DSJC1000.1.txt': 0.14690470695495605, 'DSJC1000.5.txt': 0.16630005836486816, 'DSJC1000.9.txt': 0.18558239936828613}\n",
|
|
" Welsh-Powell: 执行时间 = {'DSJC0125.1.txt': 0.0020334720611572266, 'DSJC0125.5.txt': 0.003046751022338867, 'DSJC0125.9.txt': 0.006543397903442383, 'DSJC0250.1.txt': 0.008815288543701172, 'DSJC0250.5.txt': 0.015262365341186523, 'DSJC0250.9.txt': 0.03563809394836426, 'DSJC0500.1.txt': 0.04653811454772949, 'DSJC0500.5.txt': 0.07994246482849121, 'DSJC0500.9.txt': 0.19355511665344238, 'DSJC1000.1.txt': 0.1831059455871582, 'DSJC1000.5.txt': 0.48086977005004883, 'DSJC1000.9.txt': 1.4151320457458496}\n",
|
|
" DSATUR: 执行时间 = {'DSJC0125.1.txt': 0.20441937446594238, 'DSJC0125.5.txt': 0.22018790245056152, 'DSJC0125.9.txt': 0.23067665100097656, 'DSJC0250.1.txt': 1.5610229969024658, 'DSJC0250.5.txt': 1.7647099494934082, 'DSJC0250.9.txt': 1.9385864734649658, 'DSJC0500.1.txt': 12.594899415969849, 'DSJC0500.5.txt': 14.689803123474121, 'DSJC0500.9.txt': 14.530549764633179, 'DSJC1000.1.txt': 96.6555712223053, 'DSJC1000.5.txt': 106.33447790145874, 'DSJC1000.9.txt': 128.1265606880188}\n",
|
|
"\n",
|
|
"Welsh-Powell:\n",
|
|
" DSJC0125.1.txt: 使用颜色数 = 7\n",
|
|
" DSJC0125.5.txt: 使用颜色数 = 23\n",
|
|
" DSJC0125.9.txt: 使用颜色数 = 53\n",
|
|
" DSJC0250.1.txt: 使用颜色数 = 11\n",
|
|
" DSJC0250.5.txt: 使用颜色数 = 41\n",
|
|
" DSJC0250.9.txt: 使用颜色数 = 93\n",
|
|
" DSJC0500.1.txt: 使用颜色数 = 18\n",
|
|
" DSJC0500.5.txt: 使用颜色数 = 71\n",
|
|
" DSJC0500.9.txt: 使用颜色数 = 169\n",
|
|
" DSJC1000.1.txt: 使用颜色数 = 29\n",
|
|
" DSJC1000.5.txt: 使用颜色数 = 121\n",
|
|
" DSJC1000.9.txt: 使用颜色数 = 313\n",
|
|
" FunSearch-MCP: 执行时间 = {'DSJC0125.1.txt': 0.010560035705566406, 'DSJC0125.5.txt': 0.0035393238067626953, 'DSJC0125.9.txt': 0.003525257110595703, 'DSJC0250.1.txt': 0.011104822158813477, 'DSJC0250.5.txt': 0.01467132568359375, 'DSJC0250.9.txt': 0.01604008674621582, 'DSJC0500.1.txt': 0.05222797393798828, 'DSJC0500.5.txt': 0.05559563636779785, 'DSJC0500.9.txt': 0.07539129257202148, 'DSJC1000.1.txt': 0.204453706741333, 'DSJC1000.5.txt': 0.2216651439666748, 'DSJC1000.9.txt': 0.23581409454345703}\n",
|
|
" EoH-MCP: 执行时间 = {'DSJC0125.1.txt': 0.2657294273376465, 'DSJC0125.5.txt': 0.3157191276550293, 'DSJC0125.9.txt': 0.3592233657836914, 'DSJC0250.1.txt': 1.9986271858215332, 'DSJC0250.5.txt': 2.3853354454040527, 'DSJC0250.9.txt': 2.989116907119751, 'DSJC0500.1.txt': 16.78122878074646, 'DSJC0500.5.txt': 18.628207206726074, 'DSJC0500.9.txt': 23.047802925109863, 'DSJC1000.1.txt': 122.75219559669495, 'DSJC1000.5.txt': 142.00333714485168, 'DSJC1000.9.txt': 164.6181070804596}\n",
|
|
" AAE-MCP: 执行时间 = {'DSJC0125.1.txt': 0.0070340633392333984, 'DSJC0125.5.txt': 0.01272726058959961, 'DSJC0125.9.txt': 0.019374370574951172, 'DSJC0250.1.txt': 0.019664525985717773, 'DSJC0250.5.txt': 0.04539036750793457, 'DSJC0250.9.txt': 0.18355083465576172, 'DSJC0500.1.txt': 0.09353065490722656, 'DSJC0500.5.txt': 0.21602964401245117, 'DSJC0500.9.txt': 0.35271167755126953, 'DSJC1000.1.txt': 0.294903039932251, 'DSJC1000.5.txt': 0.8391859531402588, 'DSJC1000.9.txt': 1.3996093273162842}\n",
|
|
" 贪心: 执行时间 = {'DSJC0125.1.txt': 0.0020036697387695312, 'DSJC0125.5.txt': 0.0030128955841064453, 'DSJC0125.9.txt': 0.0030007362365722656, 'DSJC0250.1.txt': 0.009136676788330078, 'DSJC0250.5.txt': 0.009547948837280273, 'DSJC0250.9.txt': 0.010493755340576172, 'DSJC0500.1.txt': 0.04389691352844238, 'DSJC0500.5.txt': 0.043775320053100586, 'DSJC0500.9.txt': 0.0454859733581543, 'DSJC1000.1.txt': 0.14690470695495605, 'DSJC1000.5.txt': 0.16630005836486816, 'DSJC1000.9.txt': 0.18558239936828613}\n",
|
|
" Welsh-Powell: 执行时间 = {'DSJC0125.1.txt': 0.0020334720611572266, 'DSJC0125.5.txt': 0.003046751022338867, 'DSJC0125.9.txt': 0.006543397903442383, 'DSJC0250.1.txt': 0.008815288543701172, 'DSJC0250.5.txt': 0.015262365341186523, 'DSJC0250.9.txt': 0.03563809394836426, 'DSJC0500.1.txt': 0.04653811454772949, 'DSJC0500.5.txt': 0.07994246482849121, 'DSJC0500.9.txt': 0.19355511665344238, 'DSJC1000.1.txt': 0.1831059455871582, 'DSJC1000.5.txt': 0.48086977005004883, 'DSJC1000.9.txt': 1.4151320457458496}\n",
|
|
" DSATUR: 执行时间 = {'DSJC0125.1.txt': 0.20441937446594238, 'DSJC0125.5.txt': 0.22018790245056152, 'DSJC0125.9.txt': 0.23067665100097656, 'DSJC0250.1.txt': 1.5610229969024658, 'DSJC0250.5.txt': 1.7647099494934082, 'DSJC0250.9.txt': 1.9385864734649658, 'DSJC0500.1.txt': 12.594899415969849, 'DSJC0500.5.txt': 14.689803123474121, 'DSJC0500.9.txt': 14.530549764633179, 'DSJC1000.1.txt': 96.6555712223053, 'DSJC1000.5.txt': 106.33447790145874, 'DSJC1000.9.txt': 128.1265606880188}\n",
|
|
"\n",
|
|
"DSATUR:\n",
|
|
" DSJC0125.1.txt: 使用颜色数 = 6\n",
|
|
" DSJC0125.5.txt: 使用颜色数 = 22\n",
|
|
" DSJC0125.9.txt: 使用颜色数 = 51\n",
|
|
" DSJC0250.1.txt: 使用颜色数 = 10\n",
|
|
" DSJC0250.5.txt: 使用颜色数 = 37\n",
|
|
" DSJC0250.9.txt: 使用颜色数 = 92\n",
|
|
" DSJC0500.1.txt: 使用颜色数 = 16\n",
|
|
" DSJC0500.5.txt: 使用颜色数 = 65\n",
|
|
" DSJC0500.9.txt: 使用颜色数 = 170\n",
|
|
" DSJC1000.1.txt: 使用颜色数 = 27\n",
|
|
" DSJC1000.5.txt: 使用颜色数 = 115\n",
|
|
" DSJC1000.9.txt: 使用颜色数 = 299\n",
|
|
" FunSearch-MCP: 执行时间 = {'DSJC0125.1.txt': 0.010560035705566406, 'DSJC0125.5.txt': 0.0035393238067626953, 'DSJC0125.9.txt': 0.003525257110595703, 'DSJC0250.1.txt': 0.011104822158813477, 'DSJC0250.5.txt': 0.01467132568359375, 'DSJC0250.9.txt': 0.01604008674621582, 'DSJC0500.1.txt': 0.05222797393798828, 'DSJC0500.5.txt': 0.05559563636779785, 'DSJC0500.9.txt': 0.07539129257202148, 'DSJC1000.1.txt': 0.204453706741333, 'DSJC1000.5.txt': 0.2216651439666748, 'DSJC1000.9.txt': 0.23581409454345703}\n",
|
|
" EoH-MCP: 执行时间 = {'DSJC0125.1.txt': 0.2657294273376465, 'DSJC0125.5.txt': 0.3157191276550293, 'DSJC0125.9.txt': 0.3592233657836914, 'DSJC0250.1.txt': 1.9986271858215332, 'DSJC0250.5.txt': 2.3853354454040527, 'DSJC0250.9.txt': 2.989116907119751, 'DSJC0500.1.txt': 16.78122878074646, 'DSJC0500.5.txt': 18.628207206726074, 'DSJC0500.9.txt': 23.047802925109863, 'DSJC1000.1.txt': 122.75219559669495, 'DSJC1000.5.txt': 142.00333714485168, 'DSJC1000.9.txt': 164.6181070804596}\n",
|
|
" AAE-MCP: 执行时间 = {'DSJC0125.1.txt': 0.0070340633392333984, 'DSJC0125.5.txt': 0.01272726058959961, 'DSJC0125.9.txt': 0.019374370574951172, 'DSJC0250.1.txt': 0.019664525985717773, 'DSJC0250.5.txt': 0.04539036750793457, 'DSJC0250.9.txt': 0.18355083465576172, 'DSJC0500.1.txt': 0.09353065490722656, 'DSJC0500.5.txt': 0.21602964401245117, 'DSJC0500.9.txt': 0.35271167755126953, 'DSJC1000.1.txt': 0.294903039932251, 'DSJC1000.5.txt': 0.8391859531402588, 'DSJC1000.9.txt': 1.3996093273162842}\n",
|
|
" 贪心: 执行时间 = {'DSJC0125.1.txt': 0.0020036697387695312, 'DSJC0125.5.txt': 0.0030128955841064453, 'DSJC0125.9.txt': 0.0030007362365722656, 'DSJC0250.1.txt': 0.009136676788330078, 'DSJC0250.5.txt': 0.009547948837280273, 'DSJC0250.9.txt': 0.010493755340576172, 'DSJC0500.1.txt': 0.04389691352844238, 'DSJC0500.5.txt': 0.043775320053100586, 'DSJC0500.9.txt': 0.0454859733581543, 'DSJC1000.1.txt': 0.14690470695495605, 'DSJC1000.5.txt': 0.16630005836486816, 'DSJC1000.9.txt': 0.18558239936828613}\n",
|
|
" Welsh-Powell: 执行时间 = {'DSJC0125.1.txt': 0.0020334720611572266, 'DSJC0125.5.txt': 0.003046751022338867, 'DSJC0125.9.txt': 0.006543397903442383, 'DSJC0250.1.txt': 0.008815288543701172, 'DSJC0250.5.txt': 0.015262365341186523, 'DSJC0250.9.txt': 0.03563809394836426, 'DSJC0500.1.txt': 0.04653811454772949, 'DSJC0500.5.txt': 0.07994246482849121, 'DSJC0500.9.txt': 0.19355511665344238, 'DSJC1000.1.txt': 0.1831059455871582, 'DSJC1000.5.txt': 0.48086977005004883, 'DSJC1000.9.txt': 1.4151320457458496}\n",
|
|
" DSATUR: 执行时间 = {'DSJC0125.1.txt': 0.20441937446594238, 'DSJC0125.5.txt': 0.22018790245056152, 'DSJC0125.9.txt': 0.23067665100097656, 'DSJC0250.1.txt': 1.5610229969024658, 'DSJC0250.5.txt': 1.7647099494934082, 'DSJC0250.9.txt': 1.9385864734649658, 'DSJC0500.1.txt': 12.594899415969849, 'DSJC0500.5.txt': 14.689803123474121, 'DSJC0500.9.txt': 14.530549764633179, 'DSJC1000.1.txt': 96.6555712223053, 'DSJC1000.5.txt': 106.33447790145874, 'DSJC1000.9.txt': 128.1265606880188}\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",
|
|
" adj_matrix = load_graph_data(test_file)\n",
|
|
" if adj_matrix is None:\n",
|
|
" continue\n",
|
|
" \n",
|
|
" # 这里可以添加多个待评估的图着色算法\n",
|
|
" algorithms = {\n",
|
|
" \"FunSearch-MCP\": graph_coloring_v1,\n",
|
|
" \"EoH-MCP\": graph_coloring_v2, \n",
|
|
" # \"MCP-03\": graph_coloring_v3,\n",
|
|
" \"AAE-MCP\": graph_coloring_v5,\n",
|
|
" \"贪心\": greedy_coloring,\n",
|
|
" \"Welsh-Powell\": welsh_powell_coloring,\n",
|
|
" \"DSATUR\": dsatur_coloring,\n",
|
|
" }\n",
|
|
" \n",
|
|
" # 评估每个算法\n",
|
|
" for alg_name, alg_func in algorithms.items():\n",
|
|
" print(f\"\\n使用算法: {alg_name}\")\n",
|
|
" score,etime = evaluate_coloring(alg_func, adj_matrix)\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}\")\n",
|
|
" for test_file, etime in results_time.items():\n",
|
|
" print(f\" {test_file}: 执行时间 = {etime}\")"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 5,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"\n",
|
|
"各算法在不同实例上的着色数量:\n",
|
|
" FunSearch-MCP EoH-MCP AAE-MCP 贪心 Welsh-Powell DSATUR\n",
|
|
"MCP0125.1 7 6 6 8 7 6\n",
|
|
"MCP0125.5 24 22 22 26 23 22\n",
|
|
"MCP0125.9 53 51 51 56 53 51\n",
|
|
"MCP0250.1 12 10 10 13 11 10\n",
|
|
"MCP0250.5 40 37 37 43 41 37\n",
|
|
"MCP0250.9 92 92 92 99 93 92\n",
|
|
"MCP0500.1 18 16 16 20 18 16\n",
|
|
"MCP0500.5 68 65 65 72 71 65\n",
|
|
"MCP0500.9 171 170 170 175 169 170\n",
|
|
"MCP1000.1 29 27 27 31 29 27\n",
|
|
"MCP1000.5 123 115 115 127 121 115\n",
|
|
"MCP1000.9 316 299 299 321 313 299\n",
|
|
"\n",
|
|
"各算法在不同实例上的运行时间(秒):\n",
|
|
" FunSearch-MCP EoH-MCP AAE-MCP 贪心 Welsh-Powell DSATUR\n",
|
|
"MCP0125.1 0.0106 0.2657 0.0070 0.0020 0.0020 0.2044\n",
|
|
"MCP0125.5 0.0035 0.3157 0.0127 0.0030 0.0030 0.2202\n",
|
|
"MCP0125.9 0.0035 0.3592 0.0194 0.0030 0.0065 0.2307\n",
|
|
"MCP0250.1 0.0111 1.9986 0.0197 0.0091 0.0088 1.5610\n",
|
|
"MCP0250.5 0.0147 2.3853 0.0454 0.0095 0.0153 1.7647\n",
|
|
"MCP0250.9 0.0160 2.9891 0.1836 0.0105 0.0356 1.9386\n",
|
|
"MCP0500.1 0.0522 16.7812 0.0935 0.0439 0.0465 12.5949\n",
|
|
"MCP0500.5 0.0556 18.6282 0.2160 0.0438 0.0799 14.6898\n",
|
|
"MCP0500.9 0.0754 23.0478 0.3527 0.0455 0.1936 14.5305\n",
|
|
"MCP1000.1 0.2045 122.7522 0.2949 0.1469 0.1831 96.6556\n",
|
|
"MCP1000.5 0.2217 142.0033 0.8392 0.1663 0.4809 106.3345\n",
|
|
"MCP1000.9 0.2358 164.6181 1.3996 0.1856 1.4151 128.1266\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"# 将结果整理成表格\n",
|
|
"import pandas as pd\n",
|
|
"\n",
|
|
"# 准备性能数据\n",
|
|
"data_colors = {}\n",
|
|
"for test_file in test_files:\n",
|
|
" # 去掉.txt后缀,将DSJC替换为MCP\n",
|
|
" instance_name = test_file.replace('.txt', '').replace('DSJC', 'MCP')\n",
|
|
" data_colors[instance_name] = {}\n",
|
|
" for alg_name in results:\n",
|
|
" if test_file in results[alg_name]:\n",
|
|
" data_colors[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('.txt', '').replace('DSJC', 'MCP')\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] = round(results_time[alg_name][test_file], 4)\n",
|
|
"\n",
|
|
"# 转换为DataFrame\n",
|
|
"df_colors = pd.DataFrame(data_colors).T\n",
|
|
"df_time = pd.DataFrame(data_time).T\n",
|
|
"\n",
|
|
"# 打印结果表格\n",
|
|
"print(\"\\n各算法在不同实例上的着色数量:\")\n",
|
|
"print(df_colors)\n",
|
|
"print(\"\\n各算法在不同实例上的运行时间(秒):\")\n",
|
|
"print(df_time)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 6,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"image/png": "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yJEjie7j3QbTrVs3F5wHLm+//XaKjmnv3r3u86ln5cqV8fbRZ9eWLVvasWPH3GfHm266yU2xHGwKZX1e1PG89NJL7vPWY489Zk8//XSKjg1JpCnD8J99+/YpsnG3CK+fP/vZNyDLAF9/6+9u9X2kffzxx+7nP2jQoHjbTp8+7evQoYPbrqVSpUq+AgUKuK+7du0akudP7XP89ttvvty5c/uyZs3qW7ZsmS9Svv76a1+2bNnccRcvXtxXsWJFX/bs2d33efPm9S1evDje677hhhvc9piYGF/16tV9tWvXdl9rXePGjX0nT55M9XE98cQT7vHOO+88X82aNeMt+vmn5nXIkiVLfFmyZPE99NBDqT5eAADS0pEjR3y//PKLuw2nuRvn+qy/+Rd9H01at27t/yw2efLkeNtPnDjhK1SokNuuzwl79+6NtX306NFumz5HpFa/fv38xzJp0iS3bvfu3f51jRo1cusOHz7sPquULl3at3//fv/9u3Xr5vZbtWqV+75Tp07u+40bN8Z6nlatWvly5swZ77VkZkeS+PuQ1PiRTDfSnDLbn938mT97q1t9H8mM9/Hjx613795Wq1Yt6969e7ztb731lrsiqPn35s2b58Z9b9u2zZo2beoypPPnz0/1MaTmOfQedunSxV2R1ZXVOnXqWCQoK3333XdblixZbNasWfb333/bhg0bbPv27da+fXs7dOiQ3X///bHuM3LkSDcWWln977//3tasWWPLly+3RYsWWd68ed17MW7cuFQfmx5T9D7++OOP8ZZbbrklVa9D6tWrZw899JCNGjXK1q9fn+pjBgAgo3l67tOWNSar+1q3z8x9xqKF/v+fM2eOderUyVUcBstkq+ePMs/33XefGw6nku604GW3g2W5v/nmG/cZRZ9dAodHXn/99e5WrykxzZs3dxnyVatWhfy48R+CbkQu4PYqpn2RD7w/+eQTV7bzwgsvWNas//1H4NEfoQEDBvjLcRo1auS+VkCoMiGVJmvMTWqk9jkUlC9YsMDOO+88/+NEggLlf/75x5U06WKB5+yzz7Z33nnHlY3/9NNPtnPnTrdeJfADBw50pdszZ86MdbGgfv367j80mTx5cqqO6/Tp0+4/qaJFi1rx4sVD/joCqSReY6RU2gUAAP6/eZvm2aIti+yU75T7XrcLtyx066OBSsoPHz7shpZdeuml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587ty5cvn+/KK6/0zZo1K96+/fr1c4/XqFEjX7gcP37c99prr/nq16/vK1iwoC9btmy+s88+29esWTPf5MmT4+2v4477eoMtqX0d33//va9169a+woULu/fp/PPP9z3yyCO+33//PSSvQz777DN3XM8991ySjwsAgGhw5MgR3y+//OJugczuSBJ/H5IaP5LpDkCmO4IZ7whluONSabemi1JDDZUHx6VpxV577TXX2Eznyi233BIrkxwK4X4OZdE1D6U3jzdCQxUS9evXd03W1JQvWKMVAACiFZluIHyZboLuAATdEQq8oyTgFjVS07zN6j49adIkV1ackWzZssU1Y9Mc35zjoaM5uy+55BL3tYYEpKaTPQAAkUDQDYQv6KbLDyLbXM2iJ+AWZSfVBKtdu3YZcronjRfXfI0E3KGlsdtqBqcu8wTcAAAACESmOwCZ7rTPeE++b7K1HtU6KgJuAACAzIpMNxC+TDeDDhExCrSrtq3qz3gDAAAAQEZDeTkiioAbAAAAQEZG0A0AAAAgTTHCFZkJQTcAAACANO3r83LRl91tetC3b183reyKFSsifShIpwi6AQAAAKTp1LFHdh1xt9EeeH/xxRf2wgsv2Pjx413grQZbKbV9+3a78847bc+ePSE9RkQ/gm4AAAAAaRZwe6Xluo3mwHvJkiV2xx13WOPGje23335zAXerVq1cp+qU+OGHH2zMmDH22GOPhfxYEd0IugEAAACkXcDtDef2RW/g/cknn9hVV11lF110kQ0cONCWL19uU6dOtZ07d7p1s2bNSvZjtmzZ0gXx48aNsy+//DIsx43oRNANAAAAIG0DbovOwFtzM9988812yy23WNOmTW3GjBnWr18/a9eunZ06dcoWLlzogu6rr77aGjRoYO+8847t3bs3yY8/ePBgy507t9199932999/h/W1IHoQdAMAAABI+4A7SgJvBdOLFy+2zp07W5UqVWzixIku0P7ss88sT548bky3Ssz//fdfK1CggH3++ef29ddfu/vee++9VrhwYatYsaJ9/PHHZ3yuUqVKufLy1q1bW9asWdPg1SEaxPjo1++3f/9+K1iwoBunoV8oAAAAIDPQeGVleStUqGC5cuVKu4A7UIxZTEyM3fjJjVatXTVLyxjg8ssvt02bNlmnTp2sbNmy1qtXr0TvU7JkSTdGW9lqBecK2qdPn245cuSIt++BAwfsvffes0qVKtm1114b9PH0Hum1I339PiQ1fswWpuMEAAAAkEklO+AWt+t/Ge+0DLwVLClzrYx1/vz5bcuWLXb++edbzpw542Wj3333XZfpnjBhghUrVswttWrVirXPyZMn7fbbb7f69eu7rPbBgwdd5/Nbb701aNCtYF9jvbXvTTfdFPbXi7RH0A0AAAAgsgF3hAPv8uXL+79WpltLXN9//72bQkzzdl9xxRUJPta6devs008/tePHj7tAWsG7BMuCS6FChWzbtm123333Wb169ax06dIheU2IHozpBgAAABD5gDsKxnj/+eefrsw72HLppZfasWPHbMCAAf51Dz/8cLzHWLVqlbv1AnMv2E6ofFxB99ixY11DNpW3M/o34yHoBgAAAJBqChYn3zfZfKdTEXD7H8zc47jHS8Mg1MtKP/HEE/brr78muiSUvfaCbgXpSdWwYUPXlG3OnDk2ZMiQkL0eRAeCbgAAAACppkxu61GtLSaLOqKl9sHMPY57vDRsMOY1zSpatKgb161FY7JV+r1+/Xr/Oi2SPXv2eI8xb948y5Ytm9WpUydZz60u6WeddZb179/fdUpHxkHQDQAAACAkNAZbY7FdoJzSWDlCXczl9OnT8dZ99dVXtmDBAitXrly8bSdOnIj1/Y4dO2zZsmVuLm/Nx50cZ599tr355ptu7Pg555yTgqNHtCLoBgAAABAdgXcEA245cuRIrO93797tAmF1Iq9Zs6YrHVejNFEQni9fvlj7f/PNN64cvlGjRkl+zsDy+VtuucWqVUv7141MHnTr6lGfPn3chPMq99CceB07dnQd/jyHDx+27t27u05/KuUoUqSI6xSoRgcAAAAA0kHgHeGAWzRt2E8//WR33323bd682Zo3b+7m2R4+fLjb/sgjj1j16tVdw7PZs2fbs88+G+v+mhJMU4ppe1KNGjXKla9rqjJkTFEfdOvE1kmuqz4jR460Dh06uFb9jRs3dm345bbbbnP7tGjRwt566y23Td/fc889kT58AAAAIFNKVuAdBQG3EnYbNmywtWvXuqRf1apVXeA9depU//jsWbNm2YgRI9yttnft2jXW+GuNyW7btq1dcMEF8R7fi13iWr16tb399tu2c+fOML46RFKML4p70h86dMi10O/Vq5c9//zz/vXvv/++denSxV1dOnr0qLVq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AELunNq17erx463p6NFWpGbNdBl8q1x7165dVrp0aRc8r1271o4fP+4fJz1ixAg3nnvbtm329ttvu/UnT560GTNmuK81n7cyz+pOLuEuMdcFgauuuspNQVa8eHF76aWXXMYdkUXQDQAAACBsil1ySboNvufNm+fGbCuTPWrUKDelmOa/DnTbbbfF6hC+ZMkS27t3r91+++0u6+wt6oaekqBb9/Pm8w6keb0LFSoU9D65cuVyU56tX7/ePvvss2Q/J0KLoBsAAABA2KW34FuB7lNPPWVZsmSx++67zz8uevLkybH280rGve1eYN25c2eXdQ5c1q1bZxs2bEjWcVSrVs01Zdu3b59/nQL8P/74w21LyP333++awA0aNChZz4fQI+gGAAAAkGaiOfj+9ddfbezYsW4s9IUXXuiy2gpa69SpY9dee63VrVvXBg4c6MZOv/POO9a7d2+76667rGLFii7I9oLuPHnyuO7mgVq2bOnfnhw9e/Z0Je7qhP7aa6+5cnZNZaay8R49eiR4v3z58tmjjz5qK1eudI3dEDkE3QAAAACiIvi2mJiIHpPm0lYQPXLkSDcee86cOf7AVlNvqUz8gQcesGnTprkmairdVrCtZmqaXkzN1X7++Wc3d7emCQvUokWLoJnyM1GH9Pfff9+VuSsA13htdSf/6quv7KKLLkr0vl27dnXl6S+88EKy3wuETowv2MRymZQ6ChYsWNCVbujkBAAAADIDdejeuHGjVahQwY0HjoR/vv/eVo8YYTtXr7Y2c+darrPPjshxAEeT+PuQ1PgxW5iOEwAAAACSnfk+efiwZcuTJ9KHA4QM5eUAAAAAogYBNzIagm4AAAAAADJr0H3ixAnr06eP6wioevqSJUtax44d3QT0wSavV0fB/v37R+RYAQAAgPSMdk+Ahfz3IOqD7kceecSGDx9ut9xyi+si2KFDB/viiy+scePGdvz4cf9++vqOO+5wc9gBAAAASLps2f5r9XTy5MlIHwoQFYlfr2N9KER1I7VDhw7Zu+++a7169bLnn3/ev75KlSpubrxFixa5Oeq2b99ubdu2ta1bt0b0eAEAAID0SMGFFnVj1tRXQGbOcu/bt89N+ZY9e/aMH3QfPHjQXW3TxO6BvDnvvCtyo0aNspiYGFu6dKmVLl06IscKAAAApFf6LH3OOefY33//7T5r582b160DMlOwfeLECRdwKw4tVapUyB47qoNuTfp+8cUX27Bhw6x+/fpuvPaaNWvcmO2yZcvaJZdc4vZTWfnTTz9tWbJEfbU8AAAAEJU03/CRI0ds586dtmPHjkgfDhARuuikgDuxebczVNAtU6ZMsebNm1ujRo3862rWrGnTp0/3T1ReuXLlFD32sWPH3OJROQ0AAACQGSmzXaJECZfx9sa0AplJ1qxZQ1ZSnq6C7nfeecdWr15tl112mVWvXt19rWZp/fr1s/fffz9Vb8qLL75oAwYMCOnxAgAAABlhfDeA0IjqeuxffvnFBdcKjL/99lvXVO377793wfIHH3xgb7zxRqoeX1ORqWbfW2jEBgAAAADINEH3jBkz3ID2xx57LNb6bt26We7cuW3u3LmprtdXrX7gAgAAAABApgi6vUnJA+fj9r5XV3PmEQQAAAAARLOoDrorVqzobseMGRMrEB84cKBr7lC7du0IHh0AAAAAAOm4kZq6llepUsV69Ohh48aNs5IlS9r69ett48aNrrPi448/HulDBAAAAAAgfWa6NSXY/PnzrUuXLrZ7926bPXu27dmzx1q3bm0zZ860QoUKRfoQAQAAAABIUIzPGzgNN093wYIFXSdzmqoBAAAAAFIbP0Z1phsAAAAAgPSMoBsAAAAAgDAh6AYAAAAAIEwIugEAAAAACBOCbgAAAAAAoj3o1lReb7zxhuvcllQHDx60LVu2hOoQAAAAAADIuEF3165dbdeuXUm+z/vvv2+VK1cO1SEAAAAAAJAxg+78+fObpvzOnTt3ku+TK1cutwAAAAAAkBFlS87Ohw4dskWLFlmePHlccK0g+9ixY65MvFGjRhYTE2NZs2a1wYMHW968eS179uxu3cmTJ+3w4cPWpUsXW7NmjTVt2tS2b99O0A0AAAAAyNCSFXT/+eef1qJFCxdIB/ICay/o7tOnT6x9FJzr++uuu84F2adOnbJ8+fK5fbNlS9YhAAAAAACQscvLn3jiCRdId+7c2Tp16uS+dg+WJYs/2O7du7f16tXLfT106FD/fb3yc2XBAQAAAADIyJIddCuofvnll93XCqp79uwZa7sXgCsY1yKPPvqof70XbMfNlgMAAAAAkNGkupEawTMAAAAAAGHuXg4AAAAAAGIj6AYAAAAAIEzC1jr8iy++8I/jHjduXLx148ePt8WLF4fr6QEAAAAAiLgYnxcFJ8G6deusWrVqbsovdSpfu3atC6K9dTly5HDzbxcpUsQ/1tubLsy7DaR1xYsXt23btlk02L9/vxUsWND27dtnBQoUiPThAAAAAACiVFLjx5CXl3sx/MCBA+355593gfb7778fa51o3T333BPqpwcAAAAAIOOP6W7btq1bxJs6LO66hg0bhuvpAQAAAACIOBqpAQAAAAAQJgTdAAAAAABEY9AdtzEaAAAAAABIxZRhapTWs2dP9/VLL73kb5wWNxAfM2aMf9urr77qX3/69Gl3q27nAAAAAABkZCmap/uVV15xt++99567VUB98uRJF0jrVgYPHuwPurt37+4Puo8cOeJud+3aFZpXAAAAAABARgi6S5cubZMnT7bcuXNbrly5XNb6xIkTdvjwYbeIvn/22Wctb968lj17dheEHzt2zC2av/vff/91wbiCbu1LxhsAAAAAkFElK+hWIN2yZcug27Zv3+5uFUg/9dRTCT5GrVq1bNmyZVauXDmbM2eOP/MNAAAAAEBGk6Ly8mCU6VYG2ysvT0i+fPmsdu3a/gD96NGjoToEAAAAAAAy5pRhWbJksUaNGlnOnDmTfJ9OnTrZmjVrQnUIAAAAAABElRhf3Pbjmdj+/futYMGCtm/fPitQoECkDwcAAAAAkM7jx5BlugEAAAAAQAiDbnUvX79+vb+JWnKtWrUqNU8PAAAAAEDGDboPHTpkVatWtX79+iX7vmq4duutt9r999/vGqoBAAAAAJDRpKp7uaYQ05Dwn376yV599VUrVqyYlS9f3s4991w755xzEr3vc889Z+vWrXNThmnRnN4AAAAAAGQkqW6kpq7lMTExLvjWreess86y+vXrW4MGDaxJkyZWp04d/7ZJkybZjTfeaFmzZrW5c+fa5ZdfbtGARmoAAAAAgFDGjyGZp7tNmzYuiN62bZv99ddf9vfff9vPP/9sU6dOtcmTJ7tg/KKLLrJHH33UZbQ7d+7s7jdy5MioCbijicrtyfwjOThnAAAAgOgUkqC7bNmybnx2sDHfymSPHz/evv76a3+wnStXLhs9erTddtttoXj6DOX333+35s2bu/dMlQLAmWh4hs6Zm266ybp27RrpwwEAAACQ0kZq8+fPt/fff9+lz5M65lul5Zdeeqnlzp3blaBr0djvRo0aJeepMwW9ry1atLA9e/ZY/vz5I304iCKaKUBLMNmyZXPlLKokmTJlSpofGwAAAIAQBd3vvvuu3XPPPa5J2pVXXmmDBg0Kut+WLVtszJgxLpOtALtHjx4uMOjfv79roLZp0ya7+uqr7eDBg8l5+gzvrrvucu+NxrxfeOGFsbadOnXKNas7//zzLWfOnFapUiX3fSqH5KfqOZRh7du3r2ucp/2LFClidevWtTfffDPBADGcdM5pKENSFr3Pga973Lhx1rRpUytUqJDly5fPGjZsaB999FFYj3fDhg3u4krjxo0T/D3q2LGjFS1a1PU/0Htcr149N2wjkMrKP/30U6tZs6a1b9/e/vzzz7AeNwAAAIBk8CXD888/72vRooWvePHivpiYGP9y1lln+Tp27Oi76qqrfMWKFfNlyZLFrc+WLZuvSZMmvnfffdd39OhR/+P07dvXbb/jjjt80WTfvn2KLt1tWvv444/dcw8aNCjettOnT/s6dOjgtmupVKmSr0CBAu7rrl27huT5k/scx44d8zVo0MBtz5Url++8887zFS5c2H//tm3busdMS19++aWvZs2aiS7e8f3111/uPkeOHPE1a9Ys1usuUaKE//tbb73Vd/LkyZAfqx7zsssuc8/RqFGjeNvXrVvnK1q0qNueJ08eX7169XzlypVz3+t3R79TcW3YsMGXN29eX6tWrUJ+vAAAAABSFj8mK+gO9NNPP/leeeUVX9OmTX1Zs2Z1gYCCbS0KYiZPnuzbvXt30PueOnXKd/nll7t9p02b5svsQbcC2PLly/tq1aoVNMB744033HEpCJ43b55bd/DgQffe63331qVGcp/j1Vdfdftff/31vgMHDvjXz5gxw1ewYEG37fPPP/dFky+++MId13XXXedf9/jjj/uD7R9++MG/ftKkSb7cuXO7bc8++2zIj6Vfv37+wD5u0K2LFXXr1nXbOnXq5NuzZ49br3OjW7dubn2+fPl8+/fvj/e4Q4YMcdtnz54d8mMGAAAAkIZBtyxYsMA3cuRIF4ArQ1u1alV/8H3DDTckeD8F3T///LMve/bsvvPPPz8smcT0FHSPHz/ePe/UqVPjbVOFgKoHtP29996Ll9nUe924ceNUPX9KnkMXTbT/b7/9Fu/xnn76abftoYce8kULnWPVqlVz1Rdr16516/bu3esPrJcsWRLvPsOGDXPb9N6E0rfffuuOQ4FzsKD7q6++cuuvueaaeNUCeh3nnHOO2679gv0sS5cu7WvevHlIjxkAAABAyuLHZI3p1nRgaoo2c+ZM9/1XX33luiVrXGqvXr1s8eLF1rNnT7vgggvcPN0DBgxwU4YdO3YsVrOw8847z3766Sfr0qWLG7eq6cUyM40nrlixol1zzTVBm9f9888/VrhwYevQoUOsbbqPxiEvWrQoyc3tgknJc/z777/uVmP24zr77LP901hFC433/uWXX1xPgipVqrh1Ol81Lr1atWpurHRc1113nbvVe7Nr166QHIf6GGjctca8Dx8+POg++t3p1q2b65mg8eeBNLa7TJky7uu9e/fGu6/Gfd99993ud1RT9wEAAACIrGQF3QsXLrRVq1a54LBOnTp2+PBh/wd9TQyu9Wq2pg/8w4YNs48//tiuv/56F5ip4ZYCl/fee8/++OMPO3nypAvQJ06caDVq1LDMShck9L4qwIsbYMkPP/zgbtUFPtg8zLoIovfyu+++S/ExpOQ5vMBvxowZ8fb/5ptv3K0ae0XLe9yvXz/LkyePa+bn8RqO6SJQMJraLtTUYVwN1HTuqxlhMFdccYW98sorQd8/XcjQtHJSokSJoPfX75yC+lmzZoX46AEAAACENejWXNwKVJ5++mmXcVNXZVG2sFmzZrZixQoX3Ki7uaYw8gJy7ffiiy9ahQoVXPZOQbg6m+t7zS+cma1bt86OHj0aNNPqVRdI3G7mHnUYl8Bu3MmVkue499573e1DDz3kqhl00WXz5s32xBNPuEBcQfntt99u0eCDDz5wr1HzxOvc9KhTuWiKtmDWrl3rbnUfVQGklrrSa8q9Sy65xJ599tkUPYamBFPFgaoJGjRoEHQfBeu6wKALZAAAAADSUdAtmhZK2cKlS5f6M7Oaj1vTTGnaIpWbB1Jgs379erdNgcLOnTtdyXKWLEl7amX2+vTp4+6jzGPJkiXdNErbtm2Ltd+XX35pF198sQs2FDymlyyfF8h6gW1cXjWBXndCpciydevWFB9DSp7jlltusbffftsFrNdee60VLFjQypcvb0OHDnWZWpWse0FtJKlvgaY90/n2+OOPx9qmYRCyZMkSd8EgLlVryM0335zq41Cpt0rbNRTjww8/DFpRcCaqNnjmmWfc13otuqAVjH4vdUErNRdiAAAAAEQg6FaG7vLLL3dlsZpne/z48f4ATJlEjVGtX7++zZ071wUIgUFAu3bt/Nk9BezKiCbFI4884h5XzzFy5Eg35viLL75wcxsfP37c7TNhwgRr06aNK6lVRl3zRrds2dJWr15t0e7AgQPu1qsMiMubI1sXE4LJnTu3u03NnOcpeQ4F6spoez+DQLogMnv2bIsG06ZNc2O5Vb5fuXLlWNs0lrtVq1buwo7OHw178MrRdaFHPQvkvvvuS9Ux6P3t1KmTG17xxhtvJHiB5UxUJaJeCLp/9+7dE91XF0FUfQAAAAAgsrIld+yvAtu4FixY4A/cvKyzxnCr0VPgOGU1ripevLgLzBVIKxBS8JyQQ4cOuTHiatL2/PPP+9erEZaasKm5l8YbK7uuQERjo5VJ1PeNGjWyxx57zObMmWPRzHt/At+/YOOKvcA3rmzZsvlL/FMqJc/x4IMP2meffea+1hABlTrrAsJHH33kgldldRX0JfXiSrh4zcriVmAElp4rk60+BKrWKFeunLto4GX/27Zt68+Ip+YY9PhqoKYlJXShShetNKxDF7vONN5cv6dJrSYBAAAAED7J+lSuclWVyapEXONKFVh77rrrLhdka7vGKCtIUNfn3bt3u6ZQWqeSYzXrUtBQqlQp11QqMcqsKmOeL1++WOu9sloFg/PmzbMdO3b4u6i7F5UliwsK9Xw61mimjGRi44q9Em29xmC8bGZgZUFyJfc5NK7fq3J45513XDZZ54Iysb/99pvLGsvAgQNTdVyppeBZwa7K5hO6uKPXroy9Ls7o4o56EzRs2NB/fr3wwgupOoY1a9b4h0coy50S+rmo0kMZeR1PQuP/A+l88s4tAAAAAOkk6C5durRrgva///3Pld56GVAFKqNHj3aBl7aPGDHCpk6d6sZ/q/xYwYyCDgVkKk1XRlVZOwUkn3/+eYLPp8fSOG2NrVU2XZnWZcuWuTHlZcuWdeXuKrcVBfOB1F1d2b4ff/wxwcdXGbECysAlrXmlxhr3HozXJTyh8bm6sOGNq0+p5D7H8uXL3Xtbu3ZtNz1VoBw5crix3hqzrAsuqRlrnloaO63jVMB6pqyvzp/nnnvODWHwpuJSWbk3vVhK6dzVBSdlzlUNUKtWLf+iIRDe++mti9urQIG2MvGaWk9DNNT1/Ex0oWPjxo0pLmMHAAAAEKGgWx/m1cRMZdtvvvmm+17l0cp2ar0yea+//roLuDR9mDLUCrzHjh3rz1ZfddVV7ladrdWgy2tWlVi3ZgXfKhfXmGMF2gr+NG5cJbZehlhBfSBv/ujEmklp/Leygd7iBZ9pSePPNZ5bpffBKLANnNYrLlUUeBdEUiq5z+GVwuvYg9HP3OtsH2w4QlpR6bioU35S6WKRXq83z3xqeZn+7du3u27igcuvv/7qH0bhrYs7Rv7+++931RyaVk+/R0mhC1N6HO/nCgAAACCdBN0KgBXIqCmUynaVhfMyxqNGjXJZ6W7duvmzz1p/6tQpN45VAYay4Roz62VEb7rpJtc52puaKRgF9GqIdtlll7lx3HXr1nXfa2oyPb8X1MVtAuZ972Utg1HZr8rkvSUSWVmN0W3atKmrHAhWiq3ASQGgyp9Vuh9I761+Dt5+KZXc5/AuTsTdN3BYgMr69TPQMIJIUFWFgliVluucSQpdTNB5JarECMU0YWPGjHGPG2xRNlp0Qclbpw7wnh49ergpxnQBSedHUqsZJk6c6C58JTQPOAAAAIAoDbqvv/56Vw6uQEAl4iqZVaCg4FpBtIJq8UrGVVbrNd9ScKlseKAWLVq4LujelFRxqeu0giBlHL/99lvXVO377793GWoF/8qsK7BT6bCCw0BeNlbHkBCNDVeWOXCJhDvvvNMFsJpWLS69b7pooQsMmiYqsOGaSqHVNV5TsWmarpRK7nNoSjZlsvUzUdlzXBpeoEyrMsxnavgVLhpnLt747KTQsAmVeqtxmjLMkfTSSy+5Xgj6PVPA7V2sOhM1s9PvocbVJ/R7BQAAACAN+UJs1KhR/q+nT5/umzJlSoL7Hj582C0JGTp0qKI/3759+2KtP3HihC937ty+66+/3j2f9vnjjz9i7fPXX3+59cOHD0/yset5gj1fuJ0+fdpXo0YNX8WKFYO+H9u2bfMVLVrUHVvLli1948aN83Xt2tWXNWtWt27QoEHx7lOzZk23LFu2LEnHkNzn+PLLL305cuTwVapUyTdixAj3s54wYYKvQ4cO7j5av3Pnzlj3efPNN90xdenSxRdurVu3dsf9xhtvJGn/Q4cO+UqXLu3uM3fu3ET31WvX62jRokWqjnHjxo3u+Ro1ahRr/Z49e3y5cuVy2woWLOj/WcZdnn766XiP2bt3b19MTIxv5cqVqTo2AAAAAKGJH5M1ZVhS3Hvvvf6v1WAtMQlNUeXxMq5xx7nqe5Via7nooovcOk0fVqFCBf8+yohLiRIlLNppXLymlVI5sBplKVMcSK9Bc5OrIZjGHGvx3Hrrra4MOS6VVidn/u7kPoeme1NWWNnYIUOGuEy9Xoca3GnMv0r345Zne+OavW7p4aKMvcZBJyfT/fLLL7uu7Hr9iU1jJ2oQp9eR2NCF1Pj555/9FRoa9uD9LONS47VA3333nft5aCaBuNsAAAAAREaMIm+LUprv+4YbbnABUffu3d06He5TTz3lpk565plnXPm5gm2N3dU83V5H9VatWtn06dNdoKfGXkmh7uVqqKZAJxKl5irtVmM5lQd37tw53nY1jXvttddcoy8dpwJEb3quUAn3c6hjt+ZW98ZOIzTU9VxNBjXMY+XKlUwXBgAAAIRZUuPHiATdGn+tccRnomyfMnbr1q1z44gVWGtqLTWgUmZWY76VNdUYczVZ09RKmuZpwoQJbtoqNXxTI6ukinTQrcy9xrgraz9p0iRr3bq1ZSQa/61mbBs2bIjY+PmMSOetLmQoU69zp2bNmpE+JAAAACDD25/E+DFZjdRCRUGyguhZs2Ylup+acM2fP98F1CrpnT17tsvEKhhVR22vTFnltIMHD3aZcXUCV8CtfZSxTU+Upddr0HzMGXG6px07dth7771HwB1iej9V2aFzh4AbAAAAiC4RyXRrrm5NT6VpjTT2tl69eiF53H/++ceN5VZGPCVBa6Qz3QAAAACA9CHNy8vHjRvnAl49mabiUlMtlZGrRFwHoemmNC1VYLb77rvvdmO2Na9wNCDoBgAAAACEMn4MWfdyNW/SvNmBFHh74h6ESsI1/7bGawMAAAAAkBGlKOhes2aNXXDBBfHWK8hWxtujcdfjx4+3d955xz+1V6A8efLYgQMHUnIIAAAAAABkzKBbzbAUeGtqq9KlS8fadscdd/i/1jzGCro1z7MCbAAAAAAAMpMUdy9XJ/Hq1avbyJEjQ3tEAAAAAABkEKmaMkyl4Y888ojrPq75swEAAAAAQAgaqWn89sKFC6179+62dOnSWE3TAAAAAABAKruX169f35YsWWKvv/669e7d244cOeK6knvWrl0bimMEAAAAACBdCsmUYQ8//LBt2LDBhg8fbmPGjIm1jQw4AAAAACCzSlbQvWfPHjvrrLMS3K4Ae8GCBf7vP//8cxeIAwAAAACQGSUr6G7UqFG8THZcl19+uf/rH3/8MeVHBgAAAABAZgm6Fy1a5ObmbtiwoVWqVCm8RwUAAAAAQGaaMqx48eJ255132okTJ+ynn35y63bt2pWqJz958mSq7g8AAAAAQIYIuitXrmzvvfeerVq1ypWQ+3w+q127ti1fvvyM9w3WTO27776zP/74w3LmzJn8owYAAAAAICN2Lz///PNds7Qnn3zSBg8e7MZ5f/DBB26bAvEaNWr49929e7e7rVu3rmXJkiVWhvv333/3Px4AAAAAABlRjE+Rcgp9+OGH1qlTJ/e1xnmvX78+WfevXr26ffLJJ1a1alWLBvv377eCBQvavn37rECBApE+HAAAAABAlEpq/Jiqebpvv/12O3jwoN1///0uc/2///3P6tevn6T75s+f384+++zUPD3SM13rUU+AgwfN8uUzK1xY4xAifVQAAAAAED2Zbk/Hjh1diXmpUqVsxYoVds4551h6RKY7DezdazZ2rNmIEWYbNvz/9eqI37WrmSonChWK5BECAAAAQMjix5AE3QcOHHBjuYsVK2YzZ850Wez0iKA7zKZPN2vXzuzw4f++Dzz1vCx3njxmn39u1rx5ZI4RAAAAAKKlvNyjIHv8+PFWpkyZdBtwIw0C7lat/gu0g13n8dYdOfLfflOmEHgDAAAASPdCkunOKMh0h7GkvHTp/wLq06fPvL863efObfbnn5SaAwAAAEjX8WOS5+kGUkxjuFVSnpSAW7Sf9h83LtxHBgAAAABhFdKgW/NyV6tWzd57771QPizSMxVSqGlaSrz2WvBSdAAAAADIyEH3b7/9Zk888YS7DRQTE2Nr1661XZoKChCdC+pSntzgWfvrfrt3h+vIAAAAACA6g+4dO3bY8OHD7e+//3bZ7alTp9rOnTstZ86coT9CpG+ahzs1DhwI1ZEAAAAAQJpLUffyXLlymfqvKchev369XXvttTZr1ixr1KiRf58pU6bYSy+9ZHny5LHs2bPHe4zTp0/bsWPH7NChQ7ZkyZLUvQpEr3z5Und/uuEDAAAAyGxBd9asWV0puYJvfa0AXMF1FnWd/j/KfC9cuND/vfbXft5t4HpkYIULm1WqZPbHH8krMdd5UbGi2dlnh/PoAAAAACB6G6kpg+1lsYNlsxVQz5071/r06eO+nz59ugu4H374YXvhhRfc9i+++CI1h4Bop+C5a9eU3feRR/67PwAAAABk9KBbY7fr169vq1evTtYTqORcHc2lYcOG7rZy5cp24YUXuq8vv/zy5B0x0p9Onczy5Plv/u2k0H7av2PHcB8ZAAAAAERHeblKxZcuXWq1a9e25s2bh/eokLEUKmT2+edmrVr9F1AnNl+3tiu7PXHif/cDAAAAgMyQ6S5VqpTdc889LkutbuVAsuhCzZQpZrlz/xdUxy0b99Zpu86vZs0sWpw4cSLSh4B05uTJk7F6VwAAACDzSnLQXadOHRs1apT9+uuvNnny5PAeFTJu4P3nn2bDhv3XJC2Qvtf6v/6KqoD7999/t/PPP58O+0gyzcxwxx13WI8ePSJ9KAAAAEiv3cuV9RY6jyPZVDKuBmlqrrZ793/zcGtaMHUpj7Lzad++fdaiRQvbs2eP5Y/w1GWnTp1yswPwOxf99HMqVKiQDRkyxCpVqmQPPPBApA8JAAAA6bF7uUonn3jiCfvggw9cIEAwgGTR+aLpxMqX/+82Cs+fu+66yzZt2mSTJk3yN/4LDIJfffVVlwXXfPUKrvR9KEuK16xZY23atHEBXLZs2Sx37tx29dVXu94KZ6KGhwUKFLD+/ftbpMybN8//t+FMi/YN9OWXX1rr1q2tSJEi7nXXrVvX3nzzTVe2HSq6mKKZFHQRUdMfqprnm2++SXD/LVu2WKdOnaxkyZKWI0cOd79mzZrZzJkz4+2rY73mmmvssccesx9++CFkxwwAAIBMkun2aAqwGTNmuEDjpptusp49e4buyIAImjBhgk2cONEGDRrkOvAH0vl+55132vjx4933Crh37Nhh3bp1c0H6a6+9lurnX7x4sQvoDh8+bAULFnRd/jds2GCzZs2y+fPn21dffeWCumC2b99u1157rR1QFUEE5cuXz2rWrJnoPhqucvz4cRfEBr63Y8eOdd+XLVvW8ubNa8uXL3fLJ5984oa3aF1q7N27182moAsbmu6wQoUK7kKFAn397G+88cZY+2/evNkuvfRS++eff9zPo2LFivbnn3+6gFvLsGHD7NFHH42V7f7www/tggsucBdvVqxYYVmzZk3VMQMAACCd8iXToEGDfDNnzvTFxMT4+vTp4+vQoYP7WkuWLFnc0qlTJ9+YMWPc1/LBBx+4r48ePer2Gz58uG/y5Mlu3a5du3zRYt++fUpTuluEyZF/fb79vyV/0f3SyLFjx3zly5f31apVy3fy5Ml429944w13nhQoUMA3b948t+7gwYO+pk2buvPbW5dShw8f9pUpU8Y9R69evXxHjhxx63V76623uvU6vtOnT8e77++//+6rVq2a20dLv379fNFq5cqV7v3S+3zq1Cm3Tn8bdNxFixb1zZo1y7/vwoUL3Tptu+uuu1L93DfffLN7rAsuuMC3efNm/3tXsmRJX5EiRXw7d+6Mtf91113n9n/++ef97/vx48d9r776qlufM2dO37Zt2+I9z+eff+62v/fee6k+ZgAAAESXpMaPSQ669YH/2muvdYFy9erV3e3PP//sW7t2rfvgrA+Vbdu29Qff3j6BQbeCGYLuTOzEQZ/vw+w+3/8s+Yvud+JQmhzm+PHj3XkwderUeNt04ahYsWJBA6kNGza4c7px48apev7XXnvNPf59990Xb5t+X7Jly+a2r169OtY2Balnn322L0eOHL5LLrkk6oPuZs2auWP0gmsF3qVLl3brPvroo3j7f/HFF26bXv+BAwdS/Lw//PCD/3H09yuQLhZqW//+/WNdBNG+uhAS7EJHgwYN3H0+/fTToM+nn8X555+f4uMFAABAdEpq/JjkMd0rV650peQaw9qrV69422vVqmWfay5mMzfm8ZdffnFfa3qxH3/80X3tjZfUNpWKikozVV6KTCBbXrMil2pAdzLvGGNW5DKzbHksLYwbN86VDwcr31Zpt0qMCxcubB06dIi1Tfdp2rSpLVq0yDVhSymVqz/yyCP2zDPPxNt29tlnu/Jmr0Q60HPPPedKpfV7qgZw0Wz27Nn+49R7JmvXrnUl23p9ccu7pVWrVq5sW+O6161bl+Ln/vTTT91ty5YtrUqVKrG23Xrrra5pXuAMDRr7recsWrRo0N4V+pkkNrXcgw8+6F7bd999l+JjBgAAQPqV5KC7Xr16NmfOHBcs16hRI9F9u3btaoMHD3bjMzW21Gsw1bZtW7f9nXfesWeffdatu/32223nzp2pfyVIH2o893+Vz8nhM6vxrKWFY8eO2cKFC+26664LGmB5TbGaNGniAty4NO5XAVpqAiwFg8OHD3cXr+JSwK8gUEqUKBFrm36/fv7553hj0KNR79693furvxMeBdyi8dVqHBeXxkQHe8+Ty/sZasx8XGqKp3HoGoN99OhRt07N3NRoTe/ttm3bYu2/f/9+N/5eEhq/rr+BuligiwwAAADIfJLVSK1+/fpJ3tebo1ZZcX1QVhfmwCBGAbcy3GoUpQ+0yCSKNTYreoXZzm/NfKfOvH9MVrMi9f+7XxpQBlXBli4yBfOX5hE3i9fNPDBLLWqoFg4fffSRmwe6evXqVrly5VjblB1PD5Tl1sU7XVwIfB/VpV28iwpx6T3VRREF33Ez1MmRlJ+hqhXUrfy8885zTd7U3E0dyfV3TLeq+FFju8cff9xdNFQDtmrVqgV9PGXC9TirVq1K8TEDAAAgk3YvDyypDDaVjwLvjRs32qhRo1yQ8PTTT6f26ZBRst2zmyRtXwXmaZTlDgyWveA5Ll0kkmBZaDnrrLPc7datW0N+bMqqeplhZYrTK81fLer2HkiBtC7QqVP4kiVL4l3kU4dwUUm6OqOnVHJ+hgqWZejQoe5C4VtvvWW1a9f276sLiepOPmLEiESfU+dTuC7EAAAAIAPO0+2NwVagfeTIEfe1dxuXPihr2pwBAwZQXonY2W5lsROj7UUbpFmWW7xptjTHdTDePNx58gQfX645peXgwYMhP7YnnnjCTQem6cPuuOMOS4/Uz2HatGmuB8SVV14Za5vGct97773ua70+9ZEQZfYV1HqB7f3335+qY0jJz1BZ72+//TboY6k6wutRkRC9Nl00AQAAQOaToqDba+CkMlxlhR566CErVqyY+3AcN+ut0kyVxGpMY6dOnVzQALhs95nKy9M4yy3eEAgvMIvLGwrhBWZxeWORE7oIlVJqUvjee++5DK/msA423jw90Bzmem/V9yEY9X9QwK2scJ06dVyGWOXZKp3X/ZRlVll6aiT3Z6i/cxqXrfJwjfnu2LGjvfjiiy7418/Dm1M9WFDu0d9G/Q0EAABA5pOiT4H68NiwYUMXUGtcqTJQGuPoNR7ybj0a69i+fXvXBOrrr79O8vPog7eCi8QW7yJA9+7dXfdofShWZl3N2pCOs90RyHKL1xk8oXHF3rjjHTt2BN3uZTODDbdIqfXr11uXLl3c1wq8Eyp9j3Yajz1hwgT3O9quXbug++hvygcffGDLli2z/v37uw7yzZs3929XeX1qLzgk92c4adIkl83Omzeva5Cnix4q79fYbnUlVwm6XtugQYMSfE6dT965BQAAgMwlRWO6NcWPN81PIGWilM1W0BtX3759rXz58nbPPfck+Xk0Rc/48eODblP3czl06JBdccUVbuy4mhrpOSZOnOjKVNVt2BsHinQ2tjsCWW7xAloFuupEHleZMmXcbULjc3VhSRSghYICQDXv0hRkKi+/+eabLb3SBTddINPrOVMAqiy3Fm8aL2/KsGB/d5JLP0NlpfUz9MZsJ/Yz9DrRK7Mdt0N5qVKl7OWXX7brr7/ePzViML/99lvQ8wkAAAAZX6obqQXSh9TRo0cnGMwEm3f4TI+nDHlcS5cudR9iFVwrqFZwrXl19aFclBVUN2GVsqr0/dxzz03hK0JEOpmnccfyQDpXNJ5bJcNx5+EWr4mWN+1UsHNTSpcubaFoUqggW+OgVb780ksvWXqmDLbcdtttSb6Pfrc1r7YarHkN2FJLP8NPPvnE/QyDTRsW92foDTVI6O9I1apV3a03vCYuTTP2xx9/uPm6AQAAkPmky0GG6oreoEEDlzH75ptvXObKC7hF5acKVvRh2WvGhHQ0tjtCWW7RdFTKpn711VdBS8QVsKmPgeas//vvv2NtO3XqlM2cOdO/X2rosRT0T58+3Q3dUFm2ji29UlMy/a4qeE7OmGxdqFMwqzHdqZkmLNDVV1/tbj/88MN421RGrgy4yty9ih2vuiHuz9ujKpvEgnKVp4tK5QEAAJD5ZAnFdGFpSZ2PNYfuCy+84L5X2a3K0BOaFiixMl+Nw1T5buCCCI/tjtBY7kCak1kBljKscSnwVfWFzn0NZwhsuDZy5Eg3B7Qaf2nIQ2qo0ZgC7SJFitiUKVP845DTq7lz57pZD3QxIqml9/o9VzWLmjQmt0omMRdddJGbo/unn35y47I9+llqGIwoA+41WvO6rOtY4v7N0300nZho6rBgF090XlxyySVu2kQAAABkPqkqL1dwoQ6/6gbsLfqgeqZbLSVKlHDNlNT8LDlUYquxkV5QozGZKi1XV/TixYv791P5qJ6vXr16CT6WOhBrKjNE0djuCGa5PRqaUKNGDXvqqafshhtuiNfluk+fPvbxxx+7oFhTjGnMsRp/vfHGG257z549XaY0kKbIknfffdc/Vjkhas7lBYOq2mjbtm3Q/TTGODXTZymbr2BW81VPnTrVwsmbLlANGJNCwexjjz3mb56W0BRuoum67r77bvd1YuOqA73yyisu86yLGyrfV1Csn6cucKhR5JNPPunf9+KLL3aN09QoTcG4hq/oQsCff/5pY8aMsQULFriqm2DTuOnn/euvv9oXX3yRpOMCAABABuRLhXz58vliYmJStGTJksVXoEAB39q1a5P8fMuXL1da0ffpp5/6182fP9+XLVs2X+3atX0LFy70rV692nfXXXe5/Tp27Jjo4x09etS3b98+/7J161Z3P32NNDbjCp/vf+bzzWjgiwZz58515+nDDz8cdPvixYt9pUuXdudL4HLrrbf6Tp06FW9/b7se90w++OCDeI8bbOnXr1+Cj6FtZ9pn9OjRbp9y5cr5wu28885zzzV58uQk7T9mzBi3f7169XynT59OdF+9p957khyjRo3y5cqVK9Z7qr9LI0aMCLr/119/7WvVqpXvnHPOcX9z8ufP76tbt65v2LBhvpMnT8bb/48//nB/46666qpkHRcAAADSB8WNSYkfY/RPSgP2/PnzW5MmTVzZpUq1VT7qLYl9v2XLFpc10m2vXr38peJJKftVebkyTIHjW7VOnZ2VUfJo7KgyWJrSLKlUXq6uyipZTyyzhjD4d4HZ3BZmTaaZndPAooHKx9WoT80BO3fuHHQaKDXrU+MtnTe33HKLy3imJ2rupWqVhBogZnQaw/3666+7W818cN9996V6PL6oAkLVOFu3bnV9JcqVKxeS4wUAAED0SGr8GJKgW2WqCdmwYUPQeYXVybhjx47u/rNnzz7jc2mMtko6VdqZ0DRgatakUnN1R1ZpqjfWMqkIuiPs5BGzbLFLuSNJjdTUdEtji9UMS2XnGYl+p8qWLWvff/99sod5IGEax62/a5qWTH+PAucZBwAAQMaR1PgxrN3LNRZVnZeXLFkSb5vX/ExBeVIo6FFQndh0Q2rQpHHaeux+/fql4sgREVEUcEu2bNnsyy+/dL0HQpH9jDZqFvfqq68ScIeYqnA0b7eqBwi4AQAAENJ5uj27du1yUb+aEakxkUpzV61aFashlbKIahJVuHDhJD3mZ5995jLdaqKWkI8++shWr17tmhel927PiA66YqWmaRmRKlCCVaEg9bp16xbpQwAAAECUCHmmW12c1e1XpbgaTz1w4ED7/fff3djtQDVr1nRjulesWHHGx1SArnmRGzVqlGiprJ7jsssuCzp1DwAAAAAAUR10q+GZxmKfPn066HY1NNNYRjUP0q0y28r4qKGQplOaOXOmf9/SpUtbqVKlkvS8GhupzHli0w2pMZvKZfU8yqADAAAAABBpyWqkpkBZga3m9W3fvr1raKZGU14jNWWiv/vuOzeWMXDstTLdmvdY83qr/Fu30YhGagAAAACAiDRSO3r0qN199912+eWX27///muDBw9204Cps/OAAQPsn3/+ccG3ysDjNjtTmblKv7dt22a33367JtNN6tMCAAAAAJBupWjKsEOHDrkAWw2mpk+f7ubezpkzp3Xo0MF1DQ9WNq4A/bzzznNzbI8dO9ZlyqMNmW4AAAAAQNTM0y07d+60ESNG2MiRI2337t2WK1cuGzJkiD3wwAPx9v3000/twIEDUdvojKAbAAAAABBVQbfnyJEjrtHaK6+8YpMnT7amTZtaekPQDQAAAACIyJjuhOgJVDZ+5ZVX2nPPPWfr1q2LF3BrWjB1M1dncQAAAAAAMotUB905cuRw3cnVJE3Kli0bbx91Ll+1apW9//77qX06AAAAAAAyT9CtubglT548Ce6TPXt2a9euna1cudK2bNmS2qcEAAAAACBdyJacnW+44QaXsVagnS1b7Ltu2rTJZbQTsmfPHnf7+eef2+OPP57S4wUAAAAAIGMG3epUvnnz5qDbNCXYmjVrzvgYBN0AAAAAgMwiWUG3xmSr2bnKxbNmzerW6fuKFStapUqVbNasWQneV/u1adPGli5dalu3brUyZcqk/ugBAAAAAMgoQbe6lMd16tQpdxsTE2PlypVL9P7NmjWz1atX29ixY+2pp55K7rECAAAAAJC5GqkdOnTI3R4+fPiM+9arV89lvEeNGmWnT59O7VMDAAAAAJBxMt3BqNR86NChlitXrjPue8EFF1jNmjWtS5cudvLkSTfdGAAAAAAAGVWMT6lnOPv377eCBQvavn37rECBApE+HAAAAABAOo8fU11enljZ+QsvvGDvvPNOuJ4CAAAAAICoFragW+Xjapb21ltvhespAAAAAADIWEH3999/b99+++0Z98udO3esWwAAAAAAMptkB92tW7e2pk2b+gPwBg0a2O+//x5vv2zZ/uvR5s3nDQAAAABAZpPsoDtPnjz+TuVdu3a1xYsXu47kw4cPj/3AWf57aIJuAAAAAEBmleygW9N8aZowUaB9ySWX2JEjR+yJJ56wq6++2v7+++9wHCcAAAAAABk/6Fbm2steX3bZZbZ06VIbN26cFSlSxGbPnu2y3tOnTw/HsQIAAAAAkPm6l7dv395+/PFHa9Soke3cudM++OCDUDwsAAAAAADp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ueeS/Lj79++3ggUL2r59+6xAgQIhPGIAAAAAQEaS1PgxqjPdwUybNs0WLVpkCxcuTHCfl19+2QXlPXv2TPSxjh075pbANw0AAAAAgEzRSC2Yl156yS699FK74oorgm4/cOCAvfXWW3bfffdZ/vz5E32sF1980V2Z8JYyZcqE6agBAAAAAJlRugq6V6xYYXPnzrXu3bsnuM/bb79thw8ftkceeeSMj9enTx9XCuAtW7duDfERAwAAAAAys3RVXv76669b8eLFrU2bNkG3a3j6yJEj7YYbbrCSJUue8fFy5szpFgAAAAAAMnWmW9nrzz77zG655RbLmjVr0H00znvjxo12++23p/nxAQAAAACQboPuSZMm2cGDB+22225LcB/N112oUCFr0aJFmh4bAAAAAADpOuhWlrtYsWKuiVowp0+fdoF58+bNKRkHAAAAAESFdBF0nzx50ubMmWONGjVKcJ/ly5e7+bkT2wcAAAAAgLSULoLub7/91s2h3bBhwwT3mT59urtNbB8AAAAAANJSjE8tv+EosNd83Zo+rECBApE+HAAAAABAOo8f00WmGwAAAACA9IigGwAAAACAMCHoBgAAAAAgTAi6AQAAAAAIE4JuAAAAAADChKAbAAAAAIAwIegGAAAAACBMCLoBAAAAAAgTgm4AAAAAAMKEoBsAAAAAgDAh6AYAAIhyJ06ciPQhIBMI93nGeYy0EI3nGUE3AABAFPv999/t/PPPtyVLlkT6UJDBz7OqVava0qVLw/b4nMcIN52/Oo91vkWTbJE+AAAAAAS3b98+a9Gihe3Zs8fy588fb/uuXbts6tSp9uuvv1q2bNns8ssvtyuvvNKyZ88ekeNFdPrrr79sypQptmnTJsuVK5c1adLErrjiCouJifHvkydPHjt16pRde+21tmLFCitbtmyancfRavXq1TZ9+nR33Geffba1bt3aXThAZGzYsMGdx9u3b7d8+fJZ8+bNrXbt2rH20Xr9vFq2bGnLli2zggULWlTwwW/fvn0+vSW6BQAAiLS2bdv6smXL5ps3b168bVOnTvUVKlTIfXYJXGrXru3bvHlzoo+7atUqX/78+X39+vUL6fEuXrw43vEELt26dfPvO3fu3ET3DVy0b1rp1KlTko6pXLlyse43cODARPf/+uuvU31su3bt8j344IO+smXL+rJnz+4755xzfFdccYXv448/TvA+77//vi9XrlzxjqdZs2a+3bt3x9p37dq1vgIFCvguvfRS38mTJ31pcR4H07JlS3eMGzdujMh5fOLECd9DDz0U7z2LiYnxde/ePeh9rr766kR//gcOHPClpUaNGiXpPNZ+ge65555E9//pp59SfWybN2/2dezY0VeiRAl3HpcsWdK9fzNmzEjwPs8//7wvS5Ys8Y6nffv2vmPHjsXad/78+e58a9eunS9a4kcy3QAAAFFowoQJNnHiRBs0aJA1atQo1ra1a9da27ZtLUuWLPbyyy9b06ZN7c8//7TnnnvOZXfuvPNOmz17dtDHVZZI2cwDBw6E/JiVIZXy5csHzTCVKlUqVkaqZs2aiT6eMvjHjx+3HDlyWFpRhjex4zp06JArXY17TN5rv+CCCyxr1qzx7pfajNvevXtdJYN+9nnz5rWKFSu6n+WiRYvcorLaoUOHxrrP3LlzrUuXLla4cGEbPny4XXrppe7+Tz/9tM2YMcO6detm77//vn//KlWq2Ntvv2233nqre6zu3btbOM/jYEaOHOmqN84knOfx888/746jVq1a1r9/f3dOzJ8/35555hl75ZVX7MILL7SOHTvG+/mrikDvYTDBzolwqly5sjtnEqJs8JYtW4Kex/q7otcYTO7cuVN1XJs3b3bn4T///ON+J3Qe62/XzJkz3TJs2DB79NFHY91nzJgx9tRTT1mFChXcz6Z69eruOPv27WsffPCBnXvuue5n42nYsKHbr3fv3vbZZ5/ZjTfeaBEX9vA/HSHTDQAAooEyN+XLl/fVqlUraMaxefPm7jPLpEmTYq3fv3+/r0iRIm7b77//Hu9+WletWjV/lijUGUJlr/S43377baofa+XKlS6zqPfg1KlTvmjx2GOPudf46quvxlqv7HPu3LnDdqyPPPKIe97777/fd/z4cbdOz/W///3PZQu1bfny5f79T58+7Tv//PN9WbNm9S1btixeplH30XLkyJF4z3Xttdf6ChYs6DLr4TyP4/rll1/ce+idnwllusN5Hm/ZssW9L/p57t27N9a2Dz/80D2fqgsC/fHHH269fi/TixtuuMEd88SJE/3rjh496l57lSpVwva81113nXteZa51jorOZ/0+aX3OnDl927Zt8+9/6NAh39lnn+0qGuJW8CxZssTdp3Tp0vGeR+ebzruKFSv6f18iGT8S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uXP791GljUqMHn30UatYsaK1atUqoscMAACAyEl3me6XXnrJLr30Urviiiv86/r162dbtmyxXbt2WceOHe3WW2+1ChUqWLdu3ez06dMJPtaLL77oavC9pUyZMmn0KpBe3HXXXa6hn3oLXHjhhfGC4FdffdVlwXPmzGmVKlVy34eyTcKaNWtcRUehQoVcIKfA7uqrr3ZDKII5evSoy67Wr1/fXSTQea2AcPr06RYJY8aMOWMzRG/R++xRVUFi+3bv3j3Vx6af3yuvvGIXXHCB5cqVy8466yyrWbOma8IYeDEu0LJly6xatWp24403uv0GDhxobdu2defG6tWr/fuprPzTTz91j6chMn/++WeqjxcAAADplC8dWb58uaIZ36effupft2XLFl/27Nl9+fLl882ePdutO3TokK9nz55u3+effz7Bxzt69Khv3759/mXr1q3uPvoa+Pjjj935MGjQoHjbTp8+7evQoYPbrqVSpUq+AgUKuK+7du0akudftGiRL0+ePO4xCxYs6Lv88st9xYsXd9/rnP/mm29i7b9jxw7fxRdf7LbHxMT4zj//fF/hwoX9x9ijRw9fWvvyyy99NWvWTHTxju+vv/7y3++1115z68qXLx/0Pq+++mqqj+2WW27xv5eVK1f2v7da6tev7zt8+HCs/f/9919f0aJFfVmzZvX17dvX9/333/tmzpzpa968ubuP3u9jx47Fus+GDRt8efPm9bVq1SrVxwsAAIDoorgxKfFjugq6O3fu7D4Ynzx50r/urbfeci/06aefjrd/xYoVfRUqVAj5m4bwOXw8dqATKQqeFPDVqlUr1vnmeeONN9y5okB73rx5bt3Bgwd9TZs2dQGvty6lFPCVKVPGPUevXr18R44ccet1e+utt/oDUgX/njZt2rj1derUccGeaPubb77py5Ili9s2btw4XzT54osv3HFdd911sdZ37NjRrf/222/D8rwTJ050j3/ZZZe5YNqzbNky//s+ZMiQWPe577773PqhQ4fGWn/ixAlf9erV3bZZs2bFey49jrZ5FwUBAEjIiUOHIn0IgN/69T7fihXJX3S/zGJfRgu6lb1WNvvRRx+NtX7gwIHuhc6fPz/efVq0aOHLkSNHkp+DoDuy5m+a78v9fG7fgk0LIn0ovvHjx7tzYerUqUErJIoVK+a2v/fee7G2KdhVgNu4ceNUPb+X6VWgF9euXbt82bJlc9tXr17t1q1du9Z9nzNnTt/GjRvj3eexxx5z2y+99FJftNDFjGrVqrnXouMPpCBWFy8OHDgQlue+44473PuhTHVc+plqW2B2WhdUdIFFFzpOnToV7z5eQD5y5Mig50vp0qVdRhwAgGC2f/edb0b79r4Pa9TwHdm1K9KHA7jAWTXRKV0yS+C9L4nxY7oZ060xtZqH+7bbbou1vlSpUu42WHOp7du3W7FixdLsGJE6fef0tSMnj7jbSBs3bpxrgKXx0HHNnz/f/vnnH9e4r0OHDrG26T7qWq1mf2rCllIaH65O/M8880y8bWeffbYbqy179+51t7Nnz3a3eu7y5cvHu891113nbn/++WeLFhrv/csvv9g999xjVapU8a/X7/mvv/5q5513nuXLly8sz/3vv/+622B/H/T+elN+BU5fqPtorLma2cW1detWd1ukSJF42zTe/+6777aZM2fa33//HdLXAQBI3/75/nub2aGDzb7zTtuxcqX5Tp60EwcORPqwAEvtachpHFu6Cbo/++wz9wFZTdQCqVt51qxZ7X//+1+s9d999539+OOP1rx58zQ+UqTEvE3zbNGWRe7rhVsWuu8jRU201B1fgWqwiznqWi1NmjQJOg+zztGTJ0+6czClWrZsacOHD7eSJUvG26aAX93UpUSJEu7Wa9SlQDUYNQqLJnqP1QAxT5481r9//1jbVq5c6Rog1qtXL2zP7zVNVBfyuL755ht3qyZocYNn7/0OpAsEuuih7Y0aNQr6fNdff717TZraEACAwGB756pV/60MYSNWANElXQTdCmDmzJkT9AOtPjxr3u5Ro0a5jsKaq7tPnz6uw7O6ET/55JMROWYkz9Nzn7asMVnd17p9Zm78DG9aWbdunesCnlDQ99dff7nbuN3MA7PUEtiNO5Q++ugjF8BVr17dKleu7Napu7l4wXhca9eudbfqvB0NPvjgA/c+du7c2c4555xY25YvX+5uNSOBurDrtakTuy5mjBw50nUdTy1NMaiLdQr4x48fb7t373ZZ6EGDBtl7773npvt64IEHzjgX9yeffOKqIXQRQTMrJFRZowBeFxhWeR+sAACZUrBg2xeC/9cARLd0MU/3t99+6+bQbtiwYYJTf1WtWtUF3L169XLlnwqYNB2Qpg5D+slyyynfKX+2u3H5xml+PF6w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Dx926zmvkR4paH700Udd+fg111wTbzvndfQh04004/2ie38IAqmf39GjRyNwVEDoz3OVNGooRSCvZyXnOdIDNZgaN26c64jrTYvHuY30rHDhwjZjxgzbvHmzq9xo3769ff/995zXSHf0ObpTp05uDLdmUgmG8zr6EHQjzWhObtF/eHGp2UOBAgUicFRA6M9z/YcYd25jnePCeY5op9kl7r//ftfldvDgwf71nNvICIoUKWJvvvmmC0Y++eQTzmuky+kdFy9e7BoEan5uNUXTovNY0zvqaw2d4LyOLgTdSDOVKlVyv+SLFi2KN+7k999/dw3VgPTuoosucrdxz3NlVITzHNFMF0XVBVcf2D7//HPLlu3/j0Lj3EZ6s2vXLnvqqadcI9dA3vhXTQHJeY30OEWYLho1bdrUncveogD7448/dl/v37/f7ct5HT0IupFmNDWHPsxpfOC2bdv869WoR+UuV199dUSPDwjVnLAq+XrjjTdcl1zPO++8434H4nYSBaKF/i7rQ5zKDjUtnspxA3FuI73Rhf633nrLunfv7i+rlYkTJ7pbzULBeY30ZsiQITZz5sx4i5qkqVu/vr799ts5r6MMjdSQpnr37u2C7pYtW9oLL7xg69ats6efftqqVKkStBEEkN5oDFW/fv2sS5cudscdd9h9991nEyZMsKlTp7oxWCptBKKRztcNGza4KWhUYq4lsFKpXr16nNtIV7Jnz+6GSGgeY/UmuPnmm93FJZXnavjE9ddfz99spDu6UBRMrly5XAb7qquuct9zXkcZH5DGpk2b5itRooQuObulatWqvjVr1kT6sIBka9SokVuCGTx4sC9nzpz+87x169a+ffv2pfkxAkmxa9cu/7kabOnUqZN/X85tpDeffvqpr06dOr68efP6Klas6HvyySd9Bw4ciLUP5zXSu3LlysX6Wy2c19EjRv9EOvBH5nPkyBFbuHChGy/YoEEDdzUayGj++ecfN35K42MTujINpEec28iIOK+REXFeRweCbgAAAAAAwoRGagAAAAAAhAlBNwAAAAAAYULQDQAAAABAmBB0AwAAAAAQJgTdAAAkY+aF9NB/dNWqVfbKK6/Y6dOnLZqcPHnSBg0a5JbDhw8nuu//a+9MoLSa3zj+84+iDJIlSWWdaFH2pQyiZKkUlT2akaxZmkgkFcVROiGckrWyjSRLcyJb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",
|
|
"text/plain": [
|
|
"<Figure size 1000x600 with 1 Axes>"
|
|
]
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
}
|
|
],
|
|
"source": [
|
|
"# 计算每个算法的平均性能和平均时间\n",
|
|
"avg_colors = df_colors.mean()\n",
|
|
"avg_times = df_time.mean()\n",
|
|
"\n",
|
|
"# 中文显示\n",
|
|
"plt.rcParams['font.sans-serif'] = ['SimHei']\n",
|
|
"plt.rcParams['axes.unicode_minus'] = False\n",
|
|
"\n",
|
|
"# 创建散点图\n",
|
|
"plt.figure(figsize=(10, 6))\n",
|
|
"\n",
|
|
"# 设置坐标轴范围\n",
|
|
"x_max = max(avg_times) * 1.05 # 扩大20%\n",
|
|
"y_max = max(avg_colors) * 1.05\n",
|
|
"x_min = min(avg_times) * 0.99\n",
|
|
"y_min = min(avg_colors) * 0.99\n",
|
|
"plt.xlim(-5, 45)\n",
|
|
"plt.ylim(y_min, 84)\n",
|
|
"\n",
|
|
"# 定义不同算法的颜色和标记,确保数量足够\n",
|
|
"colors = ['red', 'blue', 'green', 'purple', 'orange', 'brown', 'pink', 'gray', 'olive', 'cyan']\n",
|
|
"markers = ['o', 's', '^', 'D', 'v', '<', '>', 'p', 'h', '8']\n",
|
|
"\n",
|
|
"# 绘制散点和标注\n",
|
|
"for i, alg in enumerate(avg_colors.index):\n",
|
|
" x = avg_times[alg]\n",
|
|
" y = avg_colors[alg]\n",
|
|
" plt.scatter(x, y,\n",
|
|
" color=colors[i % len(colors)], # 使用取模确保不会越界\n",
|
|
" marker=markers[i % len(markers)],\n",
|
|
" s=100,\n",
|
|
" label=alg)\n",
|
|
" # 为DA和EOH设置不同的标注位置\n",
|
|
" if alg in ['DSATUR', 'EoH-MCP']:\n",
|
|
" xytext = (-90, 20) # 左上方偏移\n",
|
|
" elif alg in ['FunSearch-MCP']:\n",
|
|
" xytext = (-50, 20)\n",
|
|
" else:\n",
|
|
" xytext = (20, -5) # 右上方偏移\n",
|
|
" \n",
|
|
" plt.annotate(f'({x:.2f}, {y:.2f})',\n",
|
|
" xy=(x, y),\n",
|
|
" xytext=xytext,\n",
|
|
" textcoords='offset points',\n",
|
|
" fontsize=18,\n",
|
|
" bbox=dict(facecolor='white', edgecolor='none', alpha=0.7))\n",
|
|
"\n",
|
|
"plt.xlabel('平均运行时间(秒)', fontsize=18)\n",
|
|
"plt.ylabel('平均着色数量', fontsize=18)\n",
|
|
"\n",
|
|
"# 设置刻度字体大小\n",
|
|
"plt.xticks(fontsize=14)\n",
|
|
"plt.yticks(fontsize=14)\n",
|
|
"\n",
|
|
"# 添加图例\n",
|
|
"plt.legend(fontsize=14, loc='upper right')\n",
|
|
"\n",
|
|
"plt.tight_layout()\n",
|
|
"plt.savefig('mcppareto.png',dpi=300)\n",
|
|
"plt.show()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 7,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"\n",
|
|
"每个实例的基本信息:\n",
|
|
" 测试实例 顶点数 边数 密度 平均度数\n",
|
|
"0 DSJC0125.1.txt 125 736 0.094968 11.776\n",
|
|
"1 DSJC0125.5.txt 125 3891 0.502065 62.256\n",
|
|
"2 DSJC0125.9.txt 125 6961 0.898194 111.376\n",
|
|
"3 DSJC0250.1.txt 250 3218 0.103390 25.744\n",
|
|
"4 DSJC0250.5.txt 250 15668 0.503390 125.344\n",
|
|
"5 DSJC0250.9.txt 250 27897 0.896289 223.176\n",
|
|
"6 DSJC0500.1.txt 500 12458 0.099864 49.832\n",
|
|
"7 DSJC0500.5.txt 500 62624 0.501996 250.496\n",
|
|
"8 DSJC0500.9.txt 500 112437 0.901299 449.748\n",
|
|
"9 DSJC1000.1.txt 1000 49629 0.099357 99.258\n",
|
|
"10 DSJC1000.5.txt 1000 249826 0.500152 499.652\n",
|
|
"11 DSJC1000.9.txt 1000 449449 0.899798 898.898\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"# 统计每个实例的基本信息\n",
|
|
"instance_info = []\n",
|
|
"\n",
|
|
"for test_file in test_files:\n",
|
|
" adj_matrix = load_graph_data(test_file)\n",
|
|
" if adj_matrix is None:\n",
|
|
" continue\n",
|
|
" \n",
|
|
" n_vertices = adj_matrix.shape[0]\n",
|
|
" n_edges = np.sum(adj_matrix) // 2 # 无向图的边数\n",
|
|
" density = n_edges / (n_vertices * (n_vertices - 1) / 2) # 图的密度\n",
|
|
" avg_degree = np.sum(adj_matrix) / n_vertices # 平均度数\n",
|
|
" \n",
|
|
" instance_info.append({\n",
|
|
" '测试实例': test_file,\n",
|
|
" '顶点数': n_vertices,\n",
|
|
" '边数': n_edges,\n",
|
|
" '密度': density,\n",
|
|
" '平均度数': avg_degree\n",
|
|
" })\n",
|
|
"\n",
|
|
"# 将统计信息转换为DataFrame并打印\n",
|
|
"df_info = pd.DataFrame(instance_info)\n",
|
|
"print(\"\\n每个实例的基本信息:\")\n",
|
|
"print(df_info)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 11,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"image/png": "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",
|
|
"text/plain": [
|
|
"<Figure size 800x600 with 1 Axes>"
|
|
]
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
},
|
|
{
|
|
"data": {
|
|
"image/png": "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AABQJBcmAwAARRIzAABAkcQMAABQJDEDAAAUScwAAABFEjMAAECRxAwAAFAkMQMAABRJzAAAAEUSMwAAQJHEDAAAUCQxAwAAFEnMAAAARRIzAABAkcQMAABQJDEDAAAUScwAAABFEjMAAECRxAwAAFAkMQMAABRJzAAAAEUSMwAAQJHEDAAAUCQxAwAAFEnMAAAARRIzAABAkcQMAABQJDEDAAAUScwAAABFEjMAAECRxAwAAFAkMQMAABRJzAAAAEUSMwAAQJHEDAAAUCQxAwAAFEnMAAAARRIzAABAkcQMAABQJDEDAAAUScwAAABFEjMAAECRxAwAAFAkMQMAABRJzAAAAEUSMwAAQJHEDAAAUCQxAwAAFEnMAAAARRIzAABAkcQMAABQJDEDAAAUScwAAABFEjMAAECRxAwAAFAkMQMAABRJzAAAAEUSMwAAQJHEDAAAUCQxAwAAFEnMAAAARRIzAABAkcQMAABQJDEDAAAUScwAAABFEjMAAECRxAwAAFAkMQMAABRJzAAAAEUSMwAAQJHEDAAAUCQxAwAAFEnMAAAARRIzAABAkcQMAABQJDEDAAAUScwAAABFEjMAAECRxAwAAFAkMQMAABRJzAAAAEUSMwAAQJHEDAAAUCQxAwAAFEnMAAAARRIzAABAkcQMAABQJDEDAAAUScwAAABFEjMAAECRxAwAAFAkMQMAABRJzAAAAEUSMwAAQJHEDAAAUCQxAwAAFEnMAAAARRIzAABAkcQMAABQJDEDAAAUScwAAABFEjMAAECRxAwAAFAkMQMAABRJzAAAAEUSMwAAQJHEDAAAUCQxAwAAFEnMAAAARRIzAABAkcQMAABQJDEDAAAUScwAAABFEjMAAECRxAwAAFAkMQMAABRJzAAAAEUSMwAAQJHEDAAAUCQxAwAAFEnMAAAAUaL/DzNA2fo2fTFIAAAAAElFTkSuQmCC",
|
|
"text/plain": [
|
|
"<Figure size 800x600 with 1 Axes>"
|
|
]
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
}
|
|
],
|
|
"source": [
|
|
"import matplotlib.pyplot as plt\n",
|
|
"import networkx as nx\n",
|
|
"import matplotlib.font_manager as fm\n",
|
|
"\n",
|
|
"# 设置中文字体\n",
|
|
"plt.rcParams['font.sans-serif'] = ['SimHei']\n",
|
|
"plt.rcParams['axes.unicode_minus'] = False\n",
|
|
"\n",
|
|
"# 定义节点位置和边\n",
|
|
"positions = [(0,0), (1,0), (0,1), (2,0), (1,1)] # 5个节点的位置\n",
|
|
"edges = [(0,1), (0,2), (1,2), (1,3), (2,4), (3,4)] # 节点间的连接\n",
|
|
"\n",
|
|
"# 创建图对象\n",
|
|
"G = nx.Graph()\n",
|
|
"G.add_nodes_from(range(len(positions)))\n",
|
|
"G.add_edges_from(edges)\n",
|
|
"pos = {i: positions[i] for i in range(len(positions))}\n",
|
|
"\n",
|
|
"# 绘制第一个图\n",
|
|
"plt.figure(figsize=(8, 6))\n",
|
|
"colors = ['red', 'green', 'blue', 'yellow', 'purple']\n",
|
|
"nx.draw(G, pos,\n",
|
|
" node_color=colors,\n",
|
|
" node_size=1000,\n",
|
|
" with_labels=True,\n",
|
|
" font_size=12,\n",
|
|
" font_weight='bold',\n",
|
|
" edge_color='gray',\n",
|
|
" width=1)\n",
|
|
"\n",
|
|
"# plt.title('5色着色方案', fontsize=18, fontweight='bold')\n",
|
|
"plt.axis('equal')\n",
|
|
"plt.savefig('./plot/5color.png',dpi=300)\n",
|
|
"plt.show()\n",
|
|
"\n",
|
|
"# 绘制第二个图\n",
|
|
"plt.figure(figsize=(8, 6))\n",
|
|
"colors2 = ['red', 'green', 'blue', 'blue', 'red']\n",
|
|
"nx.draw(G, pos,\n",
|
|
" node_color=colors2,\n",
|
|
" node_size=1000,\n",
|
|
" with_labels=True,\n",
|
|
" font_size=12,\n",
|
|
" font_weight='bold',\n",
|
|
" edge_color='gray',\n",
|
|
" width=1)\n",
|
|
"\n",
|
|
"# plt.title('3色着色方案', fontsize=18, fontweight='bold')\n",
|
|
"plt.axis('equal')\n",
|
|
"plt.savefig('./plot/3color.png',dpi=300)\n",
|
|
"plt.show()\n"
|
|
]
|
|
}
|
|
],
|
|
"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
|
|
}
|