Skip to content

HOBO対応の疑似量子アニーリングパッケージ

Notifications You must be signed in to change notification settings

ShoyaYasuda/hobotan

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

63 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

新着情報

★ 2026/02/03

v1.0.0でワンホット制約に強い有料サンプラーを追加!詳しくはお問い合わせください。

概要

GPU利用を前提としています。別途Pytorchをインストールしておいてください。

v0.1.0でメモリオーバー対策をしました。324量子ビットの8次式で動作確認済み。tytanでHOBOをコンパイルしてメモリオーバーになる場合はこちらを使ってください。

追記:12次式の動作も確認しました。パズルを解いた記事 もご参照ください。

インストール・アップデート

pip install -U git+https://github.com/ShoyaYasuda/hobotan

サンプルコード1

量子ビットは2次元配列で定義でき、定式化でq[0, 0]のように使用できる。(3次元もできるよ)

MIKASAmpler()を使用(別途pytorchをインストールしておくこと)。shots=10000のように増やせる。

以下のコードは、5✕5の席にできるだけ多くの生徒を座らせる(ただし縦・横に3席連続で座ってはいけない)を解いたもの。3次の項が登場する。

import numpy as np
from hobotan import *
import matplotlib.pyplot as plt

#量子ビットを用意
q = symbols_list([5, 5], 'q{}_{}')

#すべての席に座りたい(できれば)
H1 = 0
for i in range(5):
    for j in range(5):
        H1 += - q[i, j]

#どの直線に並ぶ3席も連続で座ってはいけない(絶対)
H2 = 0
for i in range(5):
    for j in range(5 - 3 + 1):
        H2 += np.prod(q[i, j:j+3])
for j in range(5):
    for i in range(5 - 3 + 1):
        H2 += np.prod(q[i:i+3, j])

#式の合体
H = H1 + 10*H2

#HOBOテンソルにコンパイル
hobo, offset = Compile(H).get_hobo()
print(f'offset\n{offset}')

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

#サンプリング
result = solver.run(hobo, shots=10000)

#上位3件
for r in result[:3]:
    print(f'Energy {r[1]}, Occurrence {r[2]}')

    #さくっと配列に
    arr, subs = Auto_array(r[0]).get_ndarray('q{}_{}')
    print(arr)

    #さくっと画像に
    img, subs = Auto_array(r[0]).get_image('q{}_{}')
    plt.figure(figsize=(2, 2))
    plt.imshow(img)
    plt.show()
offset
0
MODE: GPU
DEVICE: cuda:0
Energy -17.0, Occurrence 686
[[1 1 0 1 1]
 [1 1 0 1 1]
 [0 0 1 0 0]
 [1 1 0 1 1]
 [1 1 0 1 1]]
Energy -17.0, Occurrence 622
[[1 1 0 1 1]
 [1 0 1 1 0]
 [0 1 1 0 1]
 [1 1 0 1 1]
 [1 0 1 1 0]]
Energy -17.0, Occurrence 496
[[0 1 1 0 1]
 [1 1 0 1 1]
 [1 0 1 1 0]
 [0 1 1 0 1]
 [1 1 0 1 1]]

サンプルコード2

以下のコードはx^2+y^2=z^2を満たすピタゴラス数(x, y, zとも1~16)を求めたもの。4次の項が登場する。

from hobotan import *

#量子ビットを2進数表現で用意
x = symbols_nbit(0, 16, 'x{}', num=4) + 1
y = symbols_nbit(0, 16, 'y{}', num=4) + 1
z = symbols_nbit(0, 16, 'z{}', num=4) + 1

#ピタゴラス条件
H = (x**2 + y**2 - z**2)**2

#HOBOテンソルにコンパイル
hobo, offset = Compile(H,).get_hobo()
print(f'offset\n{offset}')

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

#サンプリング
result = solver.run(hobo, shots=10000)

#上位10件
for r in result[:10]:
    print(f'Energy {r[1]}, Occurrence {r[2]}')
    
    #さくっと10進数に戻す
    print('x =', Auto_array(r[0]).get_nbit_value(x))
    print('y =', Auto_array(r[0]).get_nbit_value(y))
    print('z =', Auto_array(r[0]).get_nbit_value(z))
offset
1.0
MODE: GPU
DEVICE: cuda:0
Energy -1.0, Occurrence 1105
x = 8.0
y = 6.0
z = 10.0
Energy -1.0, Occurrence 643
x = 12.0
y = 9.0
z = 15.0
Energy -1.0, Occurrence 781
x = 12.0
y = 5.0
z = 13.0
Energy -1.0, Occurrence 1532
x = 3.0
y = 4.0
z = 5.0
Energy -1.0, Occurrence 1461
x = 4.0
y = 3.0
z = 5.0
Energy -1.0, Occurrence 860
x = 5.0
y = 12.0
z = 13.0
Energy -1.0, Occurrence 688
x = 6.0
y = 8.0
z = 10.0
Energy -1.0, Occurrence 1050
x = 9.0
y = 12.0
z = 15.0
Energy 0.0, Occurrence 108
x = 11.0
y = 1.0
z = 11.0
Energy 0.0, Occurrence 29
x = 10.0
y = 1.0
z = 10.0

その他の使い方

論文/Paper HOBOTAN: Efficient Higher Order Binary Optimization Solver with Tensor Networks and PyTorch

ブログ 量子アニーリング(HOBO対応)のパッケージ「HOBOTAN」が登場

ブログ 新型ソルバーの試作品、HOBOソルバー hobotan ができたようです。

blog A prototype of the new solver, HOBO solver "hobotan," is now available.

ブログ HOBOソルバーでグラフカラーリング問題を効率化

blog Optimizing Graph Coloring Problems with the HOBO Solver

TYTANパッケージ の派生形なのでそちらも参照してみてください。

開発㌠

derwindさん(理論)、yuminさん(マネージャー)、Shoya Yasudaさん(実装)

更新履歴

日付 ver 内容
2026/02/03 1.0.0 ワンホット制約に強い有料サンプラーを追加
2025/11/27 0.1.9 shots下限値を1に引き下げ(KF様協力)
2025/09/08 0.1.8 numpy2系での結果の表示を修正
2025/05/26 0.1.7 パラメータ微調整
2025/01/22 0.1.5 高次項への対応強化(KF様協力)
2025/01/17 0.1.4 コンパイル時に項が相殺されないように修正
2025/01/09 0.1.3 テンソルの次元を表示
2024/10/13 0.1.2 ランダム性を追加
2024/10/13 0.1.1 ソルバー実行後にGPUメモリクリア
2024/10/13 0.1.0 メモリオーバー対策、余計な要素を削除
2024/07/28 0.0.8 TT分解オプションを追加(未検証)
2024/07/27 0.0.7 exec(command)を解除
2024/07/27 0.0.6 compileのミスを修正
2024/07/27 0.0.5 symbols_nbitを追加
2024/07/26 0.0.4 MIKASAmplerに改名
2024/07/26 0.0.3 テンソル計算を高速化
2024/07/26 0.0.2 いろいろ修正
2024/07/26 0.0.1 初期版

About

HOBO対応の疑似量子アニーリングパッケージ

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •  

Languages