Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

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 的一条最佳路径

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/)