common.title

Docs
Quantum Circuit
TYTAN CLOUD

QUANTUM GAMING


Overview
Contact
Event
Project
Research

Terms of service (Web service)

Terms of service (Quantum and ML Cloud service)

Privacy policy


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