Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Q#基礎 ver1.1

310 views

Published on

Q#を始める人向けのまとめ資料 v1.1。Quantum Development Kit 0.3に対応。

Published in: Technology
  • Be the first to comment

  • Be the first to like this

Q#基礎 ver1.1

  1. 1. Q# 基礎 Ver1.1 2018/11 @tanaka_733 https://www.tanaka733.net
  2. 2. 変更履歴 Version 公開日 主な変更点 1.0 2018/10/30 初版 1.1 2018/11/05 Quantum Development Kit 0.3に対応
  3. 3. この資料について Q#で初めて開発する人向けに、 いくつかの勉強会での発表資料をひとつにまとめました 目次 ◦ Q#入門 ◦ Q#の主なOperation ◦ もっとQ#を勉強するために
  4. 4. Q#入門 この章は先週の別の勉強会の資料の抜粋です https://www.slideshare.net/tanakata/q-117200034
  5. 5. 量子コンピューターモデル
  6. 6. Q#とは 量子コンピューティングのためのスケーラブルでマルチパラダイムでドメイン特化した言語 ◦ 関数型と命令型のマルチパラダイム 文法的にはC#やJavaに似たような構造 ◦ F#およびほかの関数型言語のキーワードも導入している 量子機械の上での操作を記述できる ◦ 抽象化の度合いや、シミュレーターから実機まで幅広く対象とする ◦ 数百Qubit程度の小さいマシンから百万Qubitオーダーまで対象とする (実機がまだ存在しないが) デバッグやプロファイル、利用リソースの推定や特定の目的のためのシミュレーション実行など 幅広く対象としている https://docs.microsoft.com/en-us/quantum/quantum-techniques-1- qsharp_filestructure?view=qsharp-preview
  7. 7. Q#開発の準備 Visual StudioかVisual Studio CodeがエディタとしてQ#をサポート エディタ支援が不要であれば、.NET Core CLI+好きなエディタでもOK 必要なもの ◦ .NET Core が動くOS ◦ 初期のQ#では新し目のCPUが必須だったが、今はOK ◦ Q#開発キット ◦ 開発キット自体は.NET Coreのクラスライブラリ形式でプロジェクトに追加されるので、 実際には.NET Coreプロジェクトのテンプレートをインストールする ◦ Visual Studio or Visual Studio Code (option) ◦ それぞれエディタの拡張機能が提供されれている https://docs.microsoft.com/en-us/quantum/quantum- installconfig?view=qsharp-preview&tabs=tabid-vs2017
  8. 8. Quantum Development Kitの バージョンアップ プロジェクトテンプレートのアップデート Visual Studio / Visual Studio Code 拡張機能の更新 ◦ それぞれのツールの拡張機能のメニューから更新 既存プロジェクトの更新 ◦ Migration の手順に従う ◦ https://docs.microsoft.com/en-us/quantum/relnotes/0.3-migration?view=qsharp-preview#Migration ◦ PowerShell スクリプトが提供されているのでそれを実行してもよい ◦ https://docs.microsoft.com/en-us/quantum/relnotes/0.3-migration?view=qsharp-preview#MigrationScript dotnet new -i "Microsoft.Quantum.ProjectTemplates::0.3.1810.2508-preview"
  9. 9. はじめてのQ#プロジェクト https://docs.microsoft.com/en-us/quantum/quantum- writeaquantumprogram?view=qsharp-preview&tabs=tabid-vs2017 $ dotnet new console ¥ -lang Q# --output Bell Visual Studioの場合は Q#プロジェクトテンプレートを選択 Visual Studio Codeやそのほかのエディタでは .NET Core CLIのコマンドで作成
  10. 10. Q#プロジェクトの構造 すべてのファイルを表示 Q#ソースファイル (qs) エントリポイント(Mainメソッド)を持つ C#ソースファイル Q#コンパイルコマンド結果 Q#ソースをC#にコンパイルした 中間ファイル(g.cs) Q#コンパイルコマンド詳細
  11. 11. Q#ソースのコンパイル qsファイル g.csファイル dll Q#開発キットでインストールされるバイナリを利用して dotnet qsc.dll … でコンパイル 通常のC#プロジェクトとしてコンパイル 0.3よりコード変更のたびにQ#のビルドが 行われるので、リアルタイムで反映される
  12. 12. Q#プロジェクト Internal 作成されたプロジェクトは普通のC#プロジェクトにQ#SDKが参照されているもの ◦ .NET Core 2.0 (netcoreapp2.0) Q#のソースはC#(g.cs)にいったんコンパイルされる ◦ WPFとかSilverlightのXAMLやASP.NETのcshtmlと同じイメージ ◦ ただし、プロジェクトのビルド時にしかビルドされない (コード編集中に自動ビルドされない) ◦ NuGetで配られる microsoft.quantum.development.kit の中にビルド定義があり、 プロジェクトのビルド時にトリガーされる == .NET Core標準の仕組みを利用 0.3よりQ#のコード支援機能が提供されるようになった というのを頭に入れておくと、Q#コード書くときに(C#との感覚の違いがわかって)便利かも
  13. 13. Q#の文法 - ファイル構造 以下、記載のコードはQ# documentから引用 および一部改変 https://docs.microsoft.com/en-us/quantum
  14. 14. Q#の文法 - ファイル構造 名前空間の定義 他の名前空間の参照 (C#のimport) Operationの定義 Operationの引数 Operationの返り値の型
  15. 15. OperationとFunction Operation: 量子操作。副作用を伴う。 Function: 量子操作を行わない数値計算 voidに相当 組み込み済みの型については後で Operation内部のbodyは書かなくて よくなりました (0.3からの変更)
  16. 16. 3種類の制御構文 ◦ if…elif…else 文 ◦ elseじゃなくてelif ◦ forループ ◦ C#のforeachに相当 ◦ ループの変数を事前に定義する必要なし ◦ repeat-untilループ ◦ 今回は省略 ◦ Do-while文で、条件判定に複数の文が 記述できるイメージ ◦ 「当たるまで引けば当たる」
  17. 17. repeat-until (RUS)
  18. 18. First-Class Valueとしての OperationとFunction OperationやFunctionそのものを引数や返り値にできる ◦ 関数ポインタあるいはAction<T>, Function<T>なイメージ ◦ 見た目はラムダ式っぽい
  19. 19. OperationやFunctionの部分適用 引数に _ を指定することで、部分適用された関数を定義でき、関数の返り値にもできる
  20. 20. ローカル変数(letとmutable) letもしくはmutableで定義。letは変更不可、mutableは可能な変数に使う。
  21. 21. ローカル変数(letとmutable) letもしくはmutableで定義。letは変更不可、mutableは可能な変数に使う。 C#のvarと同じく 右辺の型推論で 変数の型が決まる 配列をmutableで宣言すると要素もmutable For文のindexは変数宣言不要 +=は使えない
  22. 22. ローカル変数(タプル) 任意のタプルに名前を付けて新しい型として定義できる
  23. 23. 型モデル Primitive ◦ Int 2, -107, 49 (64bit) ◦ Double 0.0, -43.2, 5e-7 ◦ Bool true, false ◦ Pauli PauliI, PauliX, PauliY, PauliZ ◦ Result Zero, One (測定結果を表現) ◦ Range 1..10, 5..-2..1 (start..step..end なので 5,3,1) ◦ String “qsharp” (ログメッセージに利用) ◦ Qubit Tuple (Int, (Qubit, Qubit)) 配列 [1; 4], new Int[13] Operation & Function型 ユーザー定義型 newtype Complex = (Double, Double); C#でいう暗黙的な型変換はない。 Microsoft.Quantum.Extensions.Convert 以下 のFunctionを使って明示的に変換しないといけない
  24. 24. Qubitの割り当て usingブロックを利用 (C#のusingと同じイメージ)
  25. 25. Qubitの割り当て usingブロックを利用 (C#のusingと同じイメージ) 5個のQubitを |0> で初期化 ➔ |00000> この変数も事前の定義不要 usingを抜ける際にQubitは リセットされないといけない。 測定もしくはリセットする
  26. 26. Qubitの操作 bool配列と初期化されたQubit配列を受け 取って、i番目の要素がtrueであればQubit を|1>に変化させるOperation
  27. 27. Qubitの測定
  28. 28. Qubitの測定
  29. 29. ログとデバッグ
  30. 30. ログとデバッグ メッセージを出力 デフォルトではコンソールに出力 生成された全量子ビットの状態を出力。 引数にファイル名指定。 空文字指定でコンソールに出力 処理の失敗 例外スローに似ている string interpolationもOK $”start {i}”
  31. 31. C#側のコード 現状シミュレーターのみが利用可能。 Q#のOperationがクラスとして参照できるので、Runで実行しTask<T>を取得する
  32. 32. Q#の主なOperation 主な量子ゲート操作のQ#での書き方 https://en.wikipedia.org/wiki/Quantum_logic_gate
  33. 33. Hadamardゲート q https://docs.microsoft.com/ja-jp/qsharp/api/prelude/microsoft.quantum.primitive.h?view=qsharp-preview
  34. 34. PauliX,Y,Zゲート q 回路記号はPauliXゲート。 NOTに相当 https://docs.microsoft.com/ja-jp/qsharp/api/prelude/microsoft.quantum.primitive.x?view=qsharp-preview
  35. 35. Phase Shiftゲート R1 Operationを使えばよい。 特に、π/4のときのTゲートと、 π/2のときのSゲートは用意されている。 Q#にはPauliX,Y,Z,I軸いずれかの指定した軸まわりに 指定した角度だけ回転できるR Operationがあり、 R1 OperationはR Operation2つで書き換えられる。 https://docs.microsoft.com/en-us/qsharp/api/prelude/microsoft.quantum.primitive.r1?view=qsharp-preview https://docs.microsoft.com/en-us/qsharp/api/prelude/microsoft.quantum.primitive.r?view=qsharp-preview https://docs.microsoft.com/en-us/qsharp/api/prelude/microsoft.quantum.primitive.t?view=qsharp-preview https://docs.microsoft.com/en-us/qsharp/api/prelude/microsoft.quantum.primitive.s?view=qsharp-preview
  36. 36. SWAPゲート https://docs.microsoft.com/ja-jp/qsharp/api/prelude/microsoft.quantum.primitive.swap?view=qsharp-preview q1 q2
  37. 37. Controlledゲート control target CNOTと隣のControlled Xは同じ CNOTについては専用のOperationがあり、 Controlledをつけると任意のcontrolledなOperationが 第一引数のQubit[]を制御Qubitとして呼び出せる https://docs.microsoft.com/ja-jp/quantum/quantum-qr-typemodel?view=qsharp-preview#functors
  38. 38. Toffoli (CCNOT)ゲート control1 target control2 https://docs.microsoft.com/ja-jp/qsharp/api/prelude/microsoft.quantum.primitive.ccnot?view=qsharp-preview Controlledの制御ビットは複数指定できるので、 CCNOTはControlled Xを使っても記述できる
  39. 39. もっとQ#
  40. 40. Quantum Katas ハンズオンに使われたチュートリアル集 ◦ https://github.com/Microsoft/QuantumKatas Step by Step ですぐに自分の答えがあっているか確認できる 答えもついている。
  41. 41. 参考リンク Microsoft Quantum ◦ 公式ページ: https://cloudblogs.microsoft.com/quantum/ ◦ Quantum Development Kit: https://www.microsoft.com/en-us/quantum/development- kit ◦ 開発用ドキュメント: https://docs.microsoft.com/en-us/quantum/?view=qsharp-preview Q# Coding Contest ◦ 告知ブログ http://codeforces.com/blog/entry/60209 ◦ Warmup round http://codeforces.com/contest/1001 ◦ 解説 https://assets.codeforces.com/rounds/997-998/warmup-editorial.pdf ◦ 本戦 http://codeforces.com/contest/1002 ◦ 解説 https://assets.codeforces.com/rounds/997-998/main-contest-editorial.pdf ◦ Introduction to Quantum Oracle http://codeforces.com/blog/entry/60319
  42. 42. 参考リンク Q#の設計を学術的に知りたい人向け ◦ Q#: Enabling scalable quantum computing and development with a high-level domain- specific language https://www.microsoft.com/en-us/research/publication/q-enabling-scalable-quantum- computing-and-development-with-a-high-level-domain-specific-language/ ◦ Programming Quantum Computers Using Design Automation https://www.microsoft.com/en-us/research/publication/programming-quantum- computers-using-design-automation/ MRFの学術的背景を知りたい人向け ◦ https://www.nature.com/articles/nature11971 ◦ http://case.edu/mrf/ ◦ Magnetic resonance fingerprintingとその最新動向 : http://www.innervision.co.jp/sp/ad/suite/siemens/technical_notes/1511techinfo ◦ 最新の高速撮像技術─fingerprinting─: http://www.innervision.co.jp/ad/suite/siemens/technical_notes/160976

×