跳转至

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中文配置

路径处理机制

为确保脚本在不同环境下都能正确运行,本项目采用了以下路径处理机制:

  1. Python脚本:使用path_utils.py模块提供的函数处理路径
  2. get_project_root(): 获取项目根目录的绝对路径
  3. get_data_path(): 获取相对于项目根目录的文件路径
  4. ensure_dir_exists(): 确保目录存在,如不存在则创建

  5. 批处理文件:使用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

使用方法

运行基准测试

  1. 使用Qiskit运行QAOA基准测试:

    python scripts/qaoa_benchmark.py
    

  2. 使用Qibo运行QAOA基准测试:

    python scripts/qaoa_qibo_benchmark.py
    

  3. 比较两种框架的性能:

    python scripts/compare_qaoa_performance.py
    

  4. 可视化比较结果:

    python scripts/visualize_benchmark_results.py
    

启动Jupyter Notebook

  1. 使用Qibo环境:
  2. 运行batch/启动Jupyter.bat

  3. 使用Qiskit环境:

  4. 运行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脚本进行修复