qml.qaoa

概述

该模块提供了一组帮助构建QAOA工作流的方法。

混合哈密顿量

构造 QAOA 混合哈密顿量的方法。

函数

bit_flip_mixer(图, b)

创建一个比特翻转混合哈密顿量。

x_mixer(导线)

创建一个基本的Pauli-X混合哈密顿量。

xy_mixer(图)

创建一个广义的SWAP/XY混合哈密顿量。

成本哈密顿量

生成对应于不同优化问题的QAOA成本哈密顿量的方法。

函数

bit_driver(wires, b)

返回比特驱动成本哈密顿量。

edge_driver(图, 奖励)

返回边缘驱动成本哈密顿量。

max_clique(图[, 约束])

返回与给定图的最大团问题相关的QAOA成本哈密顿量和推荐的混合器。

max_independent_set(图[, 有约束])

对于给定的图,返回与最大独立集问题对应的QAOA成本哈密顿量和推荐的混合器。

max_weight_cycle(图[, 约束])

返回给定图的最大加权循环问题的QAOA成本哈密顿量和推荐的混合器。

maxcut(图)

返回与给定图的最大割问题相对应的QAOA成本哈密顿量和推荐的混合器。

min_vertex_cover(图[, 受限])

返回与给定图对应的最小顶点覆盖问题的QAOA成本哈密顿量和推荐的混合器。

QAOA 层

定义用于QAOA工作流的成本和混合层的方法。

函数

cost_layer(gamma, hamiltonian)

应用与成本哈密顿量相对应的QAOA代价层。

mixer_layer(alpha, hamiltonian)

应用对应于混合哈密顿量的QAOA混合层。

循环优化

cycle模块可用于与最大加权循环问题相关的额外功能。

cycle

用于寻找有向图的最大加权循环的功能。

使用QAOA解决MaxCut问题

我们可以通过QAOA的基本应用来演示PennyLane QAOA的功能:解决MaxCut问题。我们首先定义QAOA执行的导线集,以及我们将在其上执行MaxCut的图。图的节点标签是与之对应的导线的索引:

import pennylane as qml
from pennylane import qaoa
from networkx import Graph

# Defines the wires and the graph on which MaxCut is being performed
wires = range(3)
graph = Graph([(0, 1), (1, 2), (2, 0)])

我们现在得到我们定义的图上MaxCut的QAOA成本和混合哈密顿量:

# Defines the QAOA cost and mixer Hamiltonians
cost_h, mixer_h = qaoa.maxcut(graph)

这些成本和混合哈密顿量随后用于定义变分 QAOA Ansatz 的层,我们将其实现为以下函数:

# Defines a layer of the QAOA ansatz from the cost and mixer Hamiltonians
def qaoa_layer(gamma, alpha):
    qaoa.cost_layer(gamma, cost_h)
    qaoa.mixer_layer(alpha, mixer_h)

最后,完整的 QAOA 电路构建完成。我们首先将线路初始化为计算基态的均匀叠加,然后重复应用 QAOA 层,使用 qml.layer 方法。在这种情况下,我们重复电路两次:

# Repeatedly applies layers of the QAOA ansatz
def circuit(params):

    for w in wires:
        qml.Hadamard(wires=w)

    qml.layer(qaoa_layer, 2, params[0], params[1])

定义电路后,我们调用执行QAOA的设备,并使用 qml.expval() 来创建QAOA成本函数:成本哈密顿量相对于QAOA电路的参数化输出的期望值。

# Defines the device and the QAOA cost function
dev = qml.device('default.qubit', wires=len(wires))
@qml.qnode(dev)
def cost_function(params):
    circuit(params)
    return qml.expval(cost_h)
>>> print(cost_function([[1, 1], [1, 1]]))
-1.8260274380964299

QAOA 成本函数可以通过调用内置的 PennyLane 优化器并更新变分参数,直到成本哈密顿量的期望值最小化,以 usual 方式进行优化。