kotamanegiの取り扱い説明書

のんびり趣味の事を書いてます。

量子競プロ学習サービスQookbookについて

この記事は 競プロ Advent Calendar 2023 の 13 日目の記事として書かれました。

未踏ターゲット事業で、競プロ風に量子コンピュータの勉強ができるサービスQookbookを開発しています。

目次

自己紹介

大阪大学大学院情報科学研究科 コンピュータサイエンス専攻M2のkotamanegi (@small_onions) です。 競技プログラミングでは、1か月弱ほど前に国際大学対抗プログラミングコンテスト (ICPC) アジア地区横浜大会にて競プロ人生ではじめて銅メダルをいただきました。

その他にも、伊野研究室で量子回路シミュレータの高速化をしたり、株式会社ALGO ARTISで最適化を学んだりしています。

さて、本題のQookbookの話に移ります。

何ができるの?

物理学の事前知識なしで、競技プログラミングのように問題を解きながら量子情報の知識を身に付けることができます。 左側には問題文やテキストが表示されるスペースが、右側にはソースコードを書き込むためのスペースがあります。 ソースコードを書いたらweb上でそのまま実行しながらデバッグができ、うまく動作しそうであれば提出して採点を受けることができます。

舞台裏になる問題作成ツールなどにも力を入れており、競技プログラミングにおける「インタラクティブ問題」が簡単に書ける仕組みを作成しています。 システム面の補強と並行して、将来的に次のようなコンテンツを追加していきたいと思っています。

なぜ作ろうとしたのか?

量子コンピュータの世界には、競プロerや情報系の方が好きそうな話題がゴロゴロと転がっているのに、別分野のように見えて敷居が高くなかなか参入できないからです。 僕が量子コンピュータの世界に飛び込んだきっかけは、藤井先生のつぶやきでした。

この後に藤井先生の下で、量子回路シミュレータ Qulacs の開発を担当するなど様々な経験をさせていただきました。 特に興味を持ったのはノイズなどで生じた誤りを訂正する量子誤り訂正や、量子プログラムをより単純な制御命令列に変換する量子コンパイラなどの分野でした。 量子誤り訂正については、表面符号と呼ばれる誤り訂正符号について 焼きなまし法で誤り訂正を行うという研究 や、 フェニック木 (BIT) を用いて誤り訂正を高速化するという研究 など、どこかで聞き覚えがあるアルゴリズムを使った研究がされています。

https://qiita.com/SamN/items/c2b6b4c28bae922bc634 より引用。表面符号では青色マスを2つペアにして繋ぐことで誤り訂正を行っています。繋ぎ方によって正しく誤りを訂正できる確率が変わります。

量子コンパイラについては、できるだけ計算資源を有効活用して短時間で計算が終わるように、様々な最適化手法を使ってスケジューリング問題を解くという研究がなされています。 有名な例として、量子回路を格子手術の命令列に落とし込むために、タイルを変形するパズル問題を解くという研究があります。

A Game of Surface Codes: Large-Scale Quantum Computing with Lattice Surgery (https://arxiv.org/abs/1808.02892)のFig.11より引用。 ヒューリスティックコンテストで出てきそうな図です。

このような研究を面白いと思いながら勉強していく中で痛感したのは、学習時点では地に足が付かないような内容が多く、内容の理解がとても難しいということです。 当時から初学者向けの教材は Quantum Native Dojo などネットの教材も含めて沢山ありましたが、難しい部分に行くにつれ自分がどこまで理解しているのかわからなくなっていきました。 理解を深めるために演習問題などを解くわけですが、実はちゃんと理解していないのにスルーしてそのまま進み、後でつまづきに気が付くといったことも頻繁にありました。

それに対して競技プログラミングは、理論の理解度が自己判定しやすいため確実に一歩ずつ進めるという特徴があります。 学びたいトピックに対して大量の演習問題があり、問題を解くプログラムを提出するとその場で採点されて採点結果が返ってきます。 演習問題を解くことまでは書籍でもできるのですが、その後の採点プロセスまでもを自動化することで、人力では不可能な刻み幅で理解度を判定することができています。

この競技プログラミングの特徴を、量子プログラミングの学習にも持ち込めないかと考えてQookbookの開発を始めました。 量子プログラミングもまた一つのプログラミングの系統で、アルゴリズムpythonプログラムなどとして記述されるので、いろいろと頑張れば競技プログラミングの枠組みに落とし込めそうだと考えました。 技術についても、高校生の頃に作った kotamanegi online judge のノウハウや、競技プログラミングなどで培った狂気の実装力を活用すれば1年弱で開発できるだろうと見積もり、未踏ターゲットに応募したところありがたいことに採択されて今に至ります。

最後に

競技プログラミングはコンテストが醍醐味の一つなので、もちろんコンテストをやります! 1/14(日)の13:00-17:00に、スコアを競う短期マラソン形式のコンテストを開催する予定です。

ささやかですが、副賞としてAmazonギフト券も用意しています。

  • 1位: 1万円
  • 2位: 5千円
  • 3位: 3千円
  • 4位〜10位: 1千円

コンテスト中も外部資料の参照はOKなので、もし予定が合えば気軽に参加していただけると嬉しいです。

謝辞

本サービスは、未踏ターゲット事業の支援を受けて開発しています。 未踏ターゲット事業では、担当PMの徳永PM様・鈴木TA様をはじめとして様々な方に助言をいただきました。 助言をいただけなければ、ここまで開発を進めることはできなかったように思います。 ここに深く感謝の意を表します。