

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 使用 OpenQASM 3.0 计算梯度
<a name="braket-openqasm-computing-gradients"></a>

在 `shots=0`（精确）模式下运行时，Amazon Braket 支持在按需模拟器和本地模拟器上计算梯度。通过使用伴随微分法，可以实现这一点。要指定所计算的梯度，可以提供相应的编译指示，如以下示例中的代码所示。

```
OPENQASM 3.0;
input float alpha;

bit[2] b;
qubit[2] q;

h q[0];
h q[1];
rx(alpha) q[0];
rx(alpha) q[1];
b[0] = measure q[0];
b[1] = measure q[1];

#pragma braket result adjoint_gradient h(q[0]) @ i(q[1]) alpha
```

您不必明确列出所有单独的参数，可以在编译指示中指定 `all` 关键字。这样可以计算出所列的所有参数的梯度，当 `input` 参数数量非常大时，这可能是一个方便的选择。在这种情况下，编译指示与以下示例中的代码类似。

```
#pragma braket result adjoint_gradient h(q[0]) @ i(q[1]) all
```

Amazon Braket 的 OpenQASM 3.0 实现支持所有可观察类型，包括单个运算符、张量乘积、哈密特量可观测值和 `Sum` 可观测值。计算梯度时要使用的特定运算符必须封装在 `expectation()` 函数中，而且必须明确指定可观测值的每一项所作用的量子比特。