Cómputo de gradientes con OpenQASM 3.0 - Amazon Braket

Cómputo de gradientes con OpenQASM 3.0

Amazon Braket admite el cómputo de gradientes en simuladores locales y simuladores bajo demanda cuando se ejecuta en el modo shots=0 (exacto). Esto se logra mediante el uso del método de diferenciación adjunta. Para especificar el gradiente que desea computar, puede proporcionar el pragma adecuado, tal y como se muestra en el código del siguiente ejemplo.

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

En lugar de enumerar todos los parámetros individuales de forma explícita, también puede especificar la palabra clave all dentro del pragma. Esto calculará el gradiente con respecto a todos los parámetros de input enumerados, lo que puede ser una opción conveniente cuando el número de parámetros es muy grande. En este caso, el pragma se verá como el código del siguiente ejemplo.

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

Todos los tipos observables son compatibles con la implementación de OpenQASM 3.0 de Amazon Braket, incluidos los operadores individuales, los productos tensoriales, los observables hermitianos y los observables Sum. El operador específico que le interesa utilizar al computar gradientes debe estar envuelto dentro de la función expectation() y los qubits sobre los que actúa cada término del observable deben especificarse explícitamente.