QAOA量子近似优化算法项目¶
本项目实现了量子近似优化算法(QAOA),并对Qiskit和Qibo两种量子计算框架在解决MaxCut问题上的性能进行了比较。
项目概述¶
量子近似优化算法(QAOA)是一种混合量子-经典算法,旨在解决组合优化问题。本项目主要关注QAOA在解决MaxCut问题上的应用,并比较了Qiskit和Qibo两种量子计算框架的性能差异。项目包含了算法实现、基准测试、性能比较和可视化分析等多个方面。
主要功能¶
- QAOA算法在Qiskit和Qibo框架下的实现
- 针对不同量子比特数和QAOA层数的性能基准测试
- 两种框架在运行时间、内存使用、解决方案精度和最优解概率方面的比较
- 结果可视化和分析报告生成
文件结构¶
QAOA/
├── batch/ # 批处理脚本目录
│ ├── 启动Jupyter.bat # 启动Qibo环境的Jupyter Notebook
│ └── 启动Qiskit_Jupyter.bat # 启动Qiskit环境的Jupyter Notebook
├── docs/ # 文档目录
│ ├── QAOA_Benchmark_Report_PPT.md # 基准测试报告PPT版本
│ ├── QAOA_Benchmark_Report.md # 基准测试详细报告
│ ├── Qiskit_2.1.2_更新说明.md # Qiskit版本更新说明
│ └── README.md # 文档说明
├── images/ # 图像资源目录
│ ├── qaoa_final_results.png # 最终结果图表
│ ├── qaoa_qibo_results.png # Qibo结果图表
│ └── qaoa_results.png # 一般结果图表
├── notebooks/ # Jupyter笔记本目录
│ ├── QAOA_MaxCut_Benchmark.ipynb # QAOA MaxCut基准测试笔记本
│ ├── QAOA量子近似优化算法.ipynb # QAOA算法详细解释笔记本
│ ├── qibo_tutorial.ipynb # Qibo框架教程
│ └── quantum_algorithms.ipynb # 量子算法综述
├── results/ # 结果数据和图表目录
│ ├── comparison/ # 比较结果子目录
│ │ ├── plots/ # 比较图表
│ │ │ ├── energy_comparison.png # 能量比较图
│ │ │ ├── layers_impact.png # 层数影响图
│ │ │ ├── memory_comparison.png # 内存使用比较图
│ │ │ ├── probability_comparison.png # 概率比较图
│ │ │ ├── qaoa_performance_comparison.png # 性能比较图
│ │ │ ├── qaoa_runtime_comparison.png # 运行时间比较图
│ │ │ ├── resource_usage.png # 资源使用图
│ │ │ └── runtime_comparison.png # 运行时间比较图
│ │ ├── benchmark_comparison.csv # 基准测试比较数据
│ │ ├── qaoa_benchmark_results.csv # Qiskit基准测试结果
│ │ ├── qaoa_qibo_benchmark_results.csv # Qibo基准测试结果
│ │ ├── summary_report.md # 比较结果总结报告
│ │ └── ...
│ ├── probability_comparison.png # 概率比较图
│ ├── runtime_comparison_by_layers.png # 按层数的运行时间比较
│ ├── runtime_comparison_by_qubits.png # 按量子比特数的运行时间比较
│ ├── speedup_by_layers.png # 按层数的加速比
│ ├── speedup_by_qubits.png # 按量子比特数的加速比
│ └── ...
├── scripts/ # Python脚本目录
│ ├── path_utils.py # 路径处理工具模块
│ ├── qaoa_benchmark.py # Qiskit QAOA基准测试
│ ├── qaoa_qibo_benchmark.py # Qibo QAOA基准测试
│ ├── compare_qaoa_performance.py # 性能比较分析
│ ├── visualize_benchmark_results.py # 结果可视化
│ ├── plot_qaoa_comparison.py # 比较结果绘图
│ ├── qaoa_benchmark_with_cpu.py # 使用CPU的Qiskit基准测试
│ ├── qaoa_qibo_benchmark_with_cpu.py # 使用CPU的Qibo基准测试
│ ├── qaoa_qibo_benchmark_with_qibojit.py # 使用QiboJit的基准测试
│ ├── qaoa_qibo_benchmark_with_qulacs.py # 使用Qulacs的基准测试
│ ├── fix_matplotlib_chinese.py # 修复Matplotlib中文显示
│ └── ...
├── qaoa_env/ # 项目虚拟环境目录
└── README.md # 项目说明文档
核心脚本说明¶
基准测试脚本¶
- qaoa_benchmark.py: 使用Qiskit框架实现QAOA算法,并对不同量子比特数和层数进行基准测试
- qaoa_qibo_benchmark.py: 使用Qibo框架实现QAOA算法,并进行相同条件下的基准测试
- qaoa_benchmark_with_cpu.py: 使用CPU后端的Qiskit基准测试
- qaoa_qibo_benchmark_with_cpu.py: 使用CPU后端的Qibo基准测试
- qaoa_qibo_benchmark_with_qibojit.py: 使用QiboJit后端的基准测试
- qaoa_qibo_benchmark_with_qulacs.py: 使用Qulacs后端的基准测试
比较和可视化脚本¶
- compare_qaoa_performance.py: 比较Qiskit和Qibo在QAOA实现上的性能差异
- visualize_benchmark_results.py: 可视化基准测试结果
- plot_qaoa_comparison.py: 生成QAOA比较图表
- visualize_qaoa_comparison.py: 可视化QAOA比较结果
工具脚本¶
- path_utils.py: 提供统一的路径处理函数,确保所有脚本使用相对路径或动态路径获取方式
- fix_matplotlib_chinese.py: 修复Matplotlib中文显示问题
- matplotlib_chinese_config.py: Matplotlib中文配置
路径处理机制¶
为确保脚本在不同环境下都能正确运行,本项目采用了以下路径处理机制:
- Python脚本:使用
path_utils.py模块提供的函数处理路径 get_project_root(): 获取项目根目录的绝对路径get_data_path(): 获取相对于项目根目录的文件路径-
ensure_dir_exists(): 确保目录存在,如不存在则创建 -
批处理文件:使用
pushd %~dp0..\命令切换到项目根目录,确保相对路径引用正确
基准测试结果摘要¶
基于results/comparison/summary_report.md的数据,Qibo和Qiskit在QAOA实现上的主要性能差异如下:
运行时间比较¶
- Qibo:在所有测试场景下,Qibo的运行时间明显低于Qiskit
- 1层QAOA:平均0.53秒(Qibo)vs 4.80秒(Qiskit)
- 5层QAOA:平均4.19秒(Qibo)vs 13.48秒(Qiskit)
解决方案精度¶
- 两个框架在解决方案精度上表现相似,都能找到相同质量的解决方案
- 平均最佳能量值为-9.0(两个框架相同)
最优解概率¶
- Qibo:5层QAOA下平均最优解概率为0.154
- Qiskit:5层QAOA下平均最优解概率为0.119
使用方法¶
运行基准测试¶
-
使用Qiskit运行QAOA基准测试:
-
使用Qibo运行QAOA基准测试:
-
比较两种框架的性能:
-
可视化比较结果:
启动Jupyter Notebook¶
- 使用Qibo环境:
-
运行
batch/启动Jupyter.bat -
使用Qiskit环境:
- 运行
batch/启动Qiskit_Jupyter.bat
学习资源¶
项目中的Jupyter笔记本提供了丰富的学习资源:
- QAOA量子近似优化算法.ipynb:详细介绍了QAOA的原理、数学基础和实现方法
- qibo_tutorial.ipynb:Qibo框架的使用教程
- quantum_algorithms.ipynb:量子算法综述
环境要求¶
- Python 3.8+
- Qiskit 2.1.2
- Qibo 0.2.20
- NumPy
- Pandas
- Matplotlib
- Seaborn
- NetworkX
注意事项¶
- 所有脚本都使用相对路径或动态路径获取方式,确保在不同环境下都能正确运行
- 批处理文件会自动切换到项目根目录,然后激活相应的虚拟环境
- 结果数据和图表会保存在
results目录下 - 对于中文显示问题,可以使用
fix_matplotlib_chinese.py脚本进行修复