Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/leejiajia11/romanianvacation_problem-python-
本实验要求用广度优先算法、深度优先算法和A*算法求解“罗马尼亚度假问题”,即找到从初始地点 Arad到 目的地点 Bucharest 的一条最佳路径
https://github.com/leejiajia11/romanianvacation_problem-python-
Last synced: about 1 month ago
JSON representation
本实验要求用广度优先算法、深度优先算法和A*算法求解“罗马尼亚度假问题”,即找到从初始地点 Arad到 目的地点 Bucharest 的一条最佳路径
- Host: GitHub
- URL: https://github.com/leejiajia11/romanianvacation_problem-python-
- Owner: Leejiajia11
- Created: 2024-11-21T08:11:26.000Z (about 2 months ago)
- Default Branch: main
- Last Pushed: 2024-11-21T08:21:29.000Z (about 2 months ago)
- Last Synced: 2024-11-21T09:21:37.244Z (about 2 months ago)
- Language: Python
- Size: 2.48 MB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# 实验-基于三种搜索算法解决罗马尼亚度假问题(python)
# Romanian vacation problem based on three search algorithms# 实验报告
---
## 一、实验目的
1. 探索和比较不同路径搜索算法(BFS、DFS、A*)在给定城市网络中的性能表现。
2. 通过实际应用分析各算法的路径选择效率、运行时间和路径代价。
3. 使用可视化手段对算法性能进行直观对比,增强对算法特性的理解。
4. 实现具有用户交互功能的路径搜索工具,为后续优化研究提供基础。---
## 二、实验内容
1. **设计和实现搜索算法**:
- 实现三种经典的路径搜索算法:广度优先搜索(BFS)、深度优先搜索(DFS)、A*算法。
- 确保各算法能够在任意起点和终点之间计算路径。
2. **添加用户交互功能**:
- 构建一个图形用户界面(GUI),允许用户选择起点、终点和算法类型。
- 提供实时输出的算法性能数据,包括路径、运行时间和路径代价。
3. **比较和分析算法性能**:
- 对不同算法的路径代价进行记录和可视化。
- 对算法的优缺点进行分析和总结。---
## 三、使用仪器、材料
1. **硬件**:
- 一台运行 Windows 或 macOS 系统的计算机。
- 显示器(分辨率 ≥ 1920×1080)。
2. **软件**:
- Python 编程语言,版本 ≥ 3.8。
- 必要库:`tkinter`、`matplotlib`、`heapq`、`collections`。
3. **开发环境**:
- PyCharm 或 Visual Studio Code。
4. **实验数据**:
- 城市网络图的距离表(如代码中 `city_distances` 提供的数据)。---
## 四、实验过程原始记录
### 1. 数据结构与算法实现
#### 城市网络数据
使用邻接表表示城市距离,确保可以快速查询任意城市之间的连接及代价。#### 算法实现
- **BFS**:采用队列(`deque`)存储路径,保证广度优先搜索的特性。
- **DFS**:使用递归形式实现深度优先搜索,避免循环路径。
- **A\***:基于启发函数(直线距离)与累积代价计算最优路径。---
### 2. 实验步骤与结果
#### 实验步骤
1. 运行实验代码,启动路径搜索 GUI。
2. 输入起点、终点和算法选择(可选择单算法或全部算法)。
3. 点击运行后记录各算法的结果,包括路径、运行时间和代价。
4. 将结果可视化,生成路径代价对比图。#### 实验结果
以 **Arad** 为起点,**Bucharest** 为终点,得到以下结果:
| **算法** | **路径** | **运行时间(秒)** | **路径代价** |
|----------|----------|--------------------|--------------|
| BFS | `['Arad', 'Sibiu', 'Bucharest']` | 0.0001 | 450 |
| DFS | `['Arad', 'Timisoara', 'Lugoj', 'Mehadia', 'Drobeta', 'Craiova', 'Pitesti', 'Bucharest']` | 0.0002 | 621 |
| A* | `['Arad', 'Sibiu', 'Fagaras', 'Bucharest']` | 0.0001 | 418 |#### 可视化图表
**路径代价柱状图**:
- 横轴:算法名称
- 纵轴:路径代价生成的图表显示 A* 的路径代价最低,BFS 次之,DFS 代价最高。
---
### 3. 数据分析与讨论
1. **运行时间**:
- BFS 和 A* 的运行时间较短,接近实时输出。
- DFS 因其递归调用,在深层搜索时稍显耗时。2. **路径代价**:
- A* 的路径代价最低,得益于启发式函数的优化。
- DFS 因盲目深入而导致较长路径。
- BFS 能够找到较优路径,但未进行进一步优化。3. **算法特性**:
- BFS 適合寻找无权图的最短路径。
- DFS 在目标不明确时容易导致搜索效率低下。
- A* 是性能最优的算法,兼顾搜索效率和路径代价。---
## 五、实验结论
1. **A\*** 在性能和路径代价方面表现最佳,适合大规模、复杂网络的路径搜索。
2. **BFS** 是简单、直观的算法,适用于无权图的路径搜索问题。
3. **DFS** 虽有其应用场景,但在路径最优搜索问题中表现一般。通过此次实验,成功构建了一个交互式工具并验证了各算法的理论与实际表现,为进一步研究更复杂的搜索问题奠定了基础。
---
## 六、参考文献
1. Stuart Russell, Peter Norvig. *Artificial Intelligence: A Modern Approach*.
2. Cormen, Leiserson, Rivest, Stein. *Introduction to Algorithms*.
3. Python 官方文档:[https://docs.python.org/](https://docs.python.org/)
4. Matplotlib 可视化手册:[https://matplotlib.org/](https://matplotlib.org/)