2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Qiskitで組み合わせ最適化問題解いてみた

Last updated at Posted at 2020-05-17

以前blueqatで組み合わせ最適化問題を実装しました(blueqatの記事はこちら)が、今回はQiskitで実装していきたいと思います。この記事は実装方法の確認を目的としているため、組み合わせ最適化問題自体は簡単なものを取り扱いたいと思います。

解く問題

解く問題は以前と同じです。以下のハミルトニアン$H$が最小となる$q(0)$、$q(1)$の組み合わせを求めます。
$$
H = 1 - q(0) - q(1)
$$
なお、$q(0)$、$q(1)$は0もしくは1のどちらかの値となります。この問題設定では、$q(0)=q(1)=1$のときハミルトニアン$H=-1$で最小値となります。

補足情報

ちなみに、すべての$q(0), q(1)$の組み合わせについてハミルトニアンは以下の値となります。

  • $q(0)=0,q(1)=0 \rightarrow H = 1$
  • $q(0)=0,q(1)=1 \rightarrow H = 0$
  • $q(0)=1,q(1)=0 \rightarrow H = 0$
  • $q(0)=1,q(1)=1 \rightarrow H = -1$

実行環境について

Google Colabratoryで実行します。Qiskitのバージョンは「0.14.1」となります。

ソースコード

Qiskitをインストール

pip install qiskit

Qiskitの必要パッケージのインポート

from qiskit import BasicAer
from qiskit.aqua.algorithms import QAOA
from qiskit.optimization.algorithms import MinimumEigenOptimizer
from qiskit.optimization import QuadraticProgram

変数、ハミルトニアンの定義

qubo = QuadraticProgram()
#バイナリ変数定義
qubo.binary_var('q0')
qubo.binary_var('q1')
# ハミルトニアン定義
qubo.minimize(linear=[-1,-1],constant=1.0)
print(qubo.export_as_lp_string())

変数、ハミルトニアンの定義結果は以下の通りです。

\ This file has been generated by DOcplex
\ ENCODING=ISO-8859-1
\Problem name: CPLEX

Minimize
 obj: - q0 - q1 + 1
Subject To

Bounds
 0 <= q0 <= 1
 0 <= q1 <= 1

Binaries
 q0 q1
End

QAOAで定義したハミルトニアンを解きます。

# MinimumEigensolverの初期化
qaoa_mes = QAOA(quantum_instance=BasicAer.get_backend('statevector_simulator'))

# Optimizerの作成
qaoa = MinimumEigenOptimizer(qaoa_mes) 

#QAOA計算/結果出力
qaoa_result = qaoa.solve(qubo)
print("QAOA result:")
print(qaoa_result)

実行結果は以下の通りです。

QAOA result:
x=[1.0,1.0], fval=-1.0

うまく解を求めることができました!

実装してみた感想

実装してみた感想は「書きにくい・・・」です。特に違和感があるのは、ハミルトニアン定義部分です。バイナリ変数q0、q1をSympyのSymbolみたいに扱えると思っていたんですが、そうじゃなさそうです。

最後に

Qiskitでのもっといい実装方法があれば教えてください。個人的にあまりスマートじゃないなーと思っているので。

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?