跳转到主要内容

Qiskit Optimization:一个用于量子计算优化应用的库

项目描述

Qiskit Optimization

License

Qiskit Optimization 是一个开源框架,涵盖了从优化问题的高级建模,到自动将问题转换为不同所需表示的全过程,再到一套易于使用的量子优化算法,这些算法可以运行在经典模拟器上,也可以通过Qiskit在真实量子设备上运行。

优化模块通过使用docplex,使优化问题的建模变得简单、高效。它提供了一个统一的接口,以及不同问题表示形式之间的自动转换,允许用户使用大量算法解决问题,从变分量子算法,如量子近似优化算法QAOA,到使用GroverOptimizer的Grover自适应搜索,利用由Qiskit算法提供的基本算法。此外,优化模块的模块化设计使其易于扩展,并促进了新算法的快速开发和测试。还提供了兼容的经典优化器,用于测试、验证和基准测试。

安装

我们鼓励您通过pip工具(一个Python包管理器)安装Qiskit优化。

pip install qiskit-optimization

pip将自动处理所有依赖项,并且您将始终安装最新(且经过良好测试)的版本。

如果您想尝试在官方发布之前尝试功能,或者如果您想为优化做出贡献,那么您可以安装源代码。为此,请遵循文档中的说明。


可选安装

  • IBM CPLEX可以使用命令pip install 'qiskit-optimization[cplex]'安装,以启用读取LP文件和使用CplexOptimizer,它是cplex.Cplex的包装器。CPLEX是一个独立的包,其Python版本的支持独立于Qiskit优化,因此,如果尚无兼容的CPLEX版本,此CPLEX命令将不会产生影响。

  • CVXPY可以使用命令pip install 'qiskit-optimization[cvx]'安装。安装CVXPY将启用使用Goemans-Williamson算法作为优化器GoemansWilliamsonOptimizer

  • Matplotlib可以使用命令pip install 'qiskit-optimization[matplotlib]'安装。安装Matplotlib将启用在图优化应用程序类中使用draw方法。

  • Gurobipy可以使用命令pip install 'qiskit-optimization[gurobi]'安装。安装Gurobipy将启用使用GurobiOptimizer。

在Qiskit中创建您的第一个优化编程实验

现在,Qiskit优化已安装,是时候开始使用优化模块了。让我们尝试一个优化实验来计算最大切割问题的解。最大切割问题可以表示为二次规划,可以使用Qiskit中的许多不同算法来求解。在此示例中,使用了MinimumEigenOptimizer与量子近似优化算法(QAOA)结合作为最小特征值求解程序。

from docplex.mp.model import Model

from qiskit_optimization.algorithms import MinimumEigenOptimizer
from qiskit_optimization.translators import from_docplex_mp

from qiskit.primitives import Sampler

from qiskit_algorithms.utils import algorithm_globals
from qiskit_algorithms import QAOA
from qiskit_algorithms.optimizers import SPSA

# Generate a graph of 4 nodes
n = 4
edges = [(0, 1, 1.0), (0, 2, 1.0), (0, 3, 1.0), (1, 2, 1.0), (2, 3, 1.0)]  # (node_i, node_j, weight)

# Formulate the problem as a Docplex model
model = Model()

# Create n binary variables
x = model.binary_var_list(n)

# Define the objective function to be maximized
model.maximize(model.sum(w * x[i] * (1 - x[j]) + w * (1 - x[i]) * x[j] for i, j, w in edges))

# Fix node 0 to be 1 to break the symmetry of the max-cut solution
model.add(x[0] == 1)

# Convert the Docplex model into a `QuadraticProgram` object
problem = from_docplex_mp(model)

# Run quantum algorithm QAOA on qasm simulator
seed = 1234
algorithm_globals.random_seed = seed

spsa = SPSA(maxiter=250)
sampler = Sampler()
qaoa = QAOA(sampler=sampler, optimizer=spsa, reps=5)
algorithm = MinimumEigenOptimizer(qaoa)
result = algorithm.solve(problem)
print(result.prettyprint())  # prints solution, x=[1, 0, 1, 0], the cost, fval=4

更多示例

学习路径笔记本可以在文档的优化教程部分找到,这是一个很好的开始。


贡献指南

如果您想为Qiskit做出贡献,请查看我们的贡献指南。此项目遵循Qiskit的行为准则。通过参与,您应遵守此准则。

我们使用GitHub问题来跟踪请求和错误。请加入Qiskit Slack社区进行讨论和简单问题。对于更适合在论坛中提出的问题,我们在Stack Overflow中使用Qiskit标签。

作者和引用

优化是由一群研究人员的集体工作所启发、撰写和实现的。优化在众多人士的帮助和努力下不断成长,这些人以不同的层次为项目做出贡献。[如果您使用Qiskit,请根据提供的BibTeX文件进行引用。](https://github.com/qiskit-community/qiskit-optimization/graphs/contributors)

许可证

本项目使用Apache License 2.0

项目详情


下载文件

下载适合您平台的应用文件。如果您不确定该选择哪个,请了解更多关于安装包的信息。

源代码发行版

qiskit-optimization-0.6.1.tar.gz (156.9 kB 查看哈希值)

上传时间 源代码

构建发行版

qiskit_optimization-0.6.1-py3-none-any.whl (167.6 kB 查看哈希值)

上传时间 Python 3

由以下机构支持