Help us understand the problem. What is going on with this article?

量子コンピュータ何から手をつけていいのか疑惑に軽く答える(VQEを想定)

はじめに

量子コンピュータは正直どっから手をつけていいかわからんと思います(もしくは思う人もいると思います)。実際1から量子計算を覚えたりしてプログラムをして仕事に生かしたいという人もいますし、手っ取り早くプログラムを覚えたいという人も。

今回は、

1、まずプログラムを覚える
2、壁に当たったら理論に戻る

という順でやることを想定します。疑問があったらslackでいつでも聞けるので。

https://join.slack.com/t/blueqat/shared_invite/enQtNzc3NjgxNjA5OTA2LTNmNjg0YzAzNGUxYmYwNDIxNWFlZGVkODI0MTE2NDMwM2I3OTRjNGExZjMxZWFmZDI3ZTRlNDU3NTcwZDUyOTk

とりあえずプログラムを覚える

今回はVQE(ブイキューイー)というアルゴリズム(アプリケーション)を想定します。VQEは行列の固有値を求めるためのアルゴリズムですが、それを使って問題を解くことができます。

1、量子化学計算
2、組合せ最適化問題

VQEでは、エルミート行列という行列の固有値を求めることができ、エルミート行列はユニタリ行列という行列の和で表すことができます(文言は気にしなくていいです)。

このときたい行列のことを「ハミルトニアン」と呼びますが、量子化学計算や組合せ最適化問題の場合には、このハミルトニアンをエルミート行列の形で量子コンピュータのプログラミングにスムーズに落とし込むことができます。

そのため、問題を式の形に直して、それがエルミート行列の形になっているので、そのままVQEに渡すと量子コンピュータで解けます。

量子化学計算は量子化学を行っていた人には馴染みはありますが、一般には馴染みのないものなので、より一般の仕事に使われるであろう「組合せ最適化問題」を見てみたいと思います。

組合せ最適化問題では、上記のハミルトニアンをエルミート行列の形で書くことができます。

組合せ最適化問題

組合せ最適化問題は多くの選択肢からベストな答えを選ぶ問題です。社会問題でよく例題として利用されます。

VQEで解ける問題の一つに、組合せ最適化問題があります。社会問題をうまく式の形にし、その式をVQEで解くことで答えを取ることができます。

主に選択肢を選んだ状態を1、選ばない状態を0としますが、様々な条件をつけながら問題を解きます。

今回は社会問題を量子コンピュータに応用する手筈としてVQEに注目してみたいと思います。

blueqatを導入

これは前回の復習になりますが、

1、ローカルマシンにblueqatをインストール

pip3 install blueqat

2、Google Colabを利用
上記と同じですが、google colabを開いて、

https://colab.research.google.com/

pip3 install blueqat

をします。

3、quantumcomputing.comを利用
こちらはいちばん簡単ですが、登録が必要です。

https://app.quantumcomputing.com/
にアクセスすればいいですが、アカウントの作成は、

https://app.quantumcomputing.com/signup
から。現在はβ運用中で今年製品版が出ます。無料です。こちらは最初からblueqatが入っているのでインストール不要です。

VQEをblueqatで使う

おさらいですが、使ってみます。

「blueqatでVQE、(なるべく)難しいことなしで」
https://qiita.com/YuichiroMinato/items/7b0c6d8ba6214ff845dd

from strangeworks.blueqat import StrangeworksBackend #quantumcomputing.comの時だけ必要
import numpy as np
from blueqat import Circuit
from blueqat.pauli import X, Y, Z, I
from blueqat.vqe import AnsatzBase, Vqe

class OneQubitAnsatz(AnsatzBase):
    def __init__(self, hamiltonian):
        super().__init__(hamiltonian.to_expr(), 2)
        self.step = 1

    def get_circuit(self, params):
        a, b = params
        return Circuit().ry(a)[0].rz(b)[0]


# この定式化が大事
h = 1.23 * I - 4.56 * X(0) + 2.45 * Y(0) + 2.34 * Z(0)
runner = Vqe(OneQubitAnsatz(h))
result = runner.run()

print('Result by VQE')
print(runner.ansatz.get_energy(result.circuit, runner.sampler))

上記の例題はquantumcomputing.comでこちらのリンクで共有します。

https://app.quantumcomputing.com/public/projects/udFDCw

いよいよ定式化

今回は上記のhの部分を定式化と言って、式を作ってみます。ルールは、

・問題をイジングモデルと呼ばれるモデルに落とし込む
・Zだけを使う

ということです。

一応例題のリンクはこちらです。
https://app.quantumcomputing.com/public/projects/udFDCw

今回は、

h = -Z(0) - Z(0)*Z(1)

という問題をやってみます。まずはこれを解きます。

from strangeworks.blueqat import StrangeworksBackend #quantumcomputing.comの時だけ必要
import numpy as np
from blueqat import Circuit
from blueqat.pauli import X, Y, Z, I
from blueqat.vqe import AnsatzBase, Vqe

class OneQubitAnsatz(AnsatzBase):
    def __init__(self, hamiltonian):
        super().__init__(hamiltonian.to_expr(), 2)
        self.step = 1

    def get_circuit(self, params):
        a, b = params
        return Circuit().ry(a)[0].rz(b)[0]


# この定式化が大事
h = -Z(0) - Z(0)*Z(1)
runner = Vqe(OneQubitAnsatz(h))
result = runner.run()

print('Result by VQE')
print(runner.ansatz.get_energy(result.circuit, runner.sampler))

そうすると、

Result by VQE
-1.9999943170511056

約-2が答えとして出てきました。これで終わりです。ルールを説明します。

Zは1か-1をとる

h = -Z(0) - Z(0)*Z(1)

Zの後ろの数字は、量子ビットの通し番号を表します。0番目と1番目の量子ビットの2つを使っています。また、問題設定で大事なのは、Zの前の係数です。

Z(0)の前は-1
Z(0)*Z(1)の前は-1

がついています。業界では、それぞれ「局所磁場」と「相互作用」とか会社によって呼び名が違いますが、ここではあえて、「バイアス」と「ウェイト」という名前にしてみます。

Zは-1か+1のどちらかをとります。
また、hはより小さい値を取ると正解になります。
上記VQEではhの一番小さい数字を取るように計算されます。

手計算で考えてみると、
Z(0)のバイアスが-1で、Z(0)*Z(1)のウェイトが-1の時、
Z(0)=+1で、
Z(1)=+1の時に

h = -1*1 - 1*1 = -2

で最小になるはずです。これを自動でやってくれます。

Z(0),Z(1)の値で場合わけすると、

Z(0) Z(1) h
-1 -1 0
-1 1 2
1 -1 0
1 1 -2

このZ(0)とZ(1)を探すのが、今回の目的なので、達成されました。

この問題を大きくするだけで社会問題がたくさん解ける

そして実際にはより大きな問題を解きます。

上記問題は役にたたなさそうですが、Z(0)をAさん、Z(1)をBさんに見立てて、Aさんはグループ1に属し、BさんはAさんと同じグループに属するという条件をつけた分類問題と同じです。

ただ、このままでは毎回問題を解くのが大変なので様々な工夫がされています。-1と+1の代わりに0と1を使うなど覚えるべきテクニックがたくさんあります。

VQEで社会問題をこのまま解いてもいいですが、定式化やその他のテクニックに関してもう少しあるので、次回は組合せ最適化問題に特化したQAOAを初心者向けにみてみたいと思います。

mdrft
量子コンピュータのアプリケーション、ミドルウェア、ハードウェアをフルスタックで開発
https://mdrft.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした