新型ソルバーの試作品、HOBOソルバー hobotan ができたようです。
discordでチャンネルを作って有志で新型のソルバーを作っています。
QUBOを拡張してHOBOにしています。
QUBOアニーリング対応のライブラリのTYTANに統合すべく作業をしていますが、
https://github.com/ShoyaYasuda/hobotan
に試作品ができました。機能限定でお試しできますので、ぜひフィードバックをお願いいたします。
pip install -U git+https://github.com/ShoyaYasuda/hobotan
import numpy as np
from hobotan import *
"""
1次元配列のみ対応 [4, 4]とかはダメ
記号はqのみ対応
"""
q = symbols_list(5, 'q{}')
print(q)
"""
式はおそらく何次でもOK
"""
H = (q[0] + q[1] + q[2] + q[3] + q[4] - 5)**2 - 20*q[1]*q[2] - 10*q[1]*q[2]*q[3] + 5*q[1]*q[2]*q[3]*q[4]
#HOBOテンソルにコンパイル
hobo, offset = Compile(H).get_hobo()
print(offset)
print(hobo)
#サンプラー選択(乱数シード固定)
solver = sampler.SASampler(seed=0)
#サンプリング(100回)
result = solver.run(hobo, shots=100)
#結果
for r in result:
print(r)
arr, subs = Auto_array(r[0]).get_ndarray('q{}')
print(arr)
とすると、
[q0 q1 q2 q3 q4]
25
[{'q0': 1, 'q1': 1, 'q2': 1, 'q3': 1, 'q4': 0}, -54.0, 100]
[1 1 1 1 0]
と式がきちんと多体対応されています。少しインターフェイスを直したら今後は、内部のソルバーの改造ができそうです。
楽しみですね。