24、量子软件工具概述

量子软件工具概述

1. 量子软件概述

量子软件开发是一个复杂的过程,它不仅具有经典软件开发的缺点,还因诸如量子比特叠加或纠缠等概念的出现,使其难度进一步增加。实际上,无论是量子软件还是经典软件的开发,都是一项容易失败的艰巨任务。

为了应对这种复杂性,软件开发长期以来一直依赖各种工具,这些工具能帮助避免错误,并自动化开发周期中许多重复的任务。这一趋势在当前的持续软件工程和DevOps等领域得到了高度应用。

如果想让量子计算得到适当发展,大规模、工业化地生产高质量软件,就需要依靠软件工程的原则,使用合适的生命周期,并借助工具简化和自动化创建过程的各个阶段,甚至帮助将遗留系统重新工程和迁移到新的量子或混合系统中。

虽然量子计算仍处于早期阶段,但量子计算机制造商已经提供了各种环境、工具、库和API,以方便对这类计算机进行编程,例如IBM Qiskit和D - Wave Leap。此外,还有其他一些平台,如Microsoft Q#、Zapata Computing的Orquestra和QuantumPath等,能与多种平台协同工作。另外,学术和独立机构也提出了一些工具和语言,用于无关平台的量子软件开发,相关工具可在aQuantum基础门户中找到。

2. 量子软件层

量子计算机系统过于复杂,难以直接进行操作和编程。不过,它又是强大的设备,能够处理经典编程中非常困难的问题。因此,量子计算机通常以分层堆栈的形式实现,尽管这并非标准,但量子平台大多采用类似的方法。

量子软件开发的流程如下:
1. 设计量子电路 :使用拖放控件或在用户友好的环境中直接编码来设计量子电路。
2. 转换为中间表示 :为了成为合适的量子应用,将量子电路转换为量子编程语言(如OpenQASM或pyQuil)的等效中间表示。
3. 编译、适配和优化 :考虑量子处理器架构及其量子门和算子集,对量子应用进行编译、适配和优化,以便在量子设备上运行。
4. 量子纠错(QEC) :在为目标平台编译量子算法后,执行量子纠错步骤,为算法添加防止因退相干和量子噪声引起量子错误的指令。
5. 硬件级编译 :将量子算法在硬件级别进行编译,并通过在量子计算机的量子固件中指定算法,使其更接近目标量子机器,量子固件是量子计算机堆栈的最底层。
6. 物理量子比特适配 :使用依赖技术的优化方法,使量子处理器的物理量子比特适应量子算法中指定的要求。

这个过程可以用以下流程图表示:

graph LR
    A[设计量子电路] --> B[转换为中间表示]
    B --> C[编译、适配和优化]
    C --> D[量子纠错(QEC)]
    D --> E[硬件级编译]
    E --> F[物理量子比特适配]

所有商业环境和现有的量子计算机都采用了这种堆栈结构,底层包括编译、纠错和优化,靠近物理设备。同时,一些中间层还添加了针对各种应用(如化学、优化、人工智能等)的库和优化算法,以方便开发人员的工作。

3. 量子软件技术

量子软件技术涵盖多个方面,包括编程语言、模拟器和设计环境、工具和库、主要供应商的全栈软件以及开发和运行平台。

3.1 量子编程语言

编程量子计算机通常需要定义量子电路,图形表示法对于小型示例和构建原型很有用,但随着电路规模的增大,它就变得不实用了。因此,人们提出了多种量子编程语言,以简化量子算法的规范,这些算法通常是将量子电路转换为代码。

近年来提出的量子编程语言可分为以下几类:
- 量子命令式编程语言 :大多数量子计算语言是命令式的。有些是独立的语言(通常基于汇编),但大多数是对其他经典编程语言的扩展,其中Python最为常见。
| 年份 | 名称 | 基于的语言 |
| ---- | ---- | ---- |
| 1998 | QCL | C |
| 2006 | LanQ | C |
| 2012 | Scaffold | C (C++) |
| 2016 | QASM | 汇编语言 |
| 2017 | OpenQASM | 汇编语言 |
| 2017 | cQASM | 汇编语言 |
| 2020 | Jaqual | 汇编语言 |

高抽象级别的量子命令式编程语言更加多样化,Python的使用也很普遍。
| 年份 | 名称 | 基于的语言 |
| ---- | ---- | ---- |
| 2000 | qGCL | Pascal |
| 2003 | Q language | C++ |
| 2008 | NDQJava | Java |
| 2009 | Cove | C# |
| 2012 | Scaffold | C (C++) |
| 2013 | Chisel - Q | Scala |
| 2016 | FJQuantum | Feather - weight Java |
| 2016 | ProjectQ | Python |
| 2016 | pyQuil (Quil) | Python |
| 2017 | Quiskit | Python |
| 2018 | IQu | Idealized Algol |
| 2018 | Strawberry Fields | Python |
| 2018 | Balckbird | Python |
| 2018 | QuantumOptics.jl | Julia |
| 2018 | Cirq | Python |
| 2018 | Q# | C# |
| 2018 | Q|SI> |.Net语言 |
| 2020 | Silq | Python |
  • 量子函数式编程语言 :尽管主流的量子编程语言通常是命令式的,但也有一些基于函数式编程的提议。有些是新语言,通常基于lambda演算,还有很多是对函数式编程语言(如F#或Haskell)的扩展。此外,基于Python的提议也逐渐扩展,使其成为多范式语言,支持函数式量子扩展。
    | 年份 | 名称 | 基于的语言 |
    | ---- | ---- | ---- |
    | 1996 | Quantum Lambda Calculi | Lambda演算 |
    | 2000 | λq | Lambda演算 |
    | 2004 | QFC (QPL) | 流程图 |
    | 2005 | QML | 类似Haskell |
    | 2005 | cQPL | 指称语义 |
    | 2013 | QuaFL | Haskell |
    | 2013 | Quipper | Haskell |
    | 2013 | Chisel - Q | Scala |
    | 2014 | LIQUi|> | F# |
    | 2015 | Proto - Quipper | Haskell |
    | 2016 | ProjectQ | Python |
    | 2016 | qPCF | Lambda演算 |
    | 2017 | Quiskit | Python |
    | 2018 | Strawberry Fields | Python |
    | 2018 | Balckbird | Python |
    | 2018 | Cirq | Python |
    | 2020 | Silq | Python |

  • 其他量子编程语言 :包括基于电路、声明式和其他类型的量子编程语言。
    | 年份 | 名称 | 基于的语言 |
    | ---- | ---- | ---- |
    | 2004 | CQP | 进程演算 |
    | 2005 | QPAlg | 进程演算 |
    | 2011 | QuECT | Java |
    | 2017 | Forest | Python |
    | 2017 | QWIRE | Coq证明助手 |

4. 量子软件模拟器和设计环境

构建量子计算机困难重重,而且目前实际可用的量子计算机数量有限,访问也受到限制。因此,出现了一系列不同的量子模拟器,用于辅助设计和规划量子电路及算法。当开发新的量子算法时,通常会先用模拟器进行初始的概念验证。

量子模拟器大多基于数组管理,只有少数基于图。以下是一些知名的量子模拟器:
- Atom QASM Quantum Circuit Previewer :是Atom编辑器的一个包,能将QASM(量子汇编)代码实时转换为量子电路的图形表示,并提供电路深度、指令数量和状态向量可视化等额外信息。
- cuQuantum SDK :Nvidia提供的用于在GPU加速系统上模拟量子电路的开发平台。
- DDSIM :属于JKQ工具的一部分,提供基于决策图的量子电路模拟器,可模拟以REAL或OpenQASM格式定义的量子电路。
- Intel - QS(Quantum Simulator)或QHIPSTER :使用并行算法的高性能环境。
- LIQUi|> :微软的集成量子模拟语言,模拟可以在多个平台上运行,也可集成到其他应用程序中或作为独立脚本执行。
- ProjectQ :开源的基于数组的模拟器,易于领域专家进行扩展,可在桌面机器上模拟约30个量子比特,还包含一个能比普通模拟器更快确定某些算法(如Shor算法)结果的模拟器。
- QCEC :JKQ量子计算工具集的一部分,可用于量子电路等价性检查,还包括一些量子映射工具(QMAP)。
- QDENSITY/QCWAVE :用于模拟量子计算机的Mathematica包。
- Qibo :使用硬件加速器快速评估量子电路和绝热演化的开源软件。
- QuCirDET :量子电路的设计和模拟工具。
- Quirk :基于JavaScript的开源网页模拟器,可在网页浏览器中运行。
- Qulacs :用于研究目的的快速量子电路模拟器。
- QuIDDPro :基于图的模拟器,专门用于模拟Grover算法。
- QuTe :为全球研究团队提供的高性能量子计算模拟平台。
- QX :基于数组的模拟平台,通过并行化量子门来提高性能。

5. 量子工具和库

以下表格展示了一些重要的量子软件工具和库,包含了它们的分发许可类型、是否允许使用量子门、主要功能、依赖的编程语言等信息。
| 名称 | 许可 | 量子门 | 其他功能 | 语言 |
| ---- | ---- | ---- | ---- | ---- |
| BackupBraina | 开源 | 是 | 算法、图表 | JavaScript |
| Bloch Sphere | 开源 | 是 | 算法、图表 | Java |
| CHPb | 开源 | 是 | 算法 | C |
| Cirq | 开源 | 是 | 全部 | Python |
| Drqubitc | 开源、免费软件 | 是 | 并行性 | MATLAB |
| Eqcs | 开源 | 是 | 无 | C |
| Feynman | 开源 | 是 | 算法、并行性 | Maple |
| HOQST | 开源 | 是 | 图表 | Julia |
| Jsquis | 开源 | 是 | 无 | Javascript |
| LanQ | 开源 | 是 | 算法、并行性 | LanQ |
| libquantum | 开源 | 是 | 算法、并行性 | C, C++ |
| Linerar AId | 免费软件 | 是 | 算法、图表 | Mathematica |
| M - fun | 开源 | 是 | 无 | MATLAB/Octave |
| Mukaie | 商业 | 否 | 加速器、图表 | Python |
| Open Qubit | 开源 | 是 | 算法 | C++ |
| OpenQASM | 开源 | 是 | 图表 | QASM |
| OpenQUACS | 开源 | 是 | 算法、并行性 | Maple |
| ProjectQ | 开源 | 是 | 全部 | Python |
| Q - gol | 开源 | 是 | 算法 | CaML |
| Q - Kitf | 免费软件 | 是 | 全部 |
| Q++g | 开源 | 是 | 算法、图表 | C++ |
| QCAD | 免费软件 | 是 | 图表 |
| QCGPU | 开源 | 是 | 并行性 | Rust & OpenCL |
| Qchash | 开源 | 是 | 图表 | Haskell |
| QCircuits | 开源 | 是 | 全部 | Python |
| QDENSITY | 开源 | 是 | 图表 | Mathematica |
| Qii | 开源 | 是 | 无 | Mathematica |
| Qinf | 开源 | 是 | 图表 | Maxima |
| QIO | 开源 | 是 | 图表 | Qio + Haskell |
| Qiskit | 开源 | 是 | 全部 | Python |
| QMDD | 开源 | 否 | 图表 | C++ |
| QOCSj | 开源 | 是 | 算法 | OCaML |
| Qrack | 开源 | 否 | 无 | C++ |
| Qsims | 开源、商业 | 是 | 算法、并行性 | C++ |
| QSWalk.jl | 开源 | 是 | 无 | Julia |
| QUAk | 商业 | 否 | 优化 | QUA |
| Quantavo | 开源 | 是 | 算法、并行性 | Maple |
| Quantencomputer | 无 | 是 | 算法 | MATLAB |
| Quantuml | 免费软件 | 是 | 全部 | Mathematica |
| Quantum Circuit | 开源 | 是 | 算法、图表 | Javascript |
| Quantum Fog | 开源 | 是 | 全部 |
| Quantum Programming Studio | 开源 | 是 | 算法、并行性、图表 | Javascript |
| Quantum User Interfacem | 开源 | 是 | 无 | Protobuf |
| Quantum.NETn | 开源 | 是 | 无 | NET |
| Quantum++ | 开源 | 否 | 无 | C++ |
| QuantumOptics.jl | 开源 | 否 | 算法、图表 | Julia |
| QuantumUtils | 开源 | 是 | 并行性、图表 | Mathematica |
| QuantumWalk.jlo | 开源 | 是 | 算法 | Julia |
| Qubit Workbenchp | 商业 | 是 | 算法、图表 |
| Qubit Workbenchq | 免费软件 | 是 | 无 |
| Qubit4Matlab | 开源 | 是 | 全部 | MATLAB |
| QuEST | 开源 | 是 | 无 | C |
| QuIDE | 开源 | 是 | 全部 |.NET |
| QX Simulatorr | 开源 | 否 | 并行性 | 量子代码 |
| Scaffold/ScaffCC | 开源 | 否 | 算法 | Scaffold |
| SimQubit | 开源 | 是 | 算法、图表 | C++ |
| Staq | 开源 | 是 | 无 | C |
| Tequila | 开源 | 是 | 无 | Python |

6. 量子退火环境

量子计算的主要优势在于减少耗时算法的执行时间,因此近年来出现了一种新型的量子平台,专门实现一个或多个仅用于解决组合优化问题的电路,即量子近似优化算法(QAOA)。

这种范式是构建一个数学模型,代表优化问题中的目标和一组约束条件。主要的供应商之一是D - Wave Systems,它通过构建二进制二次模型(BQM)来解决多个优化问题,该模型由一组二进制变量组成,这些变量只能取两个可能的值(如0或1),并且受到偏差和它们之间相互作用的影响。

除了D - Wave,还有一些不太知名的平台,如Fujitsu数字退火器,其行为与D - Wave计算机类似。此外,这类算法可以在IBM量子计算机上通过QAOA电路进行模拟,也可以在Microsoft的Q#环境及其云平台Azure Quantum上,以及Amazon Braket计算服务上运行。不过,这些算法和环境目前主要专注于解决特定类型的优化问题,对于不符合该范式的问题,暂时还无法有效解决。

7. 主要量子计算供应商的全栈软件

以下是主要供应商提供的全栈量子软件平台的特点:
- D - Wave :加拿大公司,提供绝热量子计算机,专注于优化性能。使用“QMASM”作为机器语言,该语言位于开源qbsolv库之下,qbsolv库可通过反编译QUBO(二次无约束二进制优化)问题来解决优化问题。
- Google :其平台名为Quantum AI,适用于近期量子计算机上的量子电路。基于Cirq,这是一个用于编写、操作和优化量子电路,并在量子计算机和模拟器上运行它们的Python库。此外,还可以在Cirq之上运行其他Python库,如OpenFermion,用于模拟费米子系统。
- Honeywell :美国北卡罗来纳州的公司,专注于基于捕获离子技术的量子计算。其量子计算机目前尚未开放访问,但预计未来将与其他公司计算机上运行的量子算法兼容。
- IBM :通过基于云的服务提供多台量子计算机。可以通过网页量子编辑器使用量子电路进行编程,也可以用Open QASM语言定义电路。这些电路通过Qiskit Terra库作为平台提供者提供给量子计算机,在其之上还有一些专注于特定领域的库,如Qiskit Aqua。
- Microsoft :其堆栈基于Q#语言编程,通过量子开发工具包(QDK)提供一组库、API和模拟器。对量子计算机的访问已迁移到通过Azure服务在云端使用。
- Rigetti :美国加利福尼亚州的公司,通过其ASPEN - 8处理器提供对量子处理器的访问。其软件堆栈由多个组件组成,包括PyQuil编程语言(Python库)和Quil,Quil是基于门的量子程序的优化编译器。
- Xanadu :使用光子技术进行量子计算,该技术具有鲁棒性和可扩展性,并且可以在室温下运行。通过Xanadu量子云访问其设备,其特色是提供了作为另一个Python库的Strawberry Fields编程语言。在这个堆栈之上可以使用多个库,如TensorFlow,以执行面向特定领域的应用程序。此外,Xanadu还提供了一个名为“Penny Lane”的Python库,用于以与经典计算机编程相同的方式对量子计算机进行编程。

可以用以下mermaid流程图来展示这些主要量子全栈平台的关系:

graph LR
    classDef startend fill:#F5EBFF,stroke:#BE8FED,stroke-width:2px;
    classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;
    classDef decision fill:#FFF6CC,stroke:#FFBC52,stroke-width:2px;

    A(D - Wave):::process --> B(QMASM):::process
    B --> C(qbsolv):::process
    D(Google):::process --> E(Cirq):::process
    E --> F(OpenFermion):::process
    G(Honeywell):::process --> H(Open QASM):::process
    I(IBM):::process --> J(QISKit Terra):::process
    J --> K(QISKit Aqua):::process
    L(Microsoft):::process --> M(Q#):::process
    M --> N(量子开发工具包):::process
    O(Rigetti):::process --> P(PyQuil):::process
    P --> Q(Quil):::process
    R(Xanadu):::process --> S(Strawberry Fields):::process
    S --> T(Penny Lane):::process
    B --> QsageToQ(其他):::process
    E --> Other1(其他):::process
    J --> Other2(其他):::process
    M --> Other3(其他):::process
    P --> Other4(其他):::process
    S --> Other5(其他):::process
    subgraph 硬件
    A
    D
    G
    I
    L
    O
    R
    end
    subgraph 汇编语言
    B
    E
    H
    J
    M
    P
    S
    end
    subgraph 量子电路
    C
    F
    K
    N
    Q
    T
    end
    subgraph 量子算法
    QsageToQ
    Other1
    Other2
    Other3
    Other4
    Other5
    end
    subgraph 全栈库
    end

综上所述,量子软件领域已经有了丰富的工具、语言、模拟器和平台,这些资源为量子算法的开发和量子计算机的应用提供了有力的支持。随着技术的不断发展,量子计算有望在更多领域发挥重要作用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值