Skip to main content

QUBO Annealing SDK

Project description

最新情報

2023/06/21 Auto_array関数をより使いやすく。SASamplerの性能も上げました(たぶん本当)

2023/06/17 N-bit表現を扱うsymbols_nbit, Auto_array.get_nbit_value関数が追加されました。

2023/06/17 requirements.txtが軽くなりました。

2023/06/12 SASampler, GASamplerの性能が上がりました(ウソかも)

2023/06/10 便利なsymbols_list, symbols_define関数が追加されました。ドキュメント が作成されました。

TYTAN(タイタン)

大規模QUBOアニーリングのためのSDKです。

QUBOを共通の入力形式とし、複数のサンプラーから選んでアニーリングできます。

入力は、数式を記述する方法、QUBO行列を入力する方法、QUBO行列をcsv読み込みする方法があります。

結果を自動で多次元配列に変換する機能を搭載。短いコードで確認できます。詳しくは ドキュメント を参照ください。

サンプラーと問題サイズ

基本的なローカルサンプラーの他、外部のAPIサンプラーなどを組み込めるようにしています。組み込みたソルバーがあればご連絡ください。

ローカルサンプラー:1,000量子ビット程度まで

SASampler
GASampler

商用クラウドサンプラー:1,000-100,000量子ビット程度

ZekeSampler
NQSSampler

インストール

更新が頻繁なためgithubからのインストールを推奨します。

pip install -U git+https://github.com/tytansdk/tytan

pipインストールはこちらです。

pip install -U tytan

サンプルコード1

3個の量子ビットのうち2個だけを1にする例です。結果は「量子ビットの値」「エネルギー(コスト)値」「出現数」の順で格納されています。

from tytan import *

#量子ビットを用意
x = symbols('x')
y = symbols('y')
z = symbols('z')

#式を記述(3個のうち2個だけ1にする)
H = (x + y + z - 2)**2

#コンパイル
qubo, offset = Compile(H).get_qubo()

#サンプラー選択
solver = sampler.SASampler()

#サンプリング
result = solver.run(qubo)

#結果
for r in result:
    print(r)
[{'x': 0, 'y': 1, 'z': 1}, -4.0, 27]
[{'x': 1, 'y': 0, 'z': 1}, -4.0, 23]
[{'x': 1, 'y': 1, 'z': 0}, -4.0, 50]

サンプルコード2

3ルーク問題は、3×3マスに3つのルーク(飛車)を互いに利きが及ばないように置く方法を探す問題です。二次元配列的な添字を持った量子ビットをまとめて定義する関数があります(配列形式も可)。サンプリングの乱数シードは固定できます。結果を二次元配列に戻して可視化する方法も3種類あります。詳しくは ドキュメント を参照ください。

from tytan import *

#量子ビットを用意(まとめて定義)
command = symbols_define([3, 3])
print(command)
exec(command)

#各行に1つだけ1
H = 0
H += (q0_0 + q0_1 + q0_2 - 1)**2
H += (q1_0 + q1_1 + q1_2 - 1)**2
H += (q2_0 + q2_1 + q2_2 - 1)**2

#各列に1つだけ1
H += (q0_0 + q1_0 + q2_0 - 1)**2
H += (q0_1 + q1_1 + q2_1 - 1)**2
H += (q0_2 + q1_2 + q2_2 - 1)**2

#コンパイル
qubo, offset = Compile(H).get_qubo()

#サンプラー選択(乱数シード固定)
solver = sampler.SASampler(seed=0)

#サンプリング(100回)
result = solver.run(qubo, shots=100)

#すべての結果を確認
print('result')
for r in result:
    print(r)

#1つ目の結果を自動配列で確認(ndarray形式)
arr, subs = Auto_array(result[0]).get_ndarray('q{}_{}')
print('get_ndarray')
print(arr)
print(subs)

#1つ目の結果を自動配列で確認(DataFrame形式)(1次元、2次元のみ)
df, subs = Auto_array(result[0]).get_dframe('q{}_{}')
print('get_dframe')
print(df)

#1つ目の結果を自動配列で確認(image形式)(2次元のみ)
img, subs = Auto_array(result[0]).get_image('q{}_{}')
import matplotlib.pyplot as plt
print('get_image')
plt.imshow(img)
plt.yticks(range(len(subs[0])), subs[0])
plt.xticks(range(len(subs[1])), subs[1])
plt.show()
q0_0 = symbols('q0_0')
q0_1 = symbols('q0_1')
q0_2 = symbols('q0_2')
q1_0 = symbols('q1_0')
q1_1 = symbols('q1_1')
q1_2 = symbols('q1_2')
q2_0 = symbols('q2_0')
q2_1 = symbols('q2_1')
q2_2 = symbols('q2_2')
result
[{'q0_0': 0, 'q0_1': 0, 'q0_2': 1, 'q1_0': 0, 'q1_1': 1, 'q1_2': 0, 'q2_0': 1, 'q2_1': 0, 'q2_2': 0}, -6.0, 11]
[{'q0_0': 0, 'q0_1': 0, 'q0_2': 1, 'q1_0': 1, 'q1_1': 0, 'q1_2': 0, 'q2_0': 0, 'q2_1': 1, 'q2_2': 0}, -6.0, 20]
[{'q0_0': 0, 'q0_1': 1, 'q0_2': 0, 'q1_0': 0, 'q1_1': 0, 'q1_2': 1, 'q2_0': 1, 'q2_1': 0, 'q2_2': 0}, -6.0, 17]
[{'q0_0': 0, 'q0_1': 1, 'q0_2': 0, 'q1_0': 1, 'q1_1': 0, 'q1_2': 0, 'q2_0': 0, 'q2_1': 0, 'q2_2': 1}, -6.0, 21]
[{'q0_0': 1, 'q0_1': 0, 'q0_2': 0, 'q1_0': 0, 'q1_1': 0, 'q1_2': 1, 'q2_0': 0, 'q2_1': 1, 'q2_2': 0}, -6.0, 20]
[{'q0_0': 1, 'q0_1': 0, 'q0_2': 0, 'q1_0': 0, 'q1_1': 1, 'q1_2': 0, 'q2_0': 0, 'q2_1': 0, 'q2_2': 1}, -6.0, 11]
get_ndarray
[[0 0 1]
 [0 1 0]
 [1 0 0]]
[['0', '1', '2'], ['0', '1', '2']]
get_dframe
   0  1  2
0  0  0  1
1  0  1  0
2  1  0  0
get_image

商用利用OK

TYTANは商用利用前提ですので、個人での利用はもちろん企業での活用を促進しています。

更新履歴

日付 内容
2023/07/09 網羅探索するオプション追加
2023/07/01 Compile修正, requirements.txt修正
2023/06/21 Auto_array修正, SASampler性能UP
2023/06/17 symbols_nbit, Auto_array.get_nbit_value追加
2023/06/17 requirements.txt修正
2023/06/12 SASampler性能UP, GASampler性能UP
2023/06/10 symbols_list, symbols_define追加、ドキュメント作成
2023/06/07 Auto_array追加
2023/06/01 シード固定追加
2023/05/26 全体構造修正
2023/03/28 SASampler高速化
2023/03/22 GASampler追加
2023/03/15 初期版

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

tytan-0.1.1.tar.gz (24.5 kB view details)

Uploaded Source

File details

Details for the file tytan-0.1.1.tar.gz.

File metadata

  • Download URL: tytan-0.1.1.tar.gz
  • Upload date:
  • Size: 24.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.10.9

File hashes

Hashes for tytan-0.1.1.tar.gz
Algorithm Hash digest
SHA256 bd02f2d67334277f1912c52f1b1ff64e7a0d8949d0a1bfe58762590586357915
MD5 d92625480a08aac2be9e9cf5508f25d0
BLAKE2b-256 2666b87d68f7ba566543611c7db16758a487ce47e1592144e2cef2ef6cfca4fc

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page