量子コンピュータ
量子ゲート
Q#

先日、Microsoftが開発している量子プログラミング言語Q#がMac, Linuxに対応したとアナウンスされました

Q#がずっと気になっていた私はすぐに飛びついて、インストールと動作確認までやってみたので手順をまとめます

Q#そのものについての解説は、@__pandaman64__さんの記事をみてもらえればと思います


環境


  • Mac High Sierra 10.13.3

  • Visual Studio Code 1.20.1

VSCodeで使えるのは結構うれしい


必要なもの

macOS(Linuxでは検証してませんが、おそらく同様の手順で動くはず)


Q#開発環境をインストールする


  • デベロッパーキットのインストール

Microsoft Quantum Development Kit for Visual Studio Codeをインストールします(VSCodeで拡張機能を検索しても出てきます)


  • プロジェクトテンプレートのインストール

Q# Development Kit project templatesをインストールします

Bashなどのコマンドライン上で

$ dotnet new -i "Microsoft.Quantum.ProjectTemplates::0.2-*"


正常にインストールできてるか検証


  • サンプルをclone

お好みのディレクトリで

$ git clone https://github.com/Microsoft/Quantum.git

$ cd Quantum
$ code .


  • サンプルを実行

量子テレポーテーションのサンプルを動かしてみます

$ cd Samples/Teleportation/

$ dotnet run

以下のような出力がされたらQ#で開発するための環境が整っています

Round 0:        Sent True,      got True.

Teleportation successful!!
Round 1: Sent False, got False.
Teleportation successful!!
...
Round 6: Sent True, got True.
Teleportation successful!!
Round 7: Sent False, got False.
Teleportation successful!!

データベース検索らしきサンプルも動かしてみました

$ cd ../DatabaseSearch/

$ dotnet run

古典的なアルゴリズムと量子アルゴリズムを比較しているのかな?

Classical random search for marked element in database.

Database size: 8.
Success probability: 0.125

Attempt 99. Success: Zero, Probability: 0.22 Found database index One, One, Zero
Attempt 199. Success: Zero, Probability: 0.175 Found database index One, Zero, One
Attempt 299. Success: Zero, Probability: 0.183 Found database index Zero, One, One
Attempt 399. Success: Zero, Probability: 0.162 Found database index Zero, One, One
Attempt 499. Success: Zero, Probability: 0.152 Found database index Zero, One, Zero
Attempt 599. Success: One, Probability: 0.15 Found database index One, One, One
Attempt 699. Success: Zero, Probability: 0.146 Found database index Zero, One, Zero
Attempt 799. Success: Zero, Probability: 0.138 Found database index Zero, One, One
Attempt 899. Success: Zero, Probability: 0.132 Found database index Zero, One, Zero
Attempt 999. Success: Zero, Probability: 0.132 Found database index Zero, Zero, Zero

Press any key to continue...

Quantum search for marked element in database.
Database size: 64.
Classical success probability: 0.015625
Queries per search: 7
Quantum success probability: 0.591380150057375

Attempt 9. Success: One, Probability: 0.6 Speedup: 5.486 Found database index One, One, One, One, One, One
Attempt 19. Success: Zero, Probability: 0.6 Speedup: 5.486 Found database index One, One, Zero, Zero, One, One
Attempt 29. Success: Zero, Probability: 0.567 Speedup: 5.184 Found database index One, Zero, Zero, One, One, Zero
Attempt 39. Success: One, Probability: 0.625 Speedup: 5.714 Found database index One, One, One, One, One, One
Attempt 49. Success: One, Probability: 0.66 Speedup: 6.034 Found database index One, One, One, One, One, One
Attempt 59. Success: One, Probability: 0.633 Speedup: 5.787 Found database index One, One, One, One, One, One
Attempt 69. Success: One, Probability: 0.643 Speedup: 5.879 Found database index One, One, One, One, One, One
Attempt 79. Success: Zero, Probability: 0.662 Speedup: 6.053 Found database index Zero, Zero, Zero, Zero, One, Zero
Attempt 89. Success: Zero, Probability: 0.656 Speedup: 5.998 Found database index Zero, One, One, One, One, One
Attempt 99. Success: Zero, Probability: 0.63 Speedup: 5.76 Found database index One, Zero, One, One, One, One

Press any key to continue...

Quantum search for marked element in database.
Database size: 256.
Marked elements: 0,39,101,234 Classical success probability: 0.015625
Queries per search: 7
Quantum success probability: 0.591380150057375

Attempt 0. Success: One, Probability: 1 Speedup: 9.143 Found database index 0
Attempt 1. Success: Zero, Probability: 0.5 Speedup: 4.571 Found database index 68
Attempt 2. Success: One, Probability: 0.667 Speedup: 6.098 Found database index 101
Attempt 3. Success: One, Probability: 0.75 Speedup: 6.857 Found database index 101
Attempt 4. Success: Zero, Probability: 0.6 Speedup: 5.486 Found database index 165
Attempt 5. Success: Zero, Probability: 0.5 Speedup: 4.571 Found database index 33
Attempt 6. Success: One, Probability: 0.571 Speedup: 5.221 Found database index 234
Attempt 7. Success: Zero, Probability: 0.5 Speedup: 4.571 Found database index 118
Attempt 8. Success: Zero, Probability: 0.444 Speedup: 4.059 Found database index 80
Attempt 9. Success: One, Probability: 0.5 Speedup: 4.571 Found database index 101

Press any key to continue...


おわりに

すごく簡単に開発環境を構築できました

サンプルが沢山用意されていたので、まずはその辺を色々動かしてみようかと思います

公式のドキュメントがかなり充実しているので、一通り読んでみるといいかもです