本章内容包括:
- 介绍Strange,一个Java中的量子计算库
- 尝试在Strange中使用高级和低级API
- 对量子电路进行基本可视化
本章介绍了Strange,一个开源的量子计算项目,其中包括一个量子模拟器和一个暴露给Java API的库,您可以在常规Java应用程序中使用它。在整本书中,我们讨论了量子计算(QC)的概念及其对Java开发人员的相关性,并展示了Java开发人员如何从这些概念中受益。
Strange包含了所需的量子概念的纯Java实现。在讨论这些概念时,我们会指向Strange中相关概念的代码实现,这是低级API的一部分。
大多数Java开发人员不需要处理低级量子概念。然而,有些人可能会受益于利用这些概念的算法。对于这些人,Strange提供了一组高级算法,可以在常规的Java应用程序中使用。这些算法就是我们所说的高级Java API。
介绍Strange
图2.1展示了Strange的组件的高级概述。Java Quantum API提供了一系列典型的量子算法的实现。这些是您可以在常规的Java应用程序中使用的高级算法。使用它们不需要了解量子计算的知识。
量子核心层包含低级API,它提供更深入的访问真实的量子方面。高级API不包含与QC特定的概念,但它的实现使用了低级量子核心层。高级API将量子概念屏蔽,而低级API向您公开这些概念。
高级API为您提供了一个即用型的接口来使用量子算法。通过使用它,您可以从QC带来的性能提升中受益。然而,如果您想要创建自己的算法或修改现有算法,低级API是起点。
使用Strange运行第一个演示示例
本书提供了一个包含许多使用Strange的示例的存储库。您可以在GitHub上找到这个存储库,网址为github.com/johanvos/qu…。运行示例的要求和说明在附录A中有解释。第一个演示示例位于ch02目录中的hellostrange文件夹中。
请注意,所有示例都需要Java 11或更高版本。在附录A中,您可以找到安装所需Java软件的说明。
构建和运行示例可以使用Gradle构建工具和Maven构建工具。示例包含一个build.gradle文件,允许它们由Gradle处理,以及一个pom.xml文件,允许它们由Maven处理。
我们建议您使用您喜欢的IDE(IntelliJ,Eclipse或NetBeans)来运行示例。每个IDE的运行Java应用程序的说明都不同。在本书中,我们使用命令行中的Gradle和Maven构建系统;使用提供的Gradle和Maven配置文件会隐式确保下载所有所需的代码依赖项。代码将会被编译和执行,如图2.2所示。
注意:在使用命令行界面运行示例时,我们在Maven和Gradle之间采取了稍微不同的方法。使用Maven时,您需要切换到特定示例的目录(其中包含一个pom.xml文件)。而在使用Gradle时,您保持在根级别(其中包含一个build.gradle文件),并通过提供章节和项目名称来运行示例。我们将通过HelloStrange示例来解释这一点。
如果您想使用Maven构建系统来运行基本的HelloStrange应用程序,则需要移动到ch02/hellostrange目录中。然后执行以下命令:
mvn clean javafx:run
执行该命令后,将会得到类似以下的输出:
mvn clean javafx:run
[INFO] Scanning for projects...
[INFO]
[INFO] ---------------------------------------------------------------------
[INFO] Building hellostrange 1.0-SNAPSHOT
[INFO] ---------------------------------------------------------------------
[INFO]
[INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ helloquantum ---
[INFO] Deleting /home/johan/quantumcomputing/manning/public/quantumjava/ch02
/hellostrange/target
[INFO]
[INFO] >>> javafx-maven-plugin:0.0.6:run (default-cli) > process-classes @ h
elloquantum >>>
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ helloq
uantum ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory /home/johan/quantumcomputing/mann
ing/public/quantumjava/ch02/hellostrange/src/main/resources
[INFO]
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ helloquantu
m ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 1 source file to /home/johan/quantumcomputing/manning/publi
c/quantumjava/ch02/hellostrange/target/classes
[INFO]
[INFO]