Zanim przejdziemy bezpośrednio do pisania kodu i zaczniemy tworzyć nasze pierwsze programy kwantowe konieczne jest przygotowanie środowiska. Q# można uruchomić w Visual Studio, Visual Studio Code czy też przy wykorzystaniu pythona i Jupyter Notebooks. W niniejszym instruktażu praca będzie wykonywana przy użyciu Visual Studio 2022.
Konfiguracja samego środowiska nie jest szczególnie ciężka. Bowiem jak mamy zainstalowany program Visual Studio 2022 potrzebujemy jedynie zainstalować Microsoft Quantum Development Kit dostępny pod:
https://marketplace.visualstudio.com/items?itemName=quantum.DevKit64
Pozwoli on nam tworzyć projekty z wykorzystaniem języka Q#, rozpoznawać składnie Q#, korzystać z symulatorów kwantowych i bibliotek.
Komputery kwantowe w istocie działają bardziej jak koprocesory i do ich pracy niezbędne jest wykorzystanie komputerów klasycznych które wysyłają żądania ze wstępnymi parametrami i oczekują na rezultaty. Dlatego na początek stwórzmy projekt konsolowy (Console Apllication) o nazwie Host a w nim statyczną klasę Program.
using Microsoft.Quantum.Simulation.Simulators;
using Quantum.QuantumDreamLibrary;
using System;
namespace QuantumDream
{
static class Program
{
static void Main(string[] args)
{
using (var sim = new QuantumSimulator())
{
for (int i = 0; i < 100; i++)
{
var result = GetRandomResult.Run(sim).Result;
Console.WriteLine(result);
}
Console.WriteLine("Press any key to continue");
Console.ReadKey();
}
}
}
}
Jest to standardowy kod C# i pod względem składni nie ma tu nic nadzwyczajnego. Warto jednak zwrócić uwagę na importy ze świata kwantowego oraz linie:
using (var sim = new QuantumSimulator())
Jako że korzystamy z klasycznego komputera bez dostępu do prawdziwych funkcjonalności komputera kwantowego musimy wspomagać się symulatorem podobnie jak dzieję się to w innych branżach programowania np. programowania mobilnego. Istnieje kilka rodzajów symulatorów niemniej wykorzystywany tutaj symulator jestsymulator pełnostanowy który w pełni symuluje kwantową maszynę na lokalnym komputerze. Warto jednak pamiętać ze symulator taki ma ograniczenia do około 30 kubitów.
Kolejna ważna linia to:
var result = GetRandomResult.Run(sim).Result;
Jest to nasze odwołanie do operacji kwantowej. W tym wypadku będzie to po prostu losowanie liczby (0 lub 1). Do Metody Run przekazujemy stworzony stworzony symulator oraz ewentualne parametry (w tym wypadku nie ma żadnych). Po czym oczekujemy na rezultat (Result – obiekt z biblioteki kwantowej o możliwych wynikach Zero i One)
Następnie tworzymy to co zapewne wielu użytkowników interesuję najbardziej czyli projekt kwantowy przy użyciu Q#. Dodajemy do naszej solucji projekt typu Q# Library.
namespace Quantum.QuantumDreamLibrary {
open Microsoft.Quantum.Canon;
open Microsoft.Quantum.Intrinsic;
@EntryPoint() //Tworzy entry point dla operacji
operation GetRandomResult() : Result { //Operacja zwracająca Result (Zero lub One)
use q = Qubit(); //przydzielanie kubita, jego stan jest |0>
H(q); //użycie bramki Hadamara, wprowadza kubita w superpozycje gdzie szanse na otrzymanie |0> i |1> równe są 50%
return M(q); //Dokonanie pomiaru i zwrócenie wartości
}
}
Aby wszystko działało niezbędne jest pobranie bibliotek kwantowych oraz dodanie referencji między projektem host i biblioteką.
Uruchomienie projektów powinno nam dać losowe wyniki pomiaru kubita.
Cały projekt dostępny jest do ściągnięcia tutaj