🔧

在这里插入图片描述

掌握QPanda、pyQPanda、VQNet、Qurator,一站式量子软件开发体验

量子计算的硬件发展日新月异,但要让算法真正落地,离不开易用、高效、功能完备的软件开发工具。本源量子作为国内量子计算领域的先行者,打造了一套完整的量子软件开发工具链,涵盖C++核心框架、Python接口、机器学习扩展、IDE插件等。本文将带您全面了解这套工具链的安装、使用及核心功能,助您快速上手量子程序开发。


一、QPanda:量子计算的“C++引擎”

QPanda(Quantum Programming Architecture for NISQ Device Applications)是本源量子开源的量子计算开发框架,以C++为宿主语言,提供高效的量子线路构建、模拟运行、编译优化等功能。它支持多种量子虚拟机(全振幅、单振幅、部分振幅、噪声虚拟机),并可对接真实量子芯片。

1.1 环境要求

软件 版本要求
CMake >= 3.1
GCC >= 5.0
Python >= 3.7.0(可选)

1.2 下载与编译

通过Git克隆

git clone https://github.com/OriginQ/QPanda-2.git

编译(Linux/MacOS)

mkdir build && cd build
cmake ..
make
sudo make install

Windows下可使用Visual Studio或MinGW编译,具体参考官方文档。

1.3 一个简单的贝尔态程序

#include "QPanda.h"
using namespace QPanda;

int main()
{
    auto qvm = CPUQVM();                 // 创建量子虚拟机
    qvm.init();                          // 初始化
    auto prog = QProg();                 // 创建量子程序
    auto q = qvm.qAllocMany(2);          // 申请2个量子比特
    auto c = qvm.cAllocMany(2);          // 申请2个经典寄存器

    // 构建贝尔态 |Φ+> = (|00>+|11>)/√2
    prog << H(q[0])                      // H门
         << CNOT(q[0], q[1])             // CNOT门
         << MeasureAll(q, c);            // 测量所有比特

    // 运行1000次并输出结果
    auto results = qvm.runWithConfiguration(prog, c, 1000);
    for (auto &res : results) {
        std::cout << res.first << " : " << res.second << std::endl;
    }
    return 0;
}

编译运行后,输出结果应接近:

00 : 493
11 : 507

1.4 核心特性

  • 多种量子虚拟机:支持全振幅、单振幅、部分振幅、噪声模拟。
  • 高级编程结构:支持QIf、QWhile等控制流。
  • 门集与拓扑配置:可将程序编译到真实量子芯片。
  • 性能优化:内置优化器,提升运行效率。

二、pyQPanda:Python化的量子编程

pyQPanda是QPanda的Python封装,通过pybind11将C++接口无缝映射到Python,让开发者用熟悉的Python语法构建量子程序。

2.1 安装

pip install pyqpanda

2.2 使用示例

from pyqpanda import *

# 创建量子虚拟机
qvm = CPUQVM()
qvm.init()

# 申请量子比特和经典寄存器
qubits = qvm.qAlloc_many(2)
cbits = qvm.cAlloc_many(2)

# 构建贝尔态
prog = QProg()
prog << H(qubits[0]) << CNOT(qubits[0], qubits[1]) << MeasureAll(qubits, cbits)

# 运行并获取结果
result = qvm.runWithConfiguration(prog, cbits, 1000)
print(result)

pyQPanda保留了QPanda的几乎所有功能,并支持与NumPy等科学计算库无缝交互,是快速原型开发的理想选择。


三、VQNet:量子-经典混合机器学习框架

VQNet(Variational Quantum Network)是基于pyQPanda构建的量子机器学习框架,它将量子线路作为可微分模块嵌入到经典神经网络中,支持自动微分和多种优化器,适合VQE、QAOA、量子分类器等混合算法的开发。

3.1 安装

pip install pyvqnet

3.2 核心概念

  • QuantumLayer:封装量子线路的VQNet层,自动处理参数梯度。
  • pyQPanda集成:使用pyQPanda的量子门构建线路,VQNet负责反向传播。

3.3 量子分类器示例

下面展示一个基于VQNet的量子分类器,用于区分二维平面上的圆内点与圆外点。

from pyvqnet.qnn.quantumlayer import QuantumLayer
from pyvqnet.optim import adam
from pyvqnet.nn.loss import CategoricalCrossEntropy
from pyvqnet.nn.module import Module
import numpy as np
import pyqpanda as pq

# 定义量子线路(使用pyQPanda)
def qdrl_circuit(input, weights, qlist, clist, machine):
    x1 = input.squeeze()
    param1 = weights.squeeze()
    circ = pq.QCircuit()
    # 编码层 + 变分层(RZ-RY-RZ循环)
    circ.insert(pq.RZ(qlist[0], x1[0]))
    circ.insert(pq.RY(qlist[0], x1[1]))
    circ.insert(pq.RZ(qlist[0], x1[2]))
    for i in range(3):
        circ.insert(pq.RZ(qlist[0], param1[3*i]))
        circ.insert(pq.RY(qlist[0], param1[3*i+1]))
        circ.insert(pq.RZ(qlist[0], param1[3*i+2]))
    prog = pq.QProg()
    prog.insert(circ)
    prob = machine.prob_run_dict(prog, qlist, -1)
    return list(prob.values())

# 定义模型
class Model(Module):
    def __init__(self):
        super().__init__()
        self.pqc = QuantumLayer(qdrl_circuit, 9, "cpu", 1)
    def forward(self, x):
        return self.pqc(x)

# 生成数据(圆内为类别0,圆外为类别1)
def circle(samples=500):
    data, label = [], []
    for _ in range(samples):
        x = 2*np.random.rand(2) - 1
        if np.linalg.norm(x) < np.sqrt(2/np.pi):
            label.append([1,0])
        else:
            label.append([0,1])
        data.append(np.append(x, 0))  # 加一维占位
    return np.array(data), np.array(label)

# 训练
model = Model()
optimizer = adam.Adam(model.parameters(), lr=0.6)
loss_fn = CategoricalCrossEntropy()
x_train, y_train = circle(500)

for epoch in range(10):
    total_loss = 0
    correct = 0
    for i in range(0, len(x_train), 32):
        x_batch = x_train[i:i+32]
        y_batch = y_train[i:i+32]
        optimizer.zero_grad()
        out = model(x_batch)
        loss = loss_fn(y_batch, out)
        loss.backward()
        optimizer._step()
        total_loss += loss.item()
        pred = np.argmax(out.data, axis=1)
        true = np.argmax(y_batch, axis=1)
        correct += np.sum(pred == true)
    print(f"Epoch {epoch}, Loss: {total_loss/(len(x_train)//32):.4f}, Acc: {correct/len(x_train):.4f}")

VQNet将量子线路视为可微分层,让开发者能够像训练神经网络一样训练含参量子线路,极大简化了混合算法的实现。


四、Qurator:VS Code量子开发插件

Qurator是本源量子推出的VS Code插件,支持QRunes2语言编写量子程序,并提供丰富的编辑辅助功能。它允许用户通过settings、qcodes、script三个模块分离配置、量子代码和宿主代码,并支持Python和C++作为宿主语言。

4.1 安装

在VS Code扩展商店搜索“qurator-vscode”并安装。

4.2 快速入门

  1. 创建以.qrunes结尾的文件,插件自动识别。
  2. 编写三个模块:
    • settings:设置宿主语言、运行模式等。
    • qcodes:编写QRunes2量子程序。
    • script:编写宿主语言(Python/C++)调用量子程序。

示例(贝尔态):

settings:
  language: python
  mode: run

qcodes:
  qbit 2
  cbit 2
  H q[0]
  CNOT q[0], q[1]
  measure q[0] -> c[0]
  measure q[1] -> c[1]

script:
  from pyqpanda import *
  qvm = CPUQVM()
  qvm.init()
  prog = get_qprog()
  result = qvm.runWithConfiguration(prog, cbits, 1000)
  print(result)

4.3 特色功能

  • 自动补全:QRunes2关键字智能提示。
  • 语法高亮:不同模块颜色区分。
  • 错误提示:红线标注语法错误。
  • 悬浮帮助:鼠标悬停显示函数说明。
  • 一键运行:点击右上角按钮或F5执行。
  • 结果可视化:运行后自动生成柱状图。

Qurator降低了量子程序开发的入门门槛,让开发者可以专注于算法本身。


五、总结:构建完整的量子开发生态

工具 定位 适用场景
QPanda 量子计算核心库 高性能C++开发,真实芯片编译
pyQPanda Python接口 快速原型,教育科研
VQNet 量子机器学习 VQE、QAOA、量子分类器等混合算法
Qurator IDE插件 可视化开发,代码辅助

本源量子开发工具链从底层库到上层应用,从C++到Python,从本地开发到云端集成,构建了一个完整的量子计算软件生态。无论您是刚入门的量子爱好者,还是资深的算法研究者,这套工具链都能助您高效地将想法转化为可运行的量子程序。

未来,随着量子硬件的发展,这些工具将不断进化,为量子计算的实际应用铺平道路。现在,就从QPanda开始,踏上您的量子编程之旅吧!


参考链接

  • QPanda GitHub: https://github.com/OriginQ/QPanda-2
  • 本源量子云平台: https://qcloud.originqc.com.cn/
  • VQNet文档: https://pyvqnet.readthedocs.io/
  • Qurator介绍: https://originq.github.io/qurator/
Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐