环境搭建:工欲善其事,必先利其器
说实话,每次带新人入门路径规划,我最怕听到的一句话就是:「老师,我代码跑不起来。」
十有八九,问题都出在环境配置上。不是 Python 版本不对,就是某个库没装好。所以这一章,咱们先把「地基」打牢。我带你一步步把 Python 环境、NumPy、Matplotlib 这些家伙伺候好。
Python 版本选择:别用太新的,也别用太旧的
我个人习惯用 Python 3.8 到 3.10 之间的版本。为什么?因为很多科学计算库对最新版 Python 的支持会慢半拍。我在项目中遇到过,Python 3.11 刚出时,某个关键库死活装不上,折腾了两天。
你想想看,咱们是来学路径规划的,不是来给 Python 当小白鼠的。所以稳妥点,用 3.9 或 3.10 就好。
虚拟环境:每个项目一个「小房间」
嗯,这里要注意。千万别把所有库都装到全局环境里。不同项目依赖的库版本可能打架。比如项目 A 要 NumPy 1.21,项目 B 要 NumPy 1.24,装在一起就乱套了。
我推荐用 venv 或者 conda 创建虚拟环境。下面是我常用的方式:
# 创建虚拟环境(在项目目录下执行)
python -m venv path_planning_env
# 激活环境(Windows)
path_planning_env\Scripts\activate
# 激活环境(Mac/Linux)
source path_planning_env/bin/activate
激活后,命令行前面会出现 (path_planning_env) 字样。这时候你安装的所有库,都只在这个环境里生效。干净又卫生。
NumPy 安装:矩阵运算的基石
说白了,路径规划里大量操作都是矩阵和数组运算。地图是二维数组,路径点是坐标数组,距离计算是向量运算。没有 NumPy,这些操作得自己写循环,效率低到哭。
pip install numpy
就这么一行。但我曾经遇到过安装失败的情况,原因是网络超时。这时候可以换国内镜像源:
pip install numpy -i https://pypi.tuna.tsinghua.edu.cn/simple
装好后,在 Python 里敲 import numpy as np,不报错就说明成了。你可以试试:
import numpy as np
arr = np.array([[1, 2], [3, 4]])
print(arr.shape) # 输出 (2, 2)
Matplotlib 安装:把路径画出来
算法跑完了,光看数字多没意思。你得把地图、障碍物、路径点都画出来,一眼就能看出算法对不对。Matplotlib 就是干这个的。
pip install matplotlib
同样,如果慢就加镜像源。装好后,咱们画个简单的散点图测试一下:
import matplotlib.pyplot as plt
import numpy as np
# 生成一些随机点
points = np.random.rand(10, 2)
plt.scatter(points[:, 0], points[:, 1])
plt.title("测试:随机点")
plt.show()
如果弹出一个窗口,里面有几个彩色点,那就恭喜你,环境搭好了。
pip install pyqt5 或者设置后端为 TkAgg。在代码开头加一行:import matplotlib; matplotlib.use('TkAgg') 就能解决。
开发工具推荐:选个顺手的「武器」
工具这东西,没有最好的,只有最顺手的。我列几个常用的,你挑一个用就行。
| 工具 | 适合人群 | 优点 | 缺点 |
|---|---|---|---|
| VS Code | 大多数开发者 | 轻量、插件丰富、免费 | 需要自己配置 |
| PyCharm | 专业 Python 开发者 | 开箱即用、调试强大 | 社区版功能有限 |
| Jupyter Notebook | 数据探索、教学演示 | 交互式、可视化方便 | 不适合大型项目 |
我个人习惯用 VS Code,配上 Python 插件和 Jupyter 插件,既能写脚本,又能跑 Notebook。你想想看,调试 A* 算法时,每一步的 open list 和 close list 都想看看,用 Jupyter 的单元格一步步跑,简直不要太爽。
Ctrl+Shift+P,输入「Python: Select Interpreter」,选择你刚才创建的虚拟环境。这样代码就能用上刚装的 NumPy 和 Matplotlib 了。
验证环境:跑一个完整的测试
最后,咱们写个完整的测试脚本,确保所有东西都正常。把下面的代码保存为 test_env.py:
import numpy as np
import matplotlib.pyplot as plt
# 创建一个 10x10 的网格地图
grid = np.zeros((10, 10))
grid[3:6, 3:6] = 1 # 中间放个障碍物
# 起点和终点
start = (1, 1)
goal = (8, 8)
# 画出来
plt.figure(figsize=(6, 6))
plt.imshow(grid, cmap='gray_r', origin='lower')
plt.scatter(start[1], start[0], color='green', s=100, label='起点')
plt.scatter(goal[1], goal[0], color='red', s=100, label='终点')
plt.legend()
plt.title('环境测试:地图与起终点')
plt.show()
print("环境搭建成功!")
print(f"NumPy 版本: {np.__version__}")
运行后,你应该看到一个灰色网格,中间有个白色方块(障碍物),左下角有个绿点(起点),右上角有个红点(终点)。
看到这个画面,就说明你的 Python、NumPy、Matplotlib 全部就位。咱们可以正式开始写 A* 和 Dijkstra 算法了。