Slide 1

Slide 1 text

はじめてみよう 量子プログラミング 2024.9.17 吉祥寺.pm36 ito-koichi

Slide 2

Slide 2 text

自己紹介 名前: ito-koichi (伊藤公一)  X:@itokoichi01X: @itokoichi01 所属:富士通 職業:システムエンジニア テーマ「プログラミング!」: 仕事:TypeScript、Kotlin 好きな言語:Ruby 量子プログラミングはただの趣味です(専門ではありません) Qiskit (IBMの量子コンピュータSDK) の資格持ってます

Slide 3

Slide 3 text

量子プログラミングしたことありますか ● 量子コンピュータ持ってません ● 量子プログラミングって言語は何を使うの? ここできみにすごいラッキーなニュースがあります

Slide 4

Slide 4 text

量子プログラミングはブラウザ上でできるんです * Python + Qiskit SDK 等 ● IBM Quantum Composer ● Qni ● QCoder ● Qookbook 量子プログラミング環境 を作る(*) コード プログラミング ビジュアル プログラミング ブラウザベースのサービス 自分で環境構築

Slide 5

Slide 5 text

量子プログラミングはブラウザ上でできるんです ● ビジュアル系 ○ IBM Quantum Composer (https://quantum.ibm.com/composer) ○ Qni (https://qniapp.net/) ● コード系 ○ QCoder (https://www.qcoder.jp/) (Qiskitを使用する) ○ Qookbook (https://www.qookbook.net/) IBM Quantum Composerを使って ビジュアル量子プログラミングのデモをします

Slide 6

Slide 6 text

IBM Quantum Composer IBM Quantum(*)のビジュアル量子プログラミング環境 * IBM Quantum: IBMの量子コンピューティングプラットフォーム ● 量子コンピュータのシミュレータを使えます(ユーザー登録不要) ※デモ ● 量子コンピュータの実機を使えます(ユーザー登録要) 量子プログラムの動きを見れるので便利

Slide 7

Slide 7 text

デモ 量子ビットの論理演算 量子ビットを量子ゲートで反転した後に測定する ● 量子ビット ○ ふつーのビットの量子版(重ね合わせ状態) ○ 重ね合わせ状態のままでは値は決まらない(不確定性原理) ○ 測定すると重ね合わせ状態が壊れて値が決まる(波束の収縮) ● 量子ゲート ○ ふつーの論理ゲートの量子版 ○ 入力、出力とも量子ビット(並列計算) ○ デモではXゲート(NOTゲートの量子版)を使う

Slide 8

Slide 8 text

デモ

Slide 9

Slide 9 text

できました! 量子プログラミングは ブラウザ上で すぐにはじめられる

Slide 10

Slide 10 text

できました! 量子プログラミング 完全に理解した! 

Slide 11

Slide 11 text

できました! おい

Slide 12

Slide 12 text

今回のデモはプログラムを書く部分 プログラムの書き方 ● ビジュアルプログラミング ● コードプログラミング 量子アルゴリズム ● 量子位相推定、誤り訂正 ... 前提知識 ● 数学、物理学 ● 情報理論 量子コンピュータの知識 ● 量子ビット、量子ゲート ● トランスパイラ プログラムの周 辺知識も必要 そのためにおす すめの方法を二 つ紹介します 適用できる問題の探求 ● 量子鍵配送、...

Slide 13

Slide 13 text

①勉強しよう ● 本(「量子コンピュータ」で探す) ● Webコンテンツ(チュートリアル等) ● 動画コンテンツ できれば数式を説明しているもの(大事) そのうち「数式の方がシンプルで楽」になる 説明をプログラムにして動かしてみる 実際に動かすことで説明を納得できる

Slide 14

Slide 14 text

①勉強しよう 本を読んでも「量子プログラミングなにもわからない(本当に)」とき 別の本を読んでみる それでもわからなかったら、さらに別の本を 一冊で全てを理解できなくてもいい(大事)

Slide 15

Slide 15 text

②量子プログラミングのイベントに参加しよう ● QCoder Programming Contest (https://www.qcoder.jp/) ○ 不定期に開催されるオンラインの量子プログラミングコンテスト(競プロ) ○ ブラウザ上でQiskitを使ったコードを入力して問題を解く ● IBM Quantum Challenge (https://challenges.quantum.ibm.com/) ○ 年2回くらい開催されるオンラインの量子プログラミングイベント ○ Python + Qiskitを実行できる環境を用意して問題を解く 問題が解けるとモチベーションが上がる(大事)

Slide 16

Slide 16 text

まとめ 量子プログラミングはブラウザ上ですぐにはじめられる 周辺知識を得るためには勉強とイベント参加がおすすめ 準備はできた おいでよ量子プログラミングの沼 基本的な 量子ゲート操作 量子 アルゴリズム ハイブリッド アルゴリズム 問題解決 量子アプリケーション 量子コンピュータ の基礎 とはいえ沼は広くて深い。無理せず楽しんでいこう

Slide 17

Slide 17 text

おまけ1 デモ

Slide 18

Slide 18 text

デモ 準備 1. IBM Quantum Composerを開く (https://quantum.ibm.c om/composer) ● ①:量子回路(ここに量子ゲー トを配置する) ● ②:量子ゲート(ここから回路 上に持っていく) ① ②

Slide 19

Slide 19 text

デモ 準備 2. 量子回路を学習用に1量子ビット構成にする 初期状態 q[3]をクリックしてごみ 箱。 q[0]のみにする c4をクリックしてマイナ ス。 c1まで減らす 1量子ビット構成の完成 → → →

Slide 20

Slide 20 text

デモ 準備 3. グラフを「Statevector」と「Probalilities」にする(左右は任意) ● Statevector (状態ベクトル) ○ 量子状態を表す ○ 初期状態は|0>が1.0、|1>が0.0 (ちなみに値は確率振幅と呼ばれる複素数 ) ● Probabilities (測定確率) ○ 量子状態を1024回測定したときに0, 1がそれぞれ出る確率 (%)

Slide 21

Slide 21 text

デモ 初期状態 ● 量子ビットの初期状態は |0> ● Statevectorは|0>が1.0

Slide 22

Slide 22 text

デモ Xゲートを配置する ● 量子ビットの初期状態は|0> ● Statevactorは|0>が1.0 ● Probabilitiesは未測定なので無し ● Xゲートを配置する ● 量子ビットは反転して |1>に なった ● Statevectorは|1>が1.0

Slide 23

Slide 23 text

デモ 測定 ● 測定を配置する ● 量子ビットを測定した結果が c1 に入る ● |1>状態は、測定すると100% で1になる ● Probabilitiesを見ると確かに1 が100%になっている

Slide 24

Slide 24 text

参考 量子コンピュータの実機で実行した結果 ノイズがあるため1が100%にはな らない 1024回の実行結果 ● 0: 19回 (1.9%) ● 1: 1005回 (98.1%)

Slide 25

Slide 25 text

おまけ2 量子プログラミングを学習するときの予備知識

Slide 26

Slide 26 text

量子プログラミングを学習するときの予備知識 本には書いてあることですが、最初はイメージしにくい(実感しにくい)ので図にしてみま した。 知ってると位相キックバックや量子テレポートを理解しやすいと思います。 ①量子ビットは全体で一つの系を構成する ②量子演算は量子系全体に影響する

Slide 27

Slide 27 text

①量子ビットは全体で1つの系を構成する 0 or 1 1ビット 2ビット 3ビット 古典ビット 量子ビット a|00> + b|01> + c|10> + d|11> 0 or 1 0 or 1 a|0> + b|1> 0 or 1 0 or 1 0 or 1 a|000> + b|001> + c|010> + d|011> + e|100> + f|101> + g|110> + h|111> 量子系は「全体で一つの状態ベクトル」ということです

Slide 28

Slide 28 text

②量子演算は量子系全体に影響する 入力 2ビット 0 or 1 0 or 1 a|00> + b|01> + c|10> + d|11> 古典ビット 量子ビット NOT 0 or 1 0 or 1 X 1ビット目を反転 a|01> + b|00> + c|11> + d|10> 出力 2ビット 量子演算は「系全体の状態ベクトル」を変更するものと考えるとよいです Id (単位ゲート)