時代はHOBOですよね。さっそくやってみます。
参考:
Space-efficient binary optimization for variational quantum computing
まだ上記参考論文はきちんと読んでないですが、HOBOを量子回路で実装したら効率的という話が仕事中に出てきました。確かにそう思いましたので、実装を試してみたいと思います。
QUBOは量子最適化業界で有名ですが、HOBOもそこそこですね。High Order Binary optimizationの略で、実装してみます。簡単に言うと01の二値ではなく整数が使えます。
QAOAを使って方程式を制約問題で解いてみたいと思います。
こちらの問題の答えは自然数で考えると、
で解けますね?
from blueqat import vqe
from blueqat.pauli import *
from blueqat.pauli import qubo_bit as q
x0 = q(0)+2*q(1)
x1 = q(2)+2*q(3)
hamiltonian = (3*x0 + 5*x1 - 13)**2
step = 8
result = vqe.Vqe(vqe.QaoaAnsatz(hamiltonian, step)).run()
print(result.most_common(4))
sample = result.most_common(1)[0][0]
x0_answer = sample[0] + 2*sample[1]
x1_answer = sample[2] + 2*sample[3]
print('x0:', x0_answer, 'x1:', x1_answer)
(((1, 0, 0, 1), 0.36062771920547754), ((1, 1, 1, 0), 0.33311197114878843), ((0, 1, 0, 1), 0.1037184166163281), ((0, 1, 1, 0), 0.049769281008857))
x0: 1 x1: 2
とりあえずできました。これを使うことでより効率的な実装もできるようですのですが、実際にはバイナリ値よりは解が出にくかった気がします。
巡回セールスマン問題では量子ビット数を減らすことができるようですので次回見てみたいと思います。