/ILASseminar

『ILASセミナー :量子コンピュータを動かしてみよう』の最終課題

Primary LanguagePythonMIT LicenseMIT

ILASセミナー: 量子コンピュータを動かしてみよう

これは2018年度前期に京都大学の全額共通科目の一つである『ILASセミナー: 量子コンピュータを動かしてみよう』 での最終課題をまとめたものである。

僕自身は潜りで受けていたのだが、一回生のMくんと一緒にチームを組んで今回の課題を完成させた。 感謝します。

加算器(Full Adder)

加算器の作成には https://github.com/Qiskit/openqasm/blob/master/examples/generic/adder.qasm を大いに参考にした。このコードは4bitの足し算をRipple-Carry adderで実装したものである。 (さらに8bitの足し算はここに載っている。) この足し算方式はこの論文で詳しく解説がなされている。

今回は4bit、8bitの足し算がすでに実装されているのでそれを16bitに拡張することを試みた。 このコードを動かすためにはIBM QでAPIのキーを取得し、 Qconfig.pyの保存する。そうすれば足し算ができるようになる。例えば、300+400の足し算をしたければ、

python adder.py 300 400

とすれば良い。それなりに待てば(ものによっては7分くらい)、700と出力する。

回路図

今回作成した加算器の回路図をtexで生成した。量子回路を作成するのに qcircuitというパッケージを用いた。 非常に書くのがめんどくさい。。。

加算器の回路はmajorityゲートとunmajorityゲートからなっている。

  • majorityゲート majority

  • unmajorityゲート unmajority

この2つのゲートを組み合わせることで今回の加算器が完成する。 adder なぜこの回路に至ったのかについては論文を読むべきだったが、 今回はそこまで回らなかった。

結論と今後の展望

今回は https://github.com/Qiskit/openqasm/blob/master/examples/generic/adder.qasm を参考に加算器を作成し、15bit+15bitの足し算回路を作成することに成功した。

ただ、やはり時間がかかる、という問題点はどうしても避けられない。 今回用いたRipple-Carry adderの他にも、 Carry-lookahead adderというものがあるらしく、この加算器は非常に高速に動くらしい。 今後時間があれば、Carry-lookahead adderの実装も行ってみたいと思う。