Amazon Braket と Aquila を使用して量子コンピューティングタスクを定義および実行するプロセスは、次の手順で構成されています。
レジスタの定義
まず、リュードベリ原子量子コンピューターレジスタを定義します。これは、原子を互いに 6.1 μm 離して一直線に配置することで行われます。この配置は、系の振る舞いを支配するハミルトニアンの計算に使用されます。
ハミルトニアンの指定
次に、原子の振る舞いを支配するエネルギー関数であるハミルトニアンを指定する必要があります。これは、原子の基底状態と励起リュードベリ状態を結合する駆動レーザー場のラビ周波数、レーザー位相、離調(Ω、ϕ、Δ)などのパラメータを指定することで行われます。これらのパラメータは、断熱状態準備と呼ばれるプロトコルを実行するために、時間依存性を持たせることができます。
$$
H(t) = \sum_j \frac{\Omega(t)}{2} \left( e^{i \phi(t)} |g_j\rangle\langle r_j| + e^{-i \phi(t)} |r_j\rangle\langle g_j| \right) – \sum_j \Delta(t) \hat{n}j + \sum{j<k} V_{jk} \hat{n}_j \hat{n}_k
$$
プログラムの定義
レジスタとハミルトニアンを定義したら、それらを組み合わせてプログラムを作成できます。このプログラムは、アナログハミルトニアンシミュレーション(AHS)のクラスに分類されます。
古典ハードウェアでのシミュレーション
タスクを実際の量子ハードウェアで実行する前に、AWS の古典サーバーのいずれかでローカルシミュレーションを実行してプログラムを確認できます。これにより、量子デバイスで実行する前にプログラムの動作を確認できます。
Aquila でのシミュレーション
古典シミュレーションに満足したら、Aquila でシミュレーションを実行できます。これには、プログラムを量子ハードウェアと互換性を持たせるために、プログラムを離散的なタイムステップにスライスする必要があります。
ap-northeast-1は通りませんでした。
from braket.aws import AwsDevice, AwsSession
from boto3 import Session
from braket.circuits import Circuit
from braket.ahs.analog_hamiltonian_simulation import AnalogHamiltonianSimulation
from braket.ahs.atom_arrangement import AtomArrangement
import numpy as np
from quera_ahs_utils.plotting import show_register
from braket.ahs.hamiltonian import Hamiltonian
from quera_ahs_utils.analysis import get_avg_density
from quera_ahs_utils.plotting import plot_avg_density
import os
os.environ['AWS_ACCESS_KEY_ID'] = 'YOUR_ACCESS_KEY_ID'
os.environ['AWS_SECRET_ACCESS_KEY'] = 'YOUR_SECRET_ACCESS_KEY'
os.environ['AWS_DEFAULT_REGION'] = 'us-east-1'
a = 6.7e-6
H = Hamiltonian()
N_x = N_y = 11
nshots = 1000
register = AtomArrangement()
for i in range(N_x):
for j in range(N_y):
register.add([j*a, i*a])
boto_session = Session(region_name='us-east-1')
aws_session = AwsSession(boto_session)
aquila_arn = "arn:aws:braket:us-east-1::device/qpu/quera/Aquila"
aquila = AwsDevice(aquila_arn, aws_session)
ahs_program = AnalogHamiltonianSimulation(
register=register,
hamiltonian=H
)
result = aquila.run(ahs_program, shots=nshots).result()
plot_avg_density(get_avg_density(result), register)
※また、サードパティデバイスとパーミッションをEnabledにする必要があります。
結果の分析
シミュレーションが完了すると、各サイトの原子の平均密度など、結果を分析できます。これにより、システムで作成された物質の相を特定できます。