Package: tytan
最新情報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/tytanpipインストールはこちらです。pip install -U tytanサンプルコード１3個の量子ビットのうち2個だけを1にする例です。結果は「量子ビットの値」「エネルギー（コスト）値」「出現数」の順で格納されています。fromtytanimport*#量子ビットを用意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)#結果forrinresult: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]サンプルコード２3ルーク問題は、3×3マスに3つのルーク（飛車）を互いに利きが及ばないように置く方法を探す問題です。二次元配列的な添字を持った量子ビットをまとめて定義する関数があります（配列形式も可）。サンプリングの乱数シードは固定できます。結果を二次元配列に戻して可視化する方法も3種類あります。詳しくはドキュメントを参照ください。fromtytanimport*#量子ビットを用意（まとめて定義）command=symbols_define([3,3])print(command)exec(command)#各行に1つだけ1H=0H+=(q0_0+q0_1+q0_2-1)**2H+=(q1_0+q1_1+q1_2-1)**2H+=(q2_0+q2_1+q2_2-1)**2#各列に1つだけ1H+=(q0_0+q1_0+q2_0-1)**2H+=(q0_1+q1_1+q2_1-1)**2H+=(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')forrinresult: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{}_{}')importmatplotlib.pyplotaspltprint('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商用利用OKTYTANは商用利用前提ですので、個人での利用はもちろん企業での活用を促進しています。更新履歴日付内容2023/07/09網羅探索するオプション追加2023/07/01Compile修正, requirements.txt修正2023/06/21Auto_array修正, SASampler性能UP2023/06/17symbols_nbit, Auto_array.get_nbit_value追加2023/06/17requirements.txt修正2023/06/12SASampler性能UP, GASampler性能UP2023/06/10symbols_list, symbols_define追加、ドキュメント作成2023/06/07Auto_array追加2023/06/01シード固定追加2023/05/26全体構造修正2023/03/28SASampler高速化2023/03/22GASampler追加2023/03/15初期版