

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# OpenQASM 3.0 を使用した勾配の計算
<a name="braket-openqasm-computing-gradients"></a>

Amazon Braket は、[`shots=0`] (正確) モードで実行する場合、オンデマンドシミュレーターとローカルシミュレーターの両方で勾配の計算をサポートします。これは、随伴微分法を使用して実現されます。計算する勾配を指定するには、次の例内のコードに示されているような、適切なプラグマを指定します。

```
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` パラメータに関する勾配が計算されます。つまり、all は、パラメータの数が非常に多い場合に便利なキーワードです。この場合、次の例内のコードのようなプラグマを指定することになります。

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

Amazon Braket の OpenQASM 3.0 実装では、個々の作用素、テンソル積、エルミートオブザーバブル、`Sum` オブザーバブルなど、すべてのオブザーバブルタイプがサポートされています。勾配を計算するときに使用する特定の作用素は `expectation()` 関数内にラッピングする必要があり、オブザーバブルの各項が作用する量子ビットを明示的に指定する必要があります。