lead/frame_plot/show_frame.ipynb

281 lines
218 KiB
Plaintext
Raw Normal View History

2025-03-17 16:40:01 +08:00
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"from matplotlib.patches import Polygon\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",
"np.random.seed(42)\n",
"n_points = 50\n",
"points = np.random.rand(n_points, 2) * 10\n",
"\n",
"# 识别帕累托前沿\n",
"def is_pareto_efficient(costs):\n",
" is_efficient = np.ones(costs.shape[0], dtype=bool)\n",
" for i, c in enumerate(costs):\n",
" if is_efficient[i]:\n",
" is_efficient[is_efficient] = np.any(costs[is_efficient] < c, axis=1) # Remove dominated points\n",
" is_efficient[i] = True\n",
" return is_efficient\n",
"\n",
"# 获取帕累托前沿点\n",
"pareto_front_mask = is_pareto_efficient(points)\n",
"pareto_front = points[pareto_front_mask]\n",
"\n",
"# 创建图形\n",
"plt.figure(figsize=(10, 8))\n",
"\n",
"# 绘制非帕累托前沿点\n",
"plt.scatter(points[~pareto_front_mask, 0], points[~pareto_front_mask, 1], \n",
" c='lightgray', s=100, label='种群个体')\n",
"\n",
"# 绘制帕累托前沿点\n",
"plt.scatter(pareto_front[:, 0], pareto_front[:, 1], \n",
" c='red', s=100, label='帕累托前沿个体')\n",
"\n",
"# 连接帕累托前沿点\n",
"sorted_front = pareto_front[np.argsort(pareto_front[:, 0])]\n",
"plt.plot(sorted_front[:, 0], sorted_front[:, 1], 'r--', alpha=0.5)\n",
"\n",
"# 添加密度分布示意\n",
"for point in pareto_front:\n",
" circle = plt.Circle(point, 0.5, color='blue', fill=False, alpha=0.2)\n",
" plt.gca().add_patch(circle)\n",
"\n",
"# 添加箭头和标注\n",
"plt.arrow(8, 8, -0.5, -0.5, head_width=0.2, head_length=0.2, fc='k', ec='k')\n",
"plt.text(8.2, 8.2, '优化方向', fontsize=20)\n",
"\n",
"# 设置标题和标签\n",
"# plt.title('帕累托前沿维护策略示意图', fontsize=14, pad=20)\n",
"plt.xlabel('算法性能指标', fontsize=20)\n",
"plt.ylabel('运行时间', fontsize=20)\n",
"\n",
"# 添加图例\n",
"plt.legend(loc='upper right', fontsize=20)\n",
"\n",
"# 添加网格\n",
"plt.grid(True, linestyle='--', alpha=0.3)\n",
"\n",
"# 设置坐标轴范围\n",
"plt.xlim(-0.5, 11)\n",
"plt.ylim(-0.5, 11)\n",
"\n",
"# 保存图片\n",
"plt.savefig('pareto_front_strategy.png', dpi=300, bbox_inches='tight')\n",
"plt.close() "
]
},
{
"cell_type": "code",
2025-03-17 16:48:24 +08:00
"execution_count": 28,
2025-03-17 16:40:01 +08:00
"metadata": {},
"outputs": [],
"source": [
"text1 = '''贪心\n",
"回溯\n",
"高度优先\n",
"图着色\n",
2025-03-17 16:48:24 +08:00
"饱和度\n",
2025-03-17 16:40:01 +08:00
"回溯\n",
2025-03-17 16:48:24 +08:00
"相邻约束\n",
2025-03-17 16:40:01 +08:00
"图着色\n",
"贪心\n",
"回溯\n",
"高度优先\n",
2025-03-17 16:48:24 +08:00
"优先队列\n",
2025-03-17 16:40:01 +08:00
"使用次数\n",
"颜色选择\n",
"贪心\n",
"相邻未着色\n",
"颜色选择\n",
"冲突减少\n",
2025-03-17 16:48:24 +08:00
"饱和度\n",
2025-03-17 16:40:01 +08:00
"动态更新\n",
"可用颜色\n",
2025-03-17 16:48:24 +08:00
"优先队列\n",
"相邻约束\n",
2025-03-17 16:40:01 +08:00
"饱和度\n",
"度数选择\n",
2025-03-17 16:48:24 +08:00
"相邻约束\n",
2025-03-17 16:40:01 +08:00
"颜色使用\n",
2025-03-17 16:48:24 +08:00
"Welsh-Powell\n",
"Welsh-Powell\n",
2025-03-17 16:40:01 +08:00
"动态更新\n",
"可用颜色\n",
"相邻冲突\n",
"颜色选择\n",
2025-03-17 16:48:24 +08:00
"饱和度\n",
2025-03-17 16:40:01 +08:00
"动态更新\n",
2025-03-17 16:48:24 +08:00
"相邻约束\n",
2025-03-17 16:40:01 +08:00
"颜色选择\n",
"'''\n",
"text2 = '''\n",
"贪心\n",
2025-03-17 16:48:24 +08:00
"度数优先\n",
2025-03-17 16:40:01 +08:00
"颜色分配\n",
"图着色\n",
"最低可用颜色\n",
"优化\n",
"优先队列\n",
"颜色分配\n",
"贪心\n",
"图着色\n",
2025-03-17 16:48:24 +08:00
"度数优先\n",
"邻居历史\n",
2025-03-17 16:40:01 +08:00
"最小颜色\n",
"图着色\n",
"贪心\n",
2025-03-17 16:48:24 +08:00
"贪心\n",
2025-03-17 16:40:01 +08:00
"邻居历史\n",
"颜色最小化\n",
"图着色\n",
"颜色选择\n",
"Welsh-Powell\n",
2025-03-17 16:48:24 +08:00
"度数优先\n",
2025-03-17 16:40:01 +08:00
"颜色分配\n",
"贪心\n",
"图着色\n",
"贪心\n",
"迭代着色\n",
"相邻约束\n",
"图着色\n",
"颜色选择\n",
"Welsh-Powell\n",
"贪心\n",
"降序着色\n",
"图着色\n",
"颜色分配\n",
"贪心\n",
"度数优先\n",
"最小颜色\n",
"相邻约束\n",
"图着色'''"
]
},
{
"cell_type": "code",
2025-03-17 16:48:24 +08:00
"execution_count": 36,
2025-03-17 16:40:01 +08:00
"metadata": {},
2025-03-17 16:48:24 +08:00
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA5AAAAMBCAYAAACZdlvCAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjEsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvc2/+5QAAAAlwSFlzAAAPYQAAD2EBqD+naQABAABJREFUeJzsnQeYFMX2xQt2gSUnAQWVoKKIEQNBUAEFAcGcI2aeOT9zjg8MYI6YMWACJAqIgJgAMyKi4lNQQHKGnf/3K/61r3eYPD09VT33fN+wy4bZnp7uqnvuPffcCpFIJKIEAoFAIBAIBAKBQCBIgorJfkAgEAgEAoFAIBAIBAIgBFIgEAgEAoFAIBAIBClBCKRAIBAIBAKBQCAQCFKCEEiBQCAQCAQCgUAgEKQEIZACgUAgEAgEAoFAIEgJQiAFAoFAIBAIBAKBQJAShEAKBAKBQCAQCAQCgSAlCIEUCAQCgUAgEAgEAkFKEAIpEAgEAmdRWlqa70MQxMHixYvzfQgCgUAgyAGEQAoEAoGF2LBhg1qxYoWvz3nnnXeqAw88UF1//fVq0aJFymU8/PDDqk2bNuryyy9P+3c3btyovvjiC3XHHXeoJ554QhUqTj/9dFWhQgXVq1cvX5/3P//5j9puu+1Uo0aN1MKFC1XQ4P3lGB5//HE1b948/bVvvvlGzZw505fn53luvPFG/Vi5cqUvzykQCAQuoTjfByAQCASCLTF//nzVrFkztfXWW6s33nhDdezYMevnJJj++OOP1S+//KLJpMv44Ycf1IwZMzQBiocFCxboYJ9K2H//+181Z84c/XvTp09Xa9as0T9To0YNdcQRR6htttlGFRqqVatW7qNfaNWqlT7fYOjQoeqCCy5QQaJixYrq2muvVZFIRE2ZMkX9888/6qCDDlIlJSVq8uTJaqeddsr6Prrrrrv051dddZVPRy0QCATuQAikQCAQWIiqVavqABgi2aBBA1+e8/vvv9cfjzrqKB1kZwOC8LVr16oqVaqo4uLst5JNmzZpUte9e3f17LPPlvvekiVL9LmAAPDg2A899FD15JNP6srSunXr9DFQeeI5kLXWq1dPffDBB+rss88u91yQJSpjnNOtttpK1a1bV02aNEmdcMIJymVAknjN6aBy5crlPvqFnj176uTHr7/+qoYMGZIXAsn7vGrVKlWnTh19rXbq1EmNGDFCV1unTZuW9rnyon79+uXuU4FAICg0CIEUCASCHAGChcQN0kOgWVRUVPY9SI4hPHz0BqXRgSlEJxGWLVumKz61a9fWj5o1a8YkaFTsQNeuXZMeO6Rs+fLl6u+//1atW7fe4vuQulz0uBH0R+Okk05So0ePjiv15fx6QbVp4sSJZV/fc889dRWXKmOsc+M6kCS/+OKLasyYMWrXXXdN+fcM8U81AcDfOOOMM9I6to8++ihhldgLQ/q84H3v0qWLqlSpUlp/l8oyz0WCg9998803Vbt27XTCYdSoUerkk09WmYLnNPAjeSIQCASuQVY+gUAgyBEIVKn2JcM+++yje/K88AamyaocyFJ79+6d8nEdeeSRKh1A0qIDZaqZBOYE06YqGAv0iSH3u/LKK1X//v3j/o3169er1atXJz0WjsNLxKMJOZVKA1NZg0y0bNlShRFUT++55x79Of2tEC6up1RgiF2qBK9WrVpln++8887KLyxdulT99ddf5cg97+VZZ52lXnrpJXXvvfdqSWo64Ll4TnOtcA+99tpr6rvvvlOHHHKITuxwXSQDvcJc396f9RLI6GvxnXfeSemeFwgEApchBFIgEAhyBIJLAlmCV4JQbxWFiqCpQCbrQUunygEZiCVJhARCsiB65jioMkYHxNE/Hw8NGzZUfoJjjielfOutt/Tr4jwii2zRokW57//888+635EKE8fNeQWxiGbYAGnEUOiyyy7TFWGqy1Qi999/f/39p59+Wt13330xf9dUkN9++23dGxgLgwYNUj169NCfmyQB53XWrFm+vQaMjPr161fu/uCaN32qt99+u5YYI4t95ZVX1Kmnnpryczdv3jzm12+44YaU+oD5mXfffVfdfffd6sQTT9TnIBbhJnEBycW8hyot8upY95VAIBCEAUIgBQKBIEegKogMNNUqDIAkRQeeyfoV6RtExsrvxQpaIQqQLo5l8ODB6rTTTtMBL1U5jGXGjRsX06QHkosMMBGBpTr07bffxv3+V199pT/SjwjJiweC88MPPzzm90z157jjjtPB/O+//67NhQwI1gncIVMTJkwok64WAoEEl1xyib5uzj//fH0dcD2MHz9e7b333ppQQ7ATAbffVBx/Y8mLDT788EN9LTz44INqt912i1nJO++889Sxxx6rH7GSBdGOppDXsWPH6td00UUXqeHDh5clWxo3bpzQDAepKn2he+21l5Z1m4SJeSSThYM//vhDE3Aq46+++qqWUscD59k4zr7wwgtq9uzZ6r333vOtf1kgEAisQkQgEAgEeccxxxyD9jKtx7Jly1J67n79+umf32uvvSKbNm0q+/qAAQP01zt16pTxcffu3Tvt4471ePjhh5P+rUsuuUT/7F133VXu661bt9ZfHzlyZLmvv//++/rrBxxwQKQQ8Pjjj5edz8MOO0x/7emnn9b/32effbb4+SuvvFJ/74wzztjie/Xr19ffGzduXNnX3n33Xf08bdu2Lfezzz77bKRy5cr65/k4fvz4LZ7viCOOKDu2hg0bRm6++ebIX3/9pb83Y8aMyD333BP5z3/+s8XvDRo0qOz33nnnncjw4cP15xdeeGHCc3HUUUfpn5s0aVIkUxx33HH6OZo0aRJZtGhR2de/+eabsmOKxgMPPBApKirS32vRokXkhx9+yPjvCwQCga2QOZACgUBgAagg4Q7atGlTtcMOO5STafJ/8zCSPOR+3p60eBg2bJiehwfuv//+ctVM3DG333573UNpfiZdmGqfGZsQ/UAqCOiBjPV9068XbYQTC3379tUfn3nmmbJeR0aS0NfG+aLy5kWqvX2JpLougfeTnlMkp4zP8MPkxVvFZdwJvbq4mAIMluj3w+mWHlYqnozN6Ny58xbPQ+WbXk0qh/weslSuPY4Zp9R///vfMUdiIG01xkCPPfZYylVlc28YOXMm/csY73C/vPzyy1uYXMUDc0mpPFavXl3NnTtXHXDAAWXnSyAQCMICIZACgUCQAyAbRZIXbezihemBxNH0kUce0RJPevyQlRpTHYgi/zcPTFMA4yeS4dNPPy2T3UHgomV7yAEfffRRTbQIfOmdSxd+uVDGex7ki8xuhCjSd8lx0gfH+UUW+frrr+ufgzT9+eefWq6JwQ/n1Zz3zz77TEteox88H4E+pD0suO2227SRi9+zHaOlrHfccYfacccdtaSYc4iE+PPPP1f77ruvPv8PPPCAJmC//fab/h1IIhJbSBWyUOSnSEmRH/M5RDKWxBnCCNmESL7//vvlEiA47XLtRj9uvfXWMgKJE7IBTsU4uiLZTpQ04Noy419IjBx88MFpnR9GheA+i3wVGS2mPUh8BQKBICyQHkiBQCDIAag8/Pjjjyn/PMYbVGkMTE9a9NgJ8/Vk1Ud6DjEeIdgnAKaC0qZNG13pwRDEVOfoO7zlllt00M3n9LBdeOGFKR+3eR5IAWQiGpA88Pzzz+setmgYghGvz3PkyJFb9J5xjNGACPMwgMwYAkl/Go6c8ZAKGXcFnMdcmbeQ8Ljmmmv0e2l6dnH0xcSHaqKXqJGwMAY9EPSffvpJEykqxU899ZR2WKWvEMJLYoT3OZ7T6jHHHKMf0VVlSHIsN1gSJebnzPVnqor0yJKEgch6j9kAYolJD8mI/fbbTx9fJqCyTh8qpkZUXPv06aN7heOZ+ggEAoFLEAIpEAgEOQByU8xfCOapokDkpk+fXkYu+RomNZAbqmXMKPTCmO9EkxtDIOONICDIhwwiFyQYRlZIJQiSCDA6wYQGow8jB+R7PO+AAQO0WQkD1/m8VatWKb9eKi08Mv1+PEAEkLcaF1uOGZKEsQkkBukv5wiyyGs355Pf4/wCCDRmLAb8H6kllTpITSr
"text/plain": [
"<Figure size 1200x800 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import matplotlib.pyplot as plt\n",
"import numpy as np\n",
"\n",
"plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签\n",
"plt.rcParams['axes.unicode_minus'] = False # 用来正常显示负号\n",
"plt.rcParams['font.size'] = 16 # 设置更大的字号\n",
"\n",
"# 定义要删除的关键词\n",
"keywords = ['着色', '颜色', '图着色',' ','优化']\n",
"\n",
"# 预处理文本,删除包含关键词的行\n",
"text1_lines = text1.strip().split('\\n')\n",
"text2_lines = text2.strip().split('\\n')\n",
"\n",
"text1_filtered = []\n",
"text2_filtered = []\n",
"\n",
"for line in text1_lines:\n",
" if not any(keyword in line for keyword in keywords):\n",
" text1_filtered.append(line)\n",
" \n",
"for line in text2_lines:\n",
" if not any(keyword in line for keyword in keywords):\n",
" text2_filtered.append(line)\n",
"\n",
"text1 = '\\n'.join(text1_filtered)\n",
"text2 = '\\n'.join(text2_filtered)\n",
"\n",
"\n",
"\n",
"# 统计text1和text2中的词频\n",
"text1_words = text1.strip().split('\\n')\n",
"text2_words = text2.strip().split('\\n')\n",
"\n",
"# 获取所有唯一的词\n",
"all_words = sorted(set(text1_words + text2_words))\n",
"\n",
"# 统计词频\n",
"text1_freq = {word: text1_words.count(word) for word in all_words}\n",
"text2_freq = {word: text2_words.count(word) for word in all_words}\n",
"\n",
"# 创建雷达图\n",
"plt.figure(figsize=(12, 8))\n",
"\n",
"# 计算角度\n",
"angles = np.linspace(0, 2*np.pi, len(all_words), endpoint=False)\n",
"\n",
"# 闭合雷达图\n",
"values1 = list(text1_freq.values())\n",
"values2 = list(text2_freq.values())\n",
"values1.append(values1[0])\n",
"values2.append(values2[0])\n",
"angles = np.concatenate((angles, [angles[0]]))\n",
"\n",
"# 绘制雷达图\n",
"ax = plt.subplot(111, projection='polar')\n",
"ax.plot(angles, values1, 'o-', linewidth=2, label='AAD', color='skyblue', alpha=0.7)\n",
"ax.fill(angles, values1, alpha=0.25, color='skyblue')\n",
"ax.plot(angles, values2, 'o-', linewidth=2, label='EoH', color='red', alpha=0.7)\n",
"ax.fill(angles, values2, alpha=0.25, color='red')\n",
"\n",
"# 设置刻度标签\n",
"ax.set_xticks(angles[:-1])\n",
"ax.set_xticklabels(all_words, fontsize=20)\n",
"\n",
"# 添加图例和标题\n",
"plt.legend(loc='upper right', bbox_to_anchor=(0.05, 0.05),fontsize=22)\n",
"# plt.title('词频分布雷达图对比', pad=20)\n",
"\n",
"plt.tight_layout()\n",
"plt.savefig('rador.png', dpi=300)\n",
"plt.show()"
]
2025-03-17 16:40:01 +08:00
}
],
"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
}