common.title

Docs
Quantum Circuit
TYTAN CLOUD

QUANTUM GAMING


Overview
Terms of service

Privacy policy

Contact
Research

Sign in
Sign up
common.title

無料blueqat cloudから疑似量子アニーリングをneal+pyquboで実行する方法

Yuichiro Minato

2022/06/01 02:58

blueqat cloudでquboを実行する方法を紹介します。

ツール類はすでにプリインストールされていますので何も考えずに使えます。

まずはツールを読み込みます。

*このipynbはblueqat.comからですと左上の雲ダウンロードマークをおすと自分のクラウドのフォルダのimportedに自動的にコピーされます。

import neal
from pyqubo import Array

次に量子ビットを準備します。QUBOの場合にはBINARYを指定します。

q = Array.create('q', shape=(5), vartype='BINARY')

式を書きます。

H = -2*q[0] -2*q[1] -3*q[2] -3*q[3] -2*q[4] +2*q[0]*q[1] +2*q[1]*q[2] +2*q[0]*q[3] +2*q[2]*q[3] +2*q[2]*q[4] +2*q[3]*q[4]

あとは変換してシミュレータに投げることで解を得ることができます。

#お決まりの変換。特に考えない。
model = H.compile()
bqm = model.to_bqm()

sa = neal.SimulatedAnnealingSampler()
sampleset = sa.sample(bqm, num_reads=10)
print(sampleset)
  q[0] q[1] q[2] q[3] q[4] energy num_oc.
0    0    1    0    1    0   -5.0       1
1    1    0    1    0    0   -5.0       1
2    1    0    1    0    1   -5.0       1
3    0    1    0    1    1   -5.0       1
4    1    0    1    0    0   -5.0       1
5    0    1    0    1    0   -5.0       1
6    1    0    1    0    1   -5.0       1
7    1    0    1    0    1   -5.0       1
8    0    1    0    1    0   -5.0       1
9    1    0    1    0    1   -5.0       1
['BINARY', 10 rows, 10 samples, 5 variables]
decoded_samples = model.decode_sampleset(sampleset)
best_sample = min(decoded_samples, key=lambda x: x.energy)
print("Sample =", best_sample.sample)
print("Cost =", best_sample.energy)
Sample = {'q[4]': 0, 'q[3]': 1, 'q[2]': 0, 'q[1]': 1, 'q[0]': 0}
Cost = -5.0
from pyqubo import Array, Constraint
import neal

#今回は3量子ビットのみ
q = Array.create('q', shape=(3), vartype='BINARY')

#式を別々に用意します。
HA = (3*q[0]+2*q[1]+q[2]-3)**2 + (5*q[0]+2*q[1]+3*q[2]-5)**2
HB = -(q[0]+2*q[1]+q[2])

#つけるときに今回はConstraint関数を使うことであとで簡単に確かめができます。Constraintは制約条件の方だけにつけます。
M = 10
H = Constraint(HA, label="const1") + M*HB

model = H.compile()
bqm = model.to_bqm()

sa = neal.SimulatedAnnealingSampler()
sampleset = sa.sample(bqm, num_reads=10)
print(sampleset)
  q[0] q[1] q[2] energy num_oc.
0    0    1    1  -30.0       1
1    0    1    1  -30.0       1
2    0    1    1  -30.0       1
3    0    1    1  -30.0       1
4    0    1    1  -30.0       1
5    0    1    1  -30.0       1
6    0    1    1  -30.0       1
7    0    1    1  -30.0       1
8    0    1    1  -30.0       1
9    0    1    1  -30.0       1
['BINARY', 10 rows, 10 samples, 3 variables]
decoded_samples = model.decode_sampleset(sampleset)
best_sample = min(decoded_samples, key=lambda x: x.energy)
print("Sample =", best_sample.sample)
print("Cost =", best_sample.energy)
print("Break =", best_sample.constraints(only_broken=True))
Sample = {'q[2]': 1, 'q[1]': 1, 'q[0]': 0}
Cost = -30.0
Break = {}

アニーリング実例のおさらい

化学
・線形回帰(旭化成様)
・量子化学
・ボルツマンマシン機械学習

自動車
・交通最適化
・自動車の軌跡データ圧縮(凸版印刷様)
・構造部材の構造計算最適化

建設
・部材、構造計算
・シフト最適化
・生産工程最適化

小売/広告
・広告とか配置
・物流サプライ
・リコメンド

創薬
・プロテインフォールディング
・分子ドッキング
・その他機械学習

© 2025, blueqat Inc. All rights reserved