{ "cells": [ { "cell_type": "code", "execution_count": 2, "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": 3, "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": 4, "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": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "测试实例: DSJC0125.1.txt\n", "\n", "使用算法: FunSearch-MCP\n", "执行时间:0.0065秒, 使用颜色数:7\n", "\n", "使用算法: EoH-MCP\n", "执行时间:0.2940秒, 使用颜色数:6\n", "\n", "使用算法: AAE-MCP\n", "执行时间:0.0156秒, 使用颜色数:6\n", "\n", "使用算法: 贪心\n", "执行时间:0.0034秒, 使用颜色数:8\n", "\n", "使用算法: Welsh-Powell\n", "执行时间:0.0020秒, 使用颜色数:7\n", "\n", "使用算法: DSATUR\n", "执行时间:0.1971秒, 使用颜色数:6\n", "\n", "测试实例: DSJC0125.5.txt\n", "\n", "使用算法: FunSearch-MCP\n", "执行时间:0.0030秒, 使用颜色数:24\n", "\n", "使用算法: EoH-MCP\n", "执行时间:0.3150秒, 使用颜色数:22\n", "\n", "使用算法: AAE-MCP\n", "执行时间:0.0125秒, 使用颜色数:22\n", "\n", "使用算法: 贪心\n", "执行时间:0.0020秒, 使用颜色数:26\n", "\n", "使用算法: Welsh-Powell\n", "执行时间:0.0030秒, 使用颜色数:23\n", "\n", "使用算法: DSATUR\n", "执行时间:0.2150秒, 使用颜色数:22\n", "\n", "测试实例: DSJC0125.9.txt\n", "\n", "使用算法: FunSearch-MCP\n", "执行时间:0.0030秒, 使用颜色数:53\n", "\n", "使用算法: EoH-MCP\n", "执行时间:0.3702秒, 使用颜色数:51\n", "\n", "使用算法: AAE-MCP\n", "执行时间:0.0171秒, 使用颜色数:51\n", "\n", "使用算法: 贪心\n", "执行时间:0.0030秒, 使用颜色数:56\n", "\n", "使用算法: Welsh-Powell\n", "执行时间:0.0060秒, 使用颜色数:53\n", "\n", "使用算法: DSATUR\n", "执行时间:0.2429秒, 使用颜色数:51\n", "\n", "测试实例: DSJC0250.1.txt\n", "\n", "使用算法: FunSearch-MCP\n", "执行时间:0.0135秒, 使用颜色数:12\n", "\n", "使用算法: EoH-MCP\n", "执行时间:1.9738秒, 使用颜色数:10\n", "\n", "使用算法: AAE-MCP\n", "执行时间:0.0218秒, 使用颜色数:10\n", "\n", "使用算法: 贪心\n", "执行时间:0.0092秒, 使用颜色数:13\n", "\n", "使用算法: Welsh-Powell\n", "执行时间:0.0083秒, 使用颜色数:11\n", "\n", "使用算法: DSATUR\n", "执行时间:1.5016秒, 使用颜色数:10\n", "\n", "测试实例: DSJC0250.5.txt\n", "\n", "使用算法: FunSearch-MCP\n", "执行时间:0.0154秒, 使用颜色数:40\n", "\n", "使用算法: EoH-MCP\n", "执行时间:2.3612秒, 使用颜色数:37\n", "\n", "使用算法: AAE-MCP\n", "执行时间:0.0877秒, 使用颜色数:37\n", "\n", "使用算法: 贪心\n", "执行时间:0.0085秒, 使用颜色数:43\n", "\n", "使用算法: Welsh-Powell\n", "执行时间:0.0140秒, 使用颜色数:41\n", "\n", "使用算法: DSATUR\n", "执行时间:1.6691秒, 使用颜色数:37\n", "\n", "测试实例: DSJC0250.9.txt\n", "\n", "使用算法: FunSearch-MCP\n", "执行时间:0.0147秒, 使用颜色数:92\n", "\n", "使用算法: EoH-MCP\n", "执行时间:2.8340秒, 使用颜色数:92\n", "\n", "使用算法: AAE-MCP\n", "执行时间:0.0724秒, 使用颜色数:92\n", "\n", "使用算法: 贪心\n", "执行时间:0.0105秒, 使用颜色数:99\n", "\n", "使用算法: Welsh-Powell\n", "执行时间:0.0346秒, 使用颜色数:93\n", "\n", "使用算法: DSATUR\n", "执行时间:2.0043秒, 使用颜色数:92\n", "\n", "测试实例: DSJC0500.1.txt\n", "\n", "使用算法: FunSearch-MCP\n", "执行时间:0.0501秒, 使用颜色数:18\n", "\n", "使用算法: EoH-MCP\n", "执行时间:15.5829秒, 使用颜色数:16\n", "\n", "使用算法: AAE-MCP\n", "执行时间:0.0800秒, 使用颜色数:16\n", "\n", "使用算法: 贪心\n", "执行时间:0.0382秒, 使用颜色数:20\n", "\n", "使用算法: Welsh-Powell\n", "执行时间:0.0431秒, 使用颜色数:18\n", "\n", "使用算法: DSATUR\n", "执行时间:12.7058秒, 使用颜色数:16\n", "\n", "测试实例: DSJC0500.5.txt\n", "\n", "使用算法: FunSearch-MCP\n", "执行时间:0.0556秒, 使用颜色数:68\n", "\n", "使用算法: EoH-MCP\n", "执行时间:18.9277秒, 使用颜色数:65\n", "\n", "使用算法: AAE-MCP\n", "执行时间:0.1925秒, 使用颜色数:65\n", "\n", "使用算法: 贪心\n", "执行时间:0.0468秒, 使用颜色数:72\n", "\n", "使用算法: Welsh-Powell\n", "执行时间:0.0844秒, 使用颜色数:71\n", "\n", "使用算法: DSATUR\n", "执行时间:13.6119秒, 使用颜色数:65\n", "\n", "测试实例: DSJC0500.9.txt\n", "\n", "使用算法: FunSearch-MCP\n", "执行时间:0.0604秒, 使用颜色数:171\n", "\n", "使用算法: EoH-MCP\n", "执行时间:22.3392秒, 使用颜色数:170\n", "\n", "使用算法: AAE-MCP\n", "执行时间:0.4155秒, 使用颜色数:170\n", "\n", "使用算法: 贪心\n", "执行时间:0.0556秒, 使用颜色数:175\n", "\n", "使用算法: Welsh-Powell\n", "执行时间:0.2574秒, 使用颜色数:169\n", "\n", "使用算法: DSATUR\n", "执行时间:15.6913秒, 使用颜色数:170\n", "\n", "测试实例: DSJC1000.1.txt\n", "\n", "使用算法: FunSearch-MCP\n", "执行时间:0.2285秒, 使用颜色数:29\n", "\n", "使用算法: EoH-MCP\n", "执行时间:121.8734秒, 使用颜色数:27\n", "\n", "使用算法: AAE-MCP\n", "执行时间:0.3822秒, 使用颜色数:27\n", "\n", "使用算法: 贪心\n", "执行时间:0.1491秒, 使用颜色数:31\n", "\n", "使用算法: Welsh-Powell\n", "执行时间:0.2108秒, 使用颜色数:29\n", "\n", "使用算法: DSATUR\n", "执行时间:102.3721秒, 使用颜色数:27\n", "\n", "测试实例: DSJC1000.5.txt\n", "\n", "使用算法: FunSearch-MCP\n", "执行时间:0.2249秒, 使用颜色数:123\n", "\n", "使用算法: EoH-MCP\n", "执行时间:151.4883秒, 使用颜色数:115\n", "\n", "使用算法: AAE-MCP\n", "执行时间:0.9123秒, 使用颜色数:115\n", "\n", "使用算法: 贪心\n", "执行时间:0.1647秒, 使用颜色数:127\n", "\n", "使用算法: Welsh-Powell\n", "执行时间:0.4821秒, 使用颜色数:121\n", "\n", "使用算法: DSATUR\n", "执行时间:113.0633秒, 使用颜色数:115\n", "\n", "测试实例: DSJC1000.9.txt\n", "\n", "使用算法: FunSearch-MCP\n", "执行时间:0.2294秒, 使用颜色数:316\n", "\n", "使用算法: EoH-MCP\n", "执行时间:169.8972秒, 使用颜色数:299\n", "\n", "使用算法: AAE-MCP\n", "执行时间:1.4054秒, 使用颜色数:299\n", "\n", "使用算法: 贪心\n", "执行时间:0.1765秒, 使用颜色数:321\n", "\n", "使用算法: Welsh-Powell\n", "执行时间:1.3390秒, 使用颜色数:313\n", "\n", "使用算法: DSATUR\n", "执行时间:113.5548秒, 使用颜色数: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.006541728973388672, 'DSJC0125.5.txt': 0.003002643585205078, 'DSJC0125.9.txt': 0.0030024051666259766, 'DSJC0250.1.txt': 0.01353764533996582, 'DSJC0250.5.txt': 0.015435218811035156, 'DSJC0250.9.txt': 0.014726877212524414, 'DSJC0500.1.txt': 0.05006003379821777, 'DSJC0500.5.txt': 0.05561065673828125, 'DSJC0500.9.txt': 0.06039857864379883, 'DSJC1000.1.txt': 0.22848773002624512, 'DSJC1000.5.txt': 0.22493863105773926, 'DSJC1000.9.txt': 0.22939729690551758}\n", " EoH-MCP: 执行时间 = {'DSJC0125.1.txt': 0.29399943351745605, 'DSJC0125.5.txt': 0.31499505043029785, 'DSJC0125.9.txt': 0.37015247344970703, 'DSJC0250.1.txt': 1.9738132953643799, 'DSJC0250.5.txt': 2.361232042312622, 'DSJC0250.9.txt': 2.8340067863464355, 'DSJC0500.1.txt': 15.582885503768921, 'DSJC0500.5.txt': 18.927740812301636, 'DSJC0500.9.txt': 22.339231729507446, 'DSJC1000.1.txt': 121.87342858314514, 'DSJC1000.5.txt': 151.48826622962952, 'DSJC1000.9.txt': 169.8971655368805}\n", " AAE-MCP: 执行时间 = {'DSJC0125.1.txt': 0.015633106231689453, 'DSJC0125.5.txt': 0.012542486190795898, 'DSJC0125.9.txt': 0.017057180404663086, 'DSJC0250.1.txt': 0.021806001663208008, 'DSJC0250.5.txt': 0.08765792846679688, 'DSJC0250.9.txt': 0.07237839698791504, 'DSJC0500.1.txt': 0.08004164695739746, 'DSJC0500.5.txt': 0.19251799583435059, 'DSJC0500.9.txt': 0.4154641628265381, 'DSJC1000.1.txt': 0.3821909427642822, 'DSJC1000.5.txt': 0.9123454093933105, 'DSJC1000.9.txt': 1.405397653579712}\n", " 贪心: 执行时间 = {'DSJC0125.1.txt': 0.003445148468017578, 'DSJC0125.5.txt': 0.0020117759704589844, 'DSJC0125.9.txt': 0.003002643585205078, 'DSJC0250.1.txt': 0.009218692779541016, 'DSJC0250.5.txt': 0.008507490158081055, 'DSJC0250.9.txt': 0.010504007339477539, 'DSJC0500.1.txt': 0.03820180892944336, 'DSJC0500.5.txt': 0.04677724838256836, 'DSJC0500.9.txt': 0.05564761161804199, 'DSJC1000.1.txt': 0.14909648895263672, 'DSJC1000.5.txt': 0.16474175453186035, 'DSJC1000.9.txt': 0.17650794982910156}\n", " Welsh-Powell: 执行时间 = {'DSJC0125.1.txt': 0.0019974708557128906, 'DSJC0125.5.txt': 0.0029964447021484375, 'DSJC0125.9.txt': 0.0060160160064697266, 'DSJC0250.1.txt': 0.008329153060913086, 'DSJC0250.5.txt': 0.014041900634765625, 'DSJC0250.9.txt': 0.03464531898498535, 'DSJC0500.1.txt': 0.04312324523925781, 'DSJC0500.5.txt': 0.0843958854675293, 'DSJC0500.9.txt': 0.25736522674560547, 'DSJC1000.1.txt': 0.2107689380645752, 'DSJC1000.5.txt': 0.4820866584777832, 'DSJC1000.9.txt': 1.3390073776245117}\n", " DSATUR: 执行时间 = {'DSJC0125.1.txt': 0.19710993766784668, 'DSJC0125.5.txt': 0.2149949073791504, 'DSJC0125.9.txt': 0.24286270141601562, 'DSJC0250.1.txt': 1.5016090869903564, 'DSJC0250.5.txt': 1.6691169738769531, 'DSJC0250.9.txt': 2.004258632659912, 'DSJC0500.1.txt': 12.705793619155884, 'DSJC0500.5.txt': 13.611878156661987, 'DSJC0500.9.txt': 15.69128155708313, 'DSJC1000.1.txt': 102.37213277816772, 'DSJC1000.5.txt': 113.06330513954163, 'DSJC1000.9.txt': 113.55482411384583}\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.006541728973388672, 'DSJC0125.5.txt': 0.003002643585205078, 'DSJC0125.9.txt': 0.0030024051666259766, 'DSJC0250.1.txt': 0.01353764533996582, 'DSJC0250.5.txt': 0.015435218811035156, 'DSJC0250.9.txt': 0.014726877212524414, 'DSJC0500.1.txt': 0.05006003379821777, 'DSJC0500.5.txt': 0.05561065673828125, 'DSJC0500.9.txt': 0.06039857864379883, 'DSJC1000.1.txt': 0.22848773002624512, 'DSJC1000.5.txt': 0.22493863105773926, 'DSJC1000.9.txt': 0.22939729690551758}\n", " EoH-MCP: 执行时间 = {'DSJC0125.1.txt': 0.29399943351745605, 'DSJC0125.5.txt': 0.31499505043029785, 'DSJC0125.9.txt': 0.37015247344970703, 'DSJC0250.1.txt': 1.9738132953643799, 'DSJC0250.5.txt': 2.361232042312622, 'DSJC0250.9.txt': 2.8340067863464355, 'DSJC0500.1.txt': 15.582885503768921, 'DSJC0500.5.txt': 18.927740812301636, 'DSJC0500.9.txt': 22.339231729507446, 'DSJC1000.1.txt': 121.87342858314514, 'DSJC1000.5.txt': 151.48826622962952, 'DSJC1000.9.txt': 169.8971655368805}\n", " AAE-MCP: 执行时间 = {'DSJC0125.1.txt': 0.015633106231689453, 'DSJC0125.5.txt': 0.012542486190795898, 'DSJC0125.9.txt': 0.017057180404663086, 'DSJC0250.1.txt': 0.021806001663208008, 'DSJC0250.5.txt': 0.08765792846679688, 'DSJC0250.9.txt': 0.07237839698791504, 'DSJC0500.1.txt': 0.08004164695739746, 'DSJC0500.5.txt': 0.19251799583435059, 'DSJC0500.9.txt': 0.4154641628265381, 'DSJC1000.1.txt': 0.3821909427642822, 'DSJC1000.5.txt': 0.9123454093933105, 'DSJC1000.9.txt': 1.405397653579712}\n", " 贪心: 执行时间 = {'DSJC0125.1.txt': 0.003445148468017578, 'DSJC0125.5.txt': 0.0020117759704589844, 'DSJC0125.9.txt': 0.003002643585205078, 'DSJC0250.1.txt': 0.009218692779541016, 'DSJC0250.5.txt': 0.008507490158081055, 'DSJC0250.9.txt': 0.010504007339477539, 'DSJC0500.1.txt': 0.03820180892944336, 'DSJC0500.5.txt': 0.04677724838256836, 'DSJC0500.9.txt': 0.05564761161804199, 'DSJC1000.1.txt': 0.14909648895263672, 'DSJC1000.5.txt': 0.16474175453186035, 'DSJC1000.9.txt': 0.17650794982910156}\n", " Welsh-Powell: 执行时间 = {'DSJC0125.1.txt': 0.0019974708557128906, 'DSJC0125.5.txt': 0.0029964447021484375, 'DSJC0125.9.txt': 0.0060160160064697266, 'DSJC0250.1.txt': 0.008329153060913086, 'DSJC0250.5.txt': 0.014041900634765625, 'DSJC0250.9.txt': 0.03464531898498535, 'DSJC0500.1.txt': 0.04312324523925781, 'DSJC0500.5.txt': 0.0843958854675293, 'DSJC0500.9.txt': 0.25736522674560547, 'DSJC1000.1.txt': 0.2107689380645752, 'DSJC1000.5.txt': 0.4820866584777832, 'DSJC1000.9.txt': 1.3390073776245117}\n", " DSATUR: 执行时间 = {'DSJC0125.1.txt': 0.19710993766784668, 'DSJC0125.5.txt': 0.2149949073791504, 'DSJC0125.9.txt': 0.24286270141601562, 'DSJC0250.1.txt': 1.5016090869903564, 'DSJC0250.5.txt': 1.6691169738769531, 'DSJC0250.9.txt': 2.004258632659912, 'DSJC0500.1.txt': 12.705793619155884, 'DSJC0500.5.txt': 13.611878156661987, 'DSJC0500.9.txt': 15.69128155708313, 'DSJC1000.1.txt': 102.37213277816772, 'DSJC1000.5.txt': 113.06330513954163, 'DSJC1000.9.txt': 113.55482411384583}\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.006541728973388672, 'DSJC0125.5.txt': 0.003002643585205078, 'DSJC0125.9.txt': 0.0030024051666259766, 'DSJC0250.1.txt': 0.01353764533996582, 'DSJC0250.5.txt': 0.015435218811035156, 'DSJC0250.9.txt': 0.014726877212524414, 'DSJC0500.1.txt': 0.05006003379821777, 'DSJC0500.5.txt': 0.05561065673828125, 'DSJC0500.9.txt': 0.06039857864379883, 'DSJC1000.1.txt': 0.22848773002624512, 'DSJC1000.5.txt': 0.22493863105773926, 'DSJC1000.9.txt': 0.22939729690551758}\n", " EoH-MCP: 执行时间 = {'DSJC0125.1.txt': 0.29399943351745605, 'DSJC0125.5.txt': 0.31499505043029785, 'DSJC0125.9.txt': 0.37015247344970703, 'DSJC0250.1.txt': 1.9738132953643799, 'DSJC0250.5.txt': 2.361232042312622, 'DSJC0250.9.txt': 2.8340067863464355, 'DSJC0500.1.txt': 15.582885503768921, 'DSJC0500.5.txt': 18.927740812301636, 'DSJC0500.9.txt': 22.339231729507446, 'DSJC1000.1.txt': 121.87342858314514, 'DSJC1000.5.txt': 151.48826622962952, 'DSJC1000.9.txt': 169.8971655368805}\n", " AAE-MCP: 执行时间 = {'DSJC0125.1.txt': 0.015633106231689453, 'DSJC0125.5.txt': 0.012542486190795898, 'DSJC0125.9.txt': 0.017057180404663086, 'DSJC0250.1.txt': 0.021806001663208008, 'DSJC0250.5.txt': 0.08765792846679688, 'DSJC0250.9.txt': 0.07237839698791504, 'DSJC0500.1.txt': 0.08004164695739746, 'DSJC0500.5.txt': 0.19251799583435059, 'DSJC0500.9.txt': 0.4154641628265381, 'DSJC1000.1.txt': 0.3821909427642822, 'DSJC1000.5.txt': 0.9123454093933105, 'DSJC1000.9.txt': 1.405397653579712}\n", " 贪心: 执行时间 = {'DSJC0125.1.txt': 0.003445148468017578, 'DSJC0125.5.txt': 0.0020117759704589844, 'DSJC0125.9.txt': 0.003002643585205078, 'DSJC0250.1.txt': 0.009218692779541016, 'DSJC0250.5.txt': 0.008507490158081055, 'DSJC0250.9.txt': 0.010504007339477539, 'DSJC0500.1.txt': 0.03820180892944336, 'DSJC0500.5.txt': 0.04677724838256836, 'DSJC0500.9.txt': 0.05564761161804199, 'DSJC1000.1.txt': 0.14909648895263672, 'DSJC1000.5.txt': 0.16474175453186035, 'DSJC1000.9.txt': 0.17650794982910156}\n", " Welsh-Powell: 执行时间 = {'DSJC0125.1.txt': 0.0019974708557128906, 'DSJC0125.5.txt': 0.0029964447021484375, 'DSJC0125.9.txt': 0.0060160160064697266, 'DSJC0250.1.txt': 0.008329153060913086, 'DSJC0250.5.txt': 0.014041900634765625, 'DSJC0250.9.txt': 0.03464531898498535, 'DSJC0500.1.txt': 0.04312324523925781, 'DSJC0500.5.txt': 0.0843958854675293, 'DSJC0500.9.txt': 0.25736522674560547, 'DSJC1000.1.txt': 0.2107689380645752, 'DSJC1000.5.txt': 0.4820866584777832, 'DSJC1000.9.txt': 1.3390073776245117}\n", " DSATUR: 执行时间 = {'DSJC0125.1.txt': 0.19710993766784668, 'DSJC0125.5.txt': 0.2149949073791504, 'DSJC0125.9.txt': 0.24286270141601562, 'DSJC0250.1.txt': 1.5016090869903564, 'DSJC0250.5.txt': 1.6691169738769531, 'DSJC0250.9.txt': 2.004258632659912, 'DSJC0500.1.txt': 12.705793619155884, 'DSJC0500.5.txt': 13.611878156661987, 'DSJC0500.9.txt': 15.69128155708313, 'DSJC1000.1.txt': 102.37213277816772, 'DSJC1000.5.txt': 113.06330513954163, 'DSJC1000.9.txt': 113.55482411384583}\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.006541728973388672, 'DSJC0125.5.txt': 0.003002643585205078, 'DSJC0125.9.txt': 0.0030024051666259766, 'DSJC0250.1.txt': 0.01353764533996582, 'DSJC0250.5.txt': 0.015435218811035156, 'DSJC0250.9.txt': 0.014726877212524414, 'DSJC0500.1.txt': 0.05006003379821777, 'DSJC0500.5.txt': 0.05561065673828125, 'DSJC0500.9.txt': 0.06039857864379883, 'DSJC1000.1.txt': 0.22848773002624512, 'DSJC1000.5.txt': 0.22493863105773926, 'DSJC1000.9.txt': 0.22939729690551758}\n", " EoH-MCP: 执行时间 = {'DSJC0125.1.txt': 0.29399943351745605, 'DSJC0125.5.txt': 0.31499505043029785, 'DSJC0125.9.txt': 0.37015247344970703, 'DSJC0250.1.txt': 1.9738132953643799, 'DSJC0250.5.txt': 2.361232042312622, 'DSJC0250.9.txt': 2.8340067863464355, 'DSJC0500.1.txt': 15.582885503768921, 'DSJC0500.5.txt': 18.927740812301636, 'DSJC0500.9.txt': 22.339231729507446, 'DSJC1000.1.txt': 121.87342858314514, 'DSJC1000.5.txt': 151.48826622962952, 'DSJC1000.9.txt': 169.8971655368805}\n", " AAE-MCP: 执行时间 = {'DSJC0125.1.txt': 0.015633106231689453, 'DSJC0125.5.txt': 0.012542486190795898, 'DSJC0125.9.txt': 0.017057180404663086, 'DSJC0250.1.txt': 0.021806001663208008, 'DSJC0250.5.txt': 0.08765792846679688, 'DSJC0250.9.txt': 0.07237839698791504, 'DSJC0500.1.txt': 0.08004164695739746, 'DSJC0500.5.txt': 0.19251799583435059, 'DSJC0500.9.txt': 0.4154641628265381, 'DSJC1000.1.txt': 0.3821909427642822, 'DSJC1000.5.txt': 0.9123454093933105, 'DSJC1000.9.txt': 1.405397653579712}\n", " 贪心: 执行时间 = {'DSJC0125.1.txt': 0.003445148468017578, 'DSJC0125.5.txt': 0.0020117759704589844, 'DSJC0125.9.txt': 0.003002643585205078, 'DSJC0250.1.txt': 0.009218692779541016, 'DSJC0250.5.txt': 0.008507490158081055, 'DSJC0250.9.txt': 0.010504007339477539, 'DSJC0500.1.txt': 0.03820180892944336, 'DSJC0500.5.txt': 0.04677724838256836, 'DSJC0500.9.txt': 0.05564761161804199, 'DSJC1000.1.txt': 0.14909648895263672, 'DSJC1000.5.txt': 0.16474175453186035, 'DSJC1000.9.txt': 0.17650794982910156}\n", " Welsh-Powell: 执行时间 = {'DSJC0125.1.txt': 0.0019974708557128906, 'DSJC0125.5.txt': 0.0029964447021484375, 'DSJC0125.9.txt': 0.0060160160064697266, 'DSJC0250.1.txt': 0.008329153060913086, 'DSJC0250.5.txt': 0.014041900634765625, 'DSJC0250.9.txt': 0.03464531898498535, 'DSJC0500.1.txt': 0.04312324523925781, 'DSJC0500.5.txt': 0.0843958854675293, 'DSJC0500.9.txt': 0.25736522674560547, 'DSJC1000.1.txt': 0.2107689380645752, 'DSJC1000.5.txt': 0.4820866584777832, 'DSJC1000.9.txt': 1.3390073776245117}\n", " DSATUR: 执行时间 = {'DSJC0125.1.txt': 0.19710993766784668, 'DSJC0125.5.txt': 0.2149949073791504, 'DSJC0125.9.txt': 0.24286270141601562, 'DSJC0250.1.txt': 1.5016090869903564, 'DSJC0250.5.txt': 1.6691169738769531, 'DSJC0250.9.txt': 2.004258632659912, 'DSJC0500.1.txt': 12.705793619155884, 'DSJC0500.5.txt': 13.611878156661987, 'DSJC0500.9.txt': 15.69128155708313, 'DSJC1000.1.txt': 102.37213277816772, 'DSJC1000.5.txt': 113.06330513954163, 'DSJC1000.9.txt': 113.55482411384583}\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.006541728973388672, 'DSJC0125.5.txt': 0.003002643585205078, 'DSJC0125.9.txt': 0.0030024051666259766, 'DSJC0250.1.txt': 0.01353764533996582, 'DSJC0250.5.txt': 0.015435218811035156, 'DSJC0250.9.txt': 0.014726877212524414, 'DSJC0500.1.txt': 0.05006003379821777, 'DSJC0500.5.txt': 0.05561065673828125, 'DSJC0500.9.txt': 0.06039857864379883, 'DSJC1000.1.txt': 0.22848773002624512, 'DSJC1000.5.txt': 0.22493863105773926, 'DSJC1000.9.txt': 0.22939729690551758}\n", " EoH-MCP: 执行时间 = {'DSJC0125.1.txt': 0.29399943351745605, 'DSJC0125.5.txt': 0.31499505043029785, 'DSJC0125.9.txt': 0.37015247344970703, 'DSJC0250.1.txt': 1.9738132953643799, 'DSJC0250.5.txt': 2.361232042312622, 'DSJC0250.9.txt': 2.8340067863464355, 'DSJC0500.1.txt': 15.582885503768921, 'DSJC0500.5.txt': 18.927740812301636, 'DSJC0500.9.txt': 22.339231729507446, 'DSJC1000.1.txt': 121.87342858314514, 'DSJC1000.5.txt': 151.48826622962952, 'DSJC1000.9.txt': 169.8971655368805}\n", " AAE-MCP: 执行时间 = {'DSJC0125.1.txt': 0.015633106231689453, 'DSJC0125.5.txt': 0.012542486190795898, 'DSJC0125.9.txt': 0.017057180404663086, 'DSJC0250.1.txt': 0.021806001663208008, 'DSJC0250.5.txt': 0.08765792846679688, 'DSJC0250.9.txt': 0.07237839698791504, 'DSJC0500.1.txt': 0.08004164695739746, 'DSJC0500.5.txt': 0.19251799583435059, 'DSJC0500.9.txt': 0.4154641628265381, 'DSJC1000.1.txt': 0.3821909427642822, 'DSJC1000.5.txt': 0.9123454093933105, 'DSJC1000.9.txt': 1.405397653579712}\n", " 贪心: 执行时间 = {'DSJC0125.1.txt': 0.003445148468017578, 'DSJC0125.5.txt': 0.0020117759704589844, 'DSJC0125.9.txt': 0.003002643585205078, 'DSJC0250.1.txt': 0.009218692779541016, 'DSJC0250.5.txt': 0.008507490158081055, 'DSJC0250.9.txt': 0.010504007339477539, 'DSJC0500.1.txt': 0.03820180892944336, 'DSJC0500.5.txt': 0.04677724838256836, 'DSJC0500.9.txt': 0.05564761161804199, 'DSJC1000.1.txt': 0.14909648895263672, 'DSJC1000.5.txt': 0.16474175453186035, 'DSJC1000.9.txt': 0.17650794982910156}\n", " Welsh-Powell: 执行时间 = {'DSJC0125.1.txt': 0.0019974708557128906, 'DSJC0125.5.txt': 0.0029964447021484375, 'DSJC0125.9.txt': 0.0060160160064697266, 'DSJC0250.1.txt': 0.008329153060913086, 'DSJC0250.5.txt': 0.014041900634765625, 'DSJC0250.9.txt': 0.03464531898498535, 'DSJC0500.1.txt': 0.04312324523925781, 'DSJC0500.5.txt': 0.0843958854675293, 'DSJC0500.9.txt': 0.25736522674560547, 'DSJC1000.1.txt': 0.2107689380645752, 'DSJC1000.5.txt': 0.4820866584777832, 'DSJC1000.9.txt': 1.3390073776245117}\n", " DSATUR: 执行时间 = {'DSJC0125.1.txt': 0.19710993766784668, 'DSJC0125.5.txt': 0.2149949073791504, 'DSJC0125.9.txt': 0.24286270141601562, 'DSJC0250.1.txt': 1.5016090869903564, 'DSJC0250.5.txt': 1.6691169738769531, 'DSJC0250.9.txt': 2.004258632659912, 'DSJC0500.1.txt': 12.705793619155884, 'DSJC0500.5.txt': 13.611878156661987, 'DSJC0500.9.txt': 15.69128155708313, 'DSJC1000.1.txt': 102.37213277816772, 'DSJC1000.5.txt': 113.06330513954163, 'DSJC1000.9.txt': 113.55482411384583}\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.006541728973388672, 'DSJC0125.5.txt': 0.003002643585205078, 'DSJC0125.9.txt': 0.0030024051666259766, 'DSJC0250.1.txt': 0.01353764533996582, 'DSJC0250.5.txt': 0.015435218811035156, 'DSJC0250.9.txt': 0.014726877212524414, 'DSJC0500.1.txt': 0.05006003379821777, 'DSJC0500.5.txt': 0.05561065673828125, 'DSJC0500.9.txt': 0.06039857864379883, 'DSJC1000.1.txt': 0.22848773002624512, 'DSJC1000.5.txt': 0.22493863105773926, 'DSJC1000.9.txt': 0.22939729690551758}\n", " EoH-MCP: 执行时间 = {'DSJC0125.1.txt': 0.29399943351745605, 'DSJC0125.5.txt': 0.31499505043029785, 'DSJC0125.9.txt': 0.37015247344970703, 'DSJC0250.1.txt': 1.9738132953643799, 'DSJC0250.5.txt': 2.361232042312622, 'DSJC0250.9.txt': 2.8340067863464355, 'DSJC0500.1.txt': 15.582885503768921, 'DSJC0500.5.txt': 18.927740812301636, 'DSJC0500.9.txt': 22.339231729507446, 'DSJC1000.1.txt': 121.87342858314514, 'DSJC1000.5.txt': 151.48826622962952, 'DSJC1000.9.txt': 169.8971655368805}\n", " AAE-MCP: 执行时间 = {'DSJC0125.1.txt': 0.015633106231689453, 'DSJC0125.5.txt': 0.012542486190795898, 'DSJC0125.9.txt': 0.017057180404663086, 'DSJC0250.1.txt': 0.021806001663208008, 'DSJC0250.5.txt': 0.08765792846679688, 'DSJC0250.9.txt': 0.07237839698791504, 'DSJC0500.1.txt': 0.08004164695739746, 'DSJC0500.5.txt': 0.19251799583435059, 'DSJC0500.9.txt': 0.4154641628265381, 'DSJC1000.1.txt': 0.3821909427642822, 'DSJC1000.5.txt': 0.9123454093933105, 'DSJC1000.9.txt': 1.405397653579712}\n", " 贪心: 执行时间 = {'DSJC0125.1.txt': 0.003445148468017578, 'DSJC0125.5.txt': 0.0020117759704589844, 'DSJC0125.9.txt': 0.003002643585205078, 'DSJC0250.1.txt': 0.009218692779541016, 'DSJC0250.5.txt': 0.008507490158081055, 'DSJC0250.9.txt': 0.010504007339477539, 'DSJC0500.1.txt': 0.03820180892944336, 'DSJC0500.5.txt': 0.04677724838256836, 'DSJC0500.9.txt': 0.05564761161804199, 'DSJC1000.1.txt': 0.14909648895263672, 'DSJC1000.5.txt': 0.16474175453186035, 'DSJC1000.9.txt': 0.17650794982910156}\n", " Welsh-Powell: 执行时间 = {'DSJC0125.1.txt': 0.0019974708557128906, 'DSJC0125.5.txt': 0.0029964447021484375, 'DSJC0125.9.txt': 0.0060160160064697266, 'DSJC0250.1.txt': 0.008329153060913086, 'DSJC0250.5.txt': 0.014041900634765625, 'DSJC0250.9.txt': 0.03464531898498535, 'DSJC0500.1.txt': 0.04312324523925781, 'DSJC0500.5.txt': 0.0843958854675293, 'DSJC0500.9.txt': 0.25736522674560547, 'DSJC1000.1.txt': 0.2107689380645752, 'DSJC1000.5.txt': 0.4820866584777832, 'DSJC1000.9.txt': 1.3390073776245117}\n", " DSATUR: 执行时间 = {'DSJC0125.1.txt': 0.19710993766784668, 'DSJC0125.5.txt': 0.2149949073791504, 'DSJC0125.9.txt': 0.24286270141601562, 'DSJC0250.1.txt': 1.5016090869903564, 'DSJC0250.5.txt': 1.6691169738769531, 'DSJC0250.9.txt': 2.004258632659912, 'DSJC0500.1.txt': 12.705793619155884, 'DSJC0500.5.txt': 13.611878156661987, 'DSJC0500.9.txt': 15.69128155708313, 'DSJC1000.1.txt': 102.37213277816772, 'DSJC1000.5.txt': 113.06330513954163, 'DSJC1000.9.txt': 113.55482411384583}\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": 6, "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.0065 0.2940 0.0156 0.0034 0.0020 0.1971\n", "MCP0125.5 0.0030 0.3150 0.0125 0.0020 0.0030 0.2150\n", "MCP0125.9 0.0030 0.3702 0.0171 0.0030 0.0060 0.2429\n", "MCP0250.1 0.0135 1.9738 0.0218 0.0092 0.0083 1.5016\n", "MCP0250.5 0.0154 2.3612 0.0877 0.0085 0.0140 1.6691\n", "MCP0250.9 0.0147 2.8340 0.0724 0.0105 0.0346 2.0043\n", "MCP0500.1 0.0501 15.5829 0.0800 0.0382 0.0431 12.7058\n", "MCP0500.5 0.0556 18.9277 0.1925 0.0468 0.0844 13.6119\n", "MCP0500.9 0.0604 22.3392 0.4155 0.0556 0.2574 15.6913\n", "MCP1000.1 0.2285 121.8734 0.3822 0.1491 0.2108 102.3721\n", "MCP1000.5 0.2249 151.4883 0.9123 0.1647 0.4821 113.0633\n", "MCP1000.9 0.2294 169.8972 1.4054 0.1765 1.3390 113.5548\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": 8, "metadata": {}, "outputs": [ { "data": { "image/png": "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5/HHH7f+/fu7svZrr73WVe/quXTv3j1BqTiiL6aDa/niiy9c171mzZoFlilonjJligusg2lQv84wqclA8eLFE535CaUxDcHjGnbt2pUBzwAAAABANGmMcnA37uC4QsG1MsO1a9d281x//vnnbp7rZ555xu6+++4M2yc/iFfgrGGwakz23HPP2RNPPJFgu3vvvdeNndZQWPWjUhm7xlo/9NBDGbZvSJs4TzOmx7BHH33UHTyaOF1t75cvX+4alumsjVrlqyzcp5b2OuujSdlr1arlzujUr18/yftWBjy4AYBPE78XLVo0w54TAAAAkBkOHDjgAstq1aolSkyl1XffmTVokPbbq99wSFNrIOY+E0q8aorn1MSGMT3mWplozfGmAPjrr792pRqLFy92Z3MUOOvMUugAfnUR1zx2mhNOGe/gSd1DDRgwwL1Y/uX333/PhGcFAAAAZF1FikT39kCsiunMtcZaqxQj9GyBmpzp91atWtnEiRPD3nbkyJF2/fXXu7IOv0nB8aTl7AQAAACQkzLXsmqV2e7daQusTzop3XYDiKnMdUyPufbj/uDOeP7vCrB1Ufv69957z03VpTmvQ1vqHz58OJP3GgAAAMjeCJCBLFYWronPZdSoUQkC7iFDhriguUGDBnbs2DF76qmn3OD/YOrulytXrgTzwQEAAAAAkBFiOnOtMdOnnHKK65A3ZswYK1++vK1cudKl8dVNTyXj6gretWtXN35aY7TVKn/hwoU2duxYt0zTeQEAAAAAkGODa9XAz5kzxx544AH76quv7Ndff7XChQu7MdRDhw51gbW89dZbrju4MtyffPKJnXTSSW7ZddddF+2nAAAAAADIAWK6oVlmo6EZAAAAspOMamgGZFUHcupUXAAAAAAAZAUE1wAAAAAARIjgGgjB9G1ILY4ZAAAAEFwDQVavXm2nnnqq6zgPpMSWLVvszDPPtIkTJ0Z7VwAAiAn7D++P9i4AUUFwjaiJtV56albQpk0b2759uxUpUiTau5NjHTlyxLISNcLQ5eqrr7bvvvsu2rsDAEBUzd0w10o+WdLmbZhnseb333+3uLg4a9euXZLbaDpfbfPUU08lWqeZibQu3MWfxSi1vv76a2vatKkVLFjQTjzxRLvttttsz549ibabMmWKnXvuuVagQAGrWLGim00puHKuZ8+eCfYnb968LmH0wgsvxNx37uyM4BpR8cu4X+yp0k+561hx/fXX2/r1623ChAl2+umnJ1h39OhRe/bZZ90fqXz58lmNGjXc7+n5xyrSx3juuefcH9O6detGtUx53rx5dvHFF9sJJ5zggs7q1avbtddea6tWrUryeT/zzDPueefJk8ddKleubA8//LDr5pge3nvvvST/M9Tl5ZdfTvPz0ImYL774wkqVKmWdO3e23bt3p8s+AwCQFT0w8wHbf2S/u441+v9aZs2aZfv37092G/86nH79+rkgPPjyxhtvpHp/li5dai1atLCtW7fa008/7QLkN99803r06JFgO303bdu2rR08eNB9N7ziiivctMThph3W90Htz5NPPum+T91111320EMPpXrfkEaaigv/2blzp6IYd42M8/MnP3uDcw32Btkgd63fo+2DDz5w7/3QoUMTrTt27JjXrVs3t16XGjVqeEWLFnU/9+7dO10eP9LHWLVqlVegQAEvd+7c3rfffutFy+eff+7Fx8e7/S5btqxXvXp1L0+ePO73QoUKeQsWLEj0vDt06ODWx8XFeXXq1PEaNGjgftay5s2be0eOHIl4v/r27evu7+STT/bq1auX6KL3P5LnIQsXLvRy5crl3X777RHvLwAA6WX//v3eL7/84q4z2qx1szwbZIGLfo8l7du3D3zXmjRpUqL1hw8f9ooXL+7W63vAjh07EqwfOXKkW6fvCemhadOmXsGCBb1NmzYFlj388MPuMZYuXep+37dvn/suUrFiRW/Xrl2B7fr16+e2W7Zsmfu9R48e7vd169YleIx27dp5+fLlS/RccrL9KfxMpCU2JHONTKVM9SdXfhLIxupav0czg33o0CG7//77rX79+nbPPfckWv/aa6+5M4Ca32727NluXPamTZusZcuWLuM5Z86ciPchksfQa9irVy93BlZnUs866yyLBmWZb7jhBsuVK5dNnz7d/vrrL1uzZo1t3rzZunbtanv37rVbbrklwW2GDx/uxiorS7948WL76aefbMmSJTZ//nwrVKiQey3GjBkT8b7pPkWv4w8//JDoctVVV0X0PKRRo0Z2++232+uvv24rV66MeJ8BAMhqHpr1kOWOy+1+1vXDsx62WKH/32fOnOmywqoQDJeZVs+dHTt22M033+yGqakUO6P8+eefNnfuXGvdurWVK1cusFyZ7ODvLl9++aX7DqLv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Jjsj7du3z7Zu3Wr//POPOwFw4403ugZtGouN2EFwDQAAACDFjhw4YLNuvtmNq85qQXUwdQX3S77VLEzNwTQuW9nsjh07WqNGjWzDhg0JbvPll1+6MdQKwnV7jdeeNm2aHT58OEP3VWXs6nRepkwZ99gK8tXxvE6dOhn6uEgdgmsAAAAAKRafP79d8MYbVvrMM93vgW7gWYwy1YUKFQr8XrNmTTcGWwH1HXfcYYsXL7bGjRvbv0HzcvtZagW1yiQ3aNDAdu3a5bqLZyRN/aUgfsCAAe73wYMHW6dOnTL0MZF6BNcAAAAAUuXEBg3sorFjreXIkVaqXr0sF2SrzHrbtm1WsWJFFySvWLHCDh06FBjH/NJLL7nx1ps2bbI33njDLT9y5IhNnTrV/az5sJVJVjdwyejScAX+F154oZvaq2zZsvbkk0+6DDpiC8E1AAAAgDQpc/bZWTLInj17thtTrcz066+/7qbq0vzRwa6++uoEHbkXLlxoO3bssGuuucZlkf2Luo+nJbjW7fz5sINpXuzixYuHvU3+/PndVGIrV660Tz75JNWPiYxFcA0AAAAgxwTZCmgffPBBy5Url918882BccuTJk1KsJ1f6u2v9wPonj17uixy8OW3336zNWvWpGo/ateu7Zqj7dy5M7BMgfzatWvduqTccsstrhnb0KFDU/V4yHgE1wAAAACydZD966+/2ujRo91Y5dNPP91lqRWcnnXWWXbJJZdYw4YNbciQIW5s84gRI+z++++366+/3qpXr+6CaT+4LliwoOsmHqxt27aB9anRv39/V5quzuMvvviiK0PXFGEq97733nuTvF3hwoXtzjvvtO+//941WEPsILgGAAAAkOFBtsXFRW1/NBe1guXhw4e78dIzZ84MBLCa0krl3bfeeqt99dVXrpmZSq4VVKupmabtUpOzn3/+2c19rem3grVp0yZs5vt41JH87bffduXpCrQ1nlrdwD/77DM744wzkr1t7969XVn5448/nurXAhknzgs3gVsOpU5/xYoVc6UZOlgBAACArEwdsdetW2fVqlVz43Wj5e/Fi235Sy/Z1uXLreOsWZa/RImo7QtytgMp/EykJTaMT8f9BAAAAIAkM9lH9u2z+IIFo707QIagLBwAAABApiCwRnZGcA0AAAAAQHYPrg8fPmwDBgxwnfpUE1++fHnr3r27m9A9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t+6RRx5J930ZOHBgIIAPDa51UqJhw4ZuXY8ePbzt27e75To2+vXr55YXLlzY27VrV6L7feaZZ9z6GTNmpPs+AwAAADnJzswMrmXu3Lne8OHDXaCtrGutWrUCQXaHDh2SvJ2C659//tnLkyePd+qpp2ZIdjCrBNdjx451jzl58uRE65TtVyWA1r/11luJMpV6nZs3bx7R46flMXRiRNuvWrUq0f099NBDbt3tt9/uxQodX7Vr13aVFCtWrHDLduzYEQigFy5cmOg2zz//vFun1yY9ff31124/FCCHC64/++wzt/ziiy9OlP3X8zjxxBPdem0X7r2sWLGi17p163TdZwAAACCn2ZmG2DBVY641zZaak02bNs39/tlnn7kOxRo7et9999mCBQusf//+dtppp7l5rgcPHuym4jp48GCCxl0nn3yy/fjjj9arVy83tlTTduVUGu9bvXp1u/jii8M2kPv777+tZMmS1q1btwTrdBuNE54/f36KG8yFk5bH+Oeff9y1xtOHKlGiRGB6qFih8di//PKL6xdwyimnuGU6VjVuvHbt2m4sc6hLL73UXeu12bZtW7rsh3oMaFy0xqS/8MILYbfR56Zfv36un0HwvPGisdeVKlVyP+/YsSPRbTUu+4YbbnCfT02HBwAAACDzpCq4njdvni1btswFgmeddZbt27cv8KVek2xruZqe6cv9888/bx988IFddtllLghT8ysFKW+99ZatXbvWjhw54gLx8ePHW926dS0n0kkHvaYK5EIDKfnuu+/ctTquh5vHWCc69Dp+8803ad6HtDyGH+BNnTo10fZffvmlu1aDrVh5jQcOHGgFCxZ0DfV8fuMvnegJR9PFpTd19FYjMx33aggYzvnnn29PP/102NdPJyw0XZuUK1cu7O31eVPwPn369HTeewAAAADpFlxrLmsFJQ899JDLoqmTsSgD2KpVK1u6dKkLZNRNXNMD+YG3tnviiSesWrVqLiOnYFudxPW75ujNqX777Tc7cOBA2MypXykgod3DferoLcHdr1MrLY9x0003uevbb7/dVSboxMqGDRusb9++LuBW8H3NNddYLHjnnXfcc9Qc6zoufeoMLpr6LJwVK1a4a91GWf1IqQu8prE7++yz7ZFHHknTfWiqLVUQqDqgSZMmYbdRUK4TCToJBgAAACBGg2vRlEvKAC5atCiQbdV8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tmxgO5V+6vEaNWqU5H2p66+mCEOMjL2OYtbap+EEdevWtQcffNA6dOiQqKv0gAED7IMPPnDBr6bu0phgNeB65ZVX3Pr+/fu7zGcwTT0lb775ZmAscVLUJMsP+lSB0alTp7DbaQxwJNNSKTuvoFXzPU+ePNkykj8Fn5ogpoSC1rvuuivQxCypqdFE02DdcMMN7ufkxj0He/rpp10mWScxVHav4Ffvp05kqFnj//73v8C2Z555pmtgpoZlCro15EQB/x9//GGjRo2yuXPnugqacNOj6f3+9ddfbeLEiSnaLwAAAGRxXgQKFy7sxcXFpemSK1cur2jRot6KFStS/HhLlixRqtD7+OOPA8vmzJnjxcfHew0aNPDmzZvnLV++3Lv++uvddt27d0/2/g4cOODt3LkzcPn999/d7fQzMtHU8z3vXfO8qU28WDBr1ix3jN5xxx1h1y9YsMCrWLGiO1aCL126dPGOHj2aaHt/ve73eN55551E9xvuMnDgwCTvQ+uOt83IkSPdNlWqVPEy2sknn+wea9KkSSnaftSoUW77Ro0aeceOHUt2W72m/muSGq+//rqXP3/+BK+p/ia99NJLYbf//PPPvXbt2nknnnii+3tTpEgRr2HDht7zzz/vHTlyJNH2a9eudX/fLrzwwlTtFwAAAGKDYsLUxoZx+ietgXmRIkXsggsucCWTKrFW6ad/Se73jRs3ukyQru+7775AiXdKSnZVFq6sUfAYVC1TN2VliXwa36mslKYKSymVhauTsUrNk8uWIZ39M9dsVhuzC74yO7GJxQKVfatZnhr09ezZM+z0SmqYpwZYOmauuuoql8HMStRkS5UnSTUhzO40xvrll19215pl4Oabb454vLyookGVNb///rvr+VClSpV02V8AAABknrTEhukSXKvENClr1qwJOzevugd3797d3X7GjBnHfSyNoVY5psoyk5peS42TVCKujsQqK/XHQ6YUwXUUHdlvFp+wBDua1NBMza809ldNqVQunp3o81S5cmVbvHhxqodmIGkaZ62/aZruS3+LgufpBgAAQNaRltgwQ7uFa7youh0vXLgw0Tq/CZmC75RQgKPgObmpfNQsSeOodd8DBw6MYM+R6WIosJb4+Hj79NNPXV+A9Mhmxho1bXv22WcJrNOZKmo077WqAQisAQAAcpZ0nefat23bNhfpqzGQmgSprHbZsmUJmkMpM6iGTSVLlkzRfX7yyScuc61mZkl5//33bfny5a6RUFbvsIzo0xkqNS/LjlRNEq6iBJHr169ftHcBAAAAUZDumWt1TlaHXZXRarzzkCFDbPXq1W5sdbB69eq5MddLly497n0qENfcws2aNUu2zFWPce6554adFgcAAAAAgJgIrtV4TGOljx07Fna9GotpvKEa+ehamWplcdTcR1MVTZs2LbBtxYoVrUKFCil6XI1fVCY8ual81CBNpa56HGXEAQAAAADILKlqaKaAWAGs5sbt2rWrayympk9+QzNllr/55hs33jB4bLQy15o7WPNiq2xb17GIhmYAAAAAgF0Z2dDswIEDdsMNN9h5551n//zzjw0bNsxNr6VuyoMHD7a///7bBdkq3w5tOqbycJVsb9q0ya655hpNSJv6ZwcAAAAAQIxK01Rce/fudYG0mj1NmTLFzV2dL18+69atm+vSHa7cW4H4ySef7OaoHj16tMt8xxoy1wAAAACAXZk9z7Vs3brVXnrpJRs+fLj9+++/lj9/fnvmmWfs1ltvTbTtxx9/bLt3747ZhmME1wAAAACAXdEIrn379+93Dc+efvppmzRpkrVs2dKyGoJrAAAAAMCujBxznRQ9mMq9W7RoYY8++qj99ttviQJrTbel7uHq5A0AAAAAQHYTcXCdN29e1w1czcqkcuXKibZRp/Bly5bZ22+/HenDAQAAAACQ/YJrzWUtBQsWTHKbPHnyWOfOne3777+3jRs3RvqQAAAAAADElPjUbNyhQweXgVZAHR+f8Kbr1693GeqkbN++3V2PGzfO7r777rTuLwAAAAAAWTu4VmfwDRs2hF2nqbZ++umn494HwTUAAAAAIEcH1xozrebiKvPOnTu3W6bfq1evbjVq1LDp06cneVtt17FjR1u0aJH9/vvvVqlSpcj3HgAAAACArBZcqyt4qKNHj7rruLg4q1KlSrK3b9WqlS1fvtxGjx5tDz74YGr3FQAAAACA7NnQbO/eve563759x922UaNGLoP9+uuv27FjxyJ9aAAAAAAAsl7mOhyViD/33HOWP3/+42572mmnWb169axXr1525MgRN40XAAAAAABZXZynVDKcXbt2WbFixWznzp1WtGjRaO8OAAAAACCLxIYRl4UnVy7++OOP24gRIzLqIQAAAAAAiAkZFlyr7FtNy157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AAAAAECECK4BAAAAAIgQwTUAAAAAABEiuAYAAAAAIEIE1wAAAAAARIjgGgAAAACACBFcAwAAAAAQIYJrAAAAAACyc3C9fv16i4uLS/YyatSoZNc3b9482k8DAAAAAJDNxVsMK126tI0dOzbsukceecRdN23aNOw2Bw4csNtuu81OPvnkDN9PAAAAAEDOFtPBdaFChaxr166Jli9atMhWrVpl48ePt+rVq7tLqKFDh1qePHls4MCBmbS3AAAAAICcKs7zPM+ymCZNmriS77lz54Zdv23bNqtRo4b17t3bHn300RTf765du6xYsWK2c+dOK1q0aDruMQAAAAAgq0hLbBjTmetwvvrqK5s/f77NmzcvyW2eeuopF3z3798/2fs6ePCguwS/gAAAAAAAZKuGZuE8+eSTds4559j5558fdv3u3bvttddes5tvvtmKFCmS7H098cQT7myEf6lUqVIG7TUAAAAAIDvLUsH10qVLbdasWXbPPfckuc0bb7xh+/btsz59+hz3/gYMGODS/P7l999/T+c9BgAAAADkBFmqLPzll1+2smXLWseOHcOu1/Dx4cOHW4cOHax8+fLHvb98+fK5CwAAAAAAOSJzrWz0J598YldddZXlzp077DYah71u3Tq75pprMn3/AAAAAAA5V5YJridMmGB79uyxq6++OsltNN918eLFrU2bNpm6bwAAAACAnC3LBNfKWpcpU8Y1Mwvn2LFjLgBv3bo1pd4AAAAAgEyVJYLrI0eO2MyZM61Zs2ZJbrNkyRI3v3Vy2wAAAAAAkGOD66+//trNQd20adMkt5kyZYq7Tm4bAAAAAAAyQpynFttwFMBrvmtNy1W0aNFo7w4AAAAAIIvEhlkicw0AAAAAQCwjuAYAAAAAIEIE1wAAAAAARIjgGgAAAACACBFcAwAAAAAQIYJrAAAAAAAiRHANAAAAAECQAgUK2GeffeauU4rgGgAAAACACBFcAwAAAAAQIYJrAAAAAAAiRHANAAAQJYcPH472LiAHyGrHWVbbX2RNhzPgOCO4BgAAiILVq1fbqaeeagsXLoz2riAbW7RokdWqVcsdb1kBnwtkhokTJ9oZZ5xhW7duTdf7jU/XewMAAMBx7dy509q0aWPbt2+3IkWKJFq/bds2mzx5sv36668WHx9v5513nrVo0cLy5MkTlf1FbFqzZo198cUXtnnzZitcuLC1bt3aGjRokGAbLddx1rZtW/v222+tWLFillU/F5E4cuSI+yxl1AmMGTNm2N69e61cuXJ26aWXWpUqVTLksXB8y5cvtylTprjjqESJEta+fXt3wiaYPgc6kdOhQwebNWtW+v1t9RCwc+dOTy+JrgEAADJKp06dvPj4eG/27NmJ1k2ePNkrXry4+04SfGnQoIG3YcOGZO932bJlXpEiRbyBAwd6GW316tVe4cKFvWbNmiW5zahRo7x69ep5+fLl88qXL+898MAD3sGDB71o0H6GvqbhLqHP58Ybb0x2+x9//DHifdP72r17d69cuXJenjx53Gt10UUXeVOnTk3yNo899piXK1euRPvTtWvXRK/xnDlz3PHWuXNnL6t+LsJp27ate87r1q1LtO7IkSPe008/7Z1yyinuPrVdpUqVvIceesjbv39/uuzv7t273T6Hvgd6D5977rmwtznppJOSPJZKlizpZbYqVaqk6HPRo0ePBLfT8Znc9rt374543/TZ0utbqlQpL2/evO79u+yyy7xvv/027PaHDx/2br/99kT7EhcX591zzz2Jtn/vvffc+n79+oW9v0OHDnmfffaZu04pgusgBNcAACCjffDBB+77xtChQxOt+/XXX738+fN7BQsW9J566invu+++c1/uGjZs6G7TokWLJO/3r7/+8ipXruy2y+jgWoHLueeeGzYY9T344IOBL7faLwUO+vnSSy/1oqFXr14u0E/q4r92ChqCnXnmmS6ITep2OskQifXr13tlypRxj12sWDEXDBYqVCjw2j3//POJbjNy5Ei3rlq1at67777r/fDDD95bb73llS1b1i0fPHhwotvoeNO6jz/+2Mtqn4twXn755cBrFBpcHzt2zOvQoUMgsKpTp447OaWftax58+buGI6UAk7d3wUXXOBNmTLFW7JkifvsKbjW8tCTBDt27HD7ULRo0bDHkvYrs7Vp0ybZz4V/TOkkU7ASJUq4v1VJ3W7fvn0R7ZdeS/9zoOBaJyX0ePo9d+7c3ieffJLoNnrttb5+/frexIkT3d9PneTQCUctHz16dKLb3HLLLe7z/c033yRaR3AdIYJrAACQkZRRrFq1qvvyF+7LfevWrd13kQkTJiRYvmvXLvcFU+vCBXNaVrt27UCwkdHBtf8lNqngWtl3rVPG8MMPP3TL9AVVWVUtV0Y71vjB2Pjx4wPLDhw44AIlBbwZRScb9LjKRCso9F+rZ5991i1X1n/Tpk2B7ffu3esCGwUMoZUMCxcudLepWLFiosfR8abjrnr16qkKFmLhcxHql19+8QoUKJBkcP3SSy+55TVq1EiQ5VywYEEgYHv77bcj2uevv/7a3Y9OfIVWCjz++OOBKoJgM2fOdMtvvvlmLyvQ8aiTSzohsHTp0sDytWvXuuehv1cZpW7duu4xxowZE1i2Z88el4HW8hNPPDFBBcLGjRvdZ1UnyXQSI1yG+vzzz0/0OMqwq2KkSZMmidYRXEeI4BoAAGSksWPHuu8aCj5DKUBQRibcl7zgwPuLL75IsHz69Oku2FLZ5Nlnn53hwbWCCgXNKglPKrhW5krrVIIbepJAQaEyrrHED0pDv3wrMNPyK664IkMeV9k9vZYqd/UD62A6FkKzzf4xFPra+hSMa72C8FA6drTu/fff97LK5yKUAtkzzjjDbe8HysHBtQIhZVuV5VQQGKpv377uNio3jrQSQvczY8aMZAPvYKpG0fLhw4d7WYEflIaeJNDxqOX33ntvhjzuqlWr3P2fd955Ydf7VSbBJ04effRRt0wVHOGqerSudOnSYe9P74fW632LNLimWzgAAEAmGTNmjFWvXt0uvvjiROuqVq1qu3btsnHjxoW97e+//+6uS5UqlWD5o48+6prxTJ061TWDykh79uyxrl272rFjx+yFF14Iu83KlStt2bJlljt3buvdu3eCdWpS1aVLF1u3bp39/PPPFiv69+/vrp9++ukEy9UATM4888wMeVw1XFKjrdKlS1tcXFyi9WrGFDplkF7/LVu2BPY5mJYfPHjQChYs6C6hdHzo+Bs9erRllc9FqIceesi+//5769Gjh5111lmJ1uszdMcdd9izzz5r1apVS7TeX7Zjx46I9vnNN9+0DRs2uEaDKf2sZvTxlJ4OHTpkDz74oOXPn9+GDBmSqc/jn3/+cddlypQJu/6EE05I9LnQvm7atMl9PlL6fvi6d+/uGv+lx+eC4BoAACATKOiZN2+e6yQcLpASBUQKtEKpE/Evv/xiJ554otWvXz/Buk6dOrlAtVmzZpbR7rzzTtehWoFduKBCvvvuO3etaW7CPZdzzjnHXS9YsMBigbptz58/3zp37hzYN9+SJUvcdaNGjTLksfVlX8GL3j8FBqFBov8a1atXL9HtFAyEeumll9z1RRddFPbxdNxdcsklNmfOHBc8ZZXPhU/7rRMgNWvWtJdffjnsNiVLlrQHHnjAbr311rDr1YFf1NU7UpUrV060TJXBw4cPdz+3atUq0fGUL18+99mIdSNGjLC1a9fa7bffnuh5ZvTnolKlSu5ax/++ffsSrNMJDb2HOqFYu3btBOv0nubNmzfJz0Xo++HTZ6lly5buBGWkCK4BAAAywW+//WYHDhxI1RdSTU2kDNmVV15puXLlstdeey3Rl8c+ffq4gCKjTZgwwd5++207++yz7ZFHHklyuz///NNdn3766WHX16hRw12vX7/eYsHQoUPd9X333ZdonR9EjBo1yk466SQXCCubdsUVV7jplyKl9/K6665zAWbHjh3diQkFEz/++KM7aaI5eDWNUGgQES4zN2DAAHv88cdd4P3MM88kua2Ov/3797sKg6z0uVCmWRlGVUS8//77YU8uHI9eZ78yRFMwpTdl1PW+6STAueeea7fddltg3b///uuCVVUjKLtaoUIFdzwpY69M+x9//GGx4ujRo+4khgLYu+++O9HJg6VLl1qBAgXs4YcfdlOO6XlUrFjRevbsGTh5EWlwrSqLv//+233WdJ+a5kyfOX1OdGLo5ptvPu60cjq2brrpJhs7dqw7IaP9TYqOP70/u3fvjmznU1xAngMw5hoAAGSUTz/91H3PUBfclND4TL+7sa79xmApaTSW3mOu1VBL3b41XtpvqKZxruHGXD/yyCNuuabdCkedrcON44wGdQjWvoQb567mSRoD70+tpGmfbrrpJjcu239P1LU7Umqapo7F4aYPuv7668OOnQ52ySWXBG6jsffqOJ8cfxz5559/7mWlz8XVV1/ttnvyyScTTa8WbiqucIYNG+a2P/nkk9OlW3gwvweBLo0aNUoUT3z55ZcJ3qcrr7zSjdtWszwtUwfx5cuXe7FAf2u0T926dUu0TseX/zw05r1jx46uk7gan5mZ6/0wbdq0iPdh+/bt7r5DPxf6LN5///3Hff9OO+20wG3U2C64KWA4/jjy4Kn1GHMNAAAQo/yMSNGiRVO0vTLE11xzjct0KVt0//33u7HMmU2PrfGt27Zts1deeSWQeU5uewk35leU8fLHb0ebn+Ht169f2CykxpbXqVPHlcKrfPz11193JcwTJ060+Ph4N6Zc2eVIbNy40b7++uuw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", "text/plain": [ "
" ] }, "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", " # 替换算法名称\n", " display_name = alg.replace('EoH-MCP', 'EoH-GCP').replace('FunSearch-MCP', 'FunSearch-GCP').replace('AAE-MCP', 'AAE-GCP')\n", " plt.scatter(x, y,\n", " color=colors[i % len(colors)], # 使用取模确保不会越界\n", " marker=markers[i % len(markers)],\n", " s=100,\n", " label=display_name)\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": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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AABQJBcmAwAARRIzAABAkcQMAABQJDEDAAAUScwAAABFEjMAAECRxAwAAFAkMQMAABRJzAAAAEUSMwAAQJHEDAAAUCQxAwAAFEnMAAAARRIzAABAkcQMAABQJDEDAAAUScwAAABFEjMAAECRxAwAAFAkMQMAABRJzAAAAEUSMwAAQJHEDAAAUCQxAwAAFEnMAAAARRIzAABAkcQMAABQJDEDAAAUScwAAABFEjMAAECRxAwAAFAkMQMAABRJzAAAAEUSMwAAQJHEDAAAUCQxAwAAFEnMAAAARRIzAABAkcQMAABQJDEDAAAUScwAAABFEjMAAECRxAwAAFAkMQMAABRJzAAAAEUSMwAAQJHEDAAAUCQxAwAAFEnMAAAARRIzAABAkcQMAABQJDEDAAAUScwAAABFEjMAAECRxAwAAFAkMQMAABRJzAAAAEUSMwAAQJHEDAAAUCQxAwAAFEnMAAAARRIzAABAkcQMAABQJDEDAAAUScwAAABFEjMAAECRxAwAAFAkMQMAABRJzAAAAEUSMwAAQJHEDAAAUCQxAwAAFEnMAAAARRIzAABAkcQMAABQJDEDAAAUScwAAABFEjMAAECRxAwAAFAkMQMAABRJzAAAAEUSMwAAQJHEDAAAUCQxAwAAFEnMAAAARRIzAABAkcQMAABQJDEDAAAUScwAAABFEjMAAECRxAwAAFAkMQMAABRJzAAAAEUSMwAAQJHEDAAAUCQxAwAAFEnMAAAARRIzAABAkcQMAABQJDEDAAAUScwAAABFEjMAAECRxAwAAFAkMQMAABRJzAAAAEUSMwAAQJHEDAAAUCQxAwAAFEnMAAAARRIzAABAkcQMAABQJDEDAAAUScwAAABFEjMAAECRxAwAAFAkMQMAABRJzAAAAEUSMwAAQJHEDAAAUCQxAwAAFEnMAAAAUaL/DzNA2fo2fTFIAAAAAElFTkSuQmCC", "text/plain": [ "
" ] }, "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 }