Simuler des programmes quantiques en Q#
Contexte
Les grands aspects du langage Q# étant abordés, nous pouvons à présent nous consacrer à l’écriture de programmes quantiques, puis essayer de les simuler. C’est tout l’objet du présent chapitre.
Exemple appliqué : les états de Bell
1. Contexte
À ce stade, un environnement de type Microsoft Quantum Development Kit est accessible sur votre machine, que ce soit avec l’environnement de développement Microsoft Visual Studio ou avec Visual Studio Code. L’idée est donc à présent de commencer à réaliser des simulations quantiques et de commencer à coder en Q#. Dans la documentation officielle de Microsoft, le premier réel exemple de réalisation se propose de simuler les états quantiques de Bell qui correspondent peu ou prou aux états intriqués les plus simples à simuler. Avant d’expliquer pas à pas la création puis le codage du projet « états de Bell », revenons d’abord sur la nature de ces états quantiques en physique quantique.
2. Les états de Bell
Les états de Bell correspondent à des états quantiques de deux bits quantiques qui représentent les exemples maximaux d’intrication quantique. Ces états intriqués portent le nom de John Stewart Bell, auteur des inégalités de Bell, concept largement traité dans le présent ouvrage.
Les états de Bell correspondent donc à quatre états quantiques, relatifs à deux bits quantiques.
Si on définit nos deux bits quantiques en entrée du circuit quantique comme le bit quantique A (Alice) et B (Bob), alors les quatre états quantiques correspondent aux quatre équations suivantes ci-dessous :
Le circuit quantique nous permettant d’atteindre ces états intriqués utilise :
-
une porte d’Hadamard (H).
-
une porte CNOT.
Le schéma suivant propose le circuit quantique que nous allons tâcher d’implémenter ensuite.
Illustration 2 : schéma quantique de la production d’états de Bell
3. Création d’un projet quantique
Les explications suivantes ont pour but de créer un projet quantique vide.
Il doit avoir la structure suivante :
-
Un fichier de projet Bell.csproj.
-
Un fichier C# de pilotage du programme quantique Driver.cs.
-
Un fichier Q# de programme quantique Operation.qs.
a. Création d’un projet quantique avec Microsoft Visual Studio
Pour créer un nouveau projet avec Microsoft Visual Studio...
Plus loin dans le développement Q#
Toujours en s’inspirant librement des exemples fournis par Microsoft, nous poursuivons dans le développement Q# en nous intéressant successivement à :
-
La question de la mesure.
-
L’algorithme quantique de Deutsch-Jozsa.
1. Différentes situations de mesures en Q#
a. Contexte
Le propos de l’exemple traité dans cette partie est d’expliquer comment la mesure d’un ou de plusieurs bits quantiques sont effectuées en Q#.
L’exemple Measurement correspondant à cet exemple se trouve à l’adresse suivante : https://github.com/Microsoft/Quantum/tree/master/Samples/Measurement
b. Le projet quantique de mesure
On a la même configuration qu’habituellement : un fichier .csproj de projet C# qui réunit le pilote .cs codé en C# et le code quantique Q# correspondant à l’extension .qs, soit donc trois fichiers.
Sans surprise, le fichier .csproj est le suivant :
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp2.0</TargetFramework>
<PlatformTarget>x64</PlatformTarget>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Quantum.Development.Kit"
Version="0.3.1811.203-preview" />
<PackageReference Include="Microsoft.Quantum.Canon"
Version="0.3.1811.203-preview" />
</ItemGroup>
</Project>
c. Le pilote C#
Le fichier C# permet d’expliciter les données envoyées au calcul quantique et donc de préciser les attentes en termes de résultats. Trois grandes étapes sont écrites dans notre fichier de pilotage :
1. |
La mesure d’un bit quantique telle que nous l’avons déjà vu précédemment. |
2. |
La mesure d’un registre de bits quantiques en « une seule mesure ». |
3. |
La mesure d’un registre de bits quantiques dans une autre base, en l’occurrence dans la base dite de Bell (celles des états intriqués de Bell étudiés précédemment). |
Voici le code C# global...
Simulateur quantique : en local ou dans le cloud ?
1. Contexte
Le fonctionnement exponentiel de la simulation de bits quantiques la rend particulièrement gourmande en mémoire vive (RAM).
En effet, Microsoft précise à titre indicatif qu’il faut environ 16 Go (Gigaoctets) de mémoire vive pour simuler un registre de 30 bits quantiques.
16 Go de RAM correspond peu ou prou à une station de travail ou à un ordinateur performant, mais tout à fait accessible en 2018. Par ailleurs, une trentaine de bits quantiques permet d’écrire et de simuler des algorithmes quantiques ambitieux.
Le problème est plutôt sur le dimensionnement de la simulation :
Imaginons que l’on veuille passer à 31 bits quantiques soit seulement un bit quantique de plus que dans l’exemple précédent.
Alors il faudra exactement le double de mémoire vive (RAM) et donc 32 Go.
Évidemment, cela marche dans les deux sens :
Si l’on veut faire une simulation à 29 bits quantiques soit seulement un bit quantique de moins que dans le premier exemple.
Alors il faudra exactement moitié moins de RAM, c’est-à-dire 8 Go.
2. Simulateur distant avec Azure
On a donc la séquence suivante :
-
30 bits quantiques ↔ 16 Go
-
31 bits quantiques ↔ 32 Go
-
32 bits quantiques ↔ 64 Go
-
33 bits quantiques ↔...