KVANTNA RAČUNALA - Microsoft QDK

U prethodnom smo članku napravili uvod u arhitekturu, mogućnosti i način korištenja kvantnim računalima. Budući da su takva računala trenutačno vrlo skupa, praktično su nedostupna za učenje programiranja. Ima li kakvog rješenja? Srećom, odgovor je potvrdan. Jedan od najjednostavnijih načina za upoznavanje s programiranjem kvantnih računala pripremio je Microsoft pod nazivom Microsoft Quantum Development Kit (QDK).

 

U prvom tekstu o QDK-u pozabavit ćemo se, prije svega, njegovom instalacijom na Windows računalo, kako bi računalo postalo spremno za rad na pravim „kvantnim primjerima programa“.

 

Preduvjeti za korištenje i instalacija

QDK se na računalo može instalirati na različite načine, što ovisi i o programskim jezicima kojim se želite koristiti kao pomoć kod razvoja programa - C#, F# ili Python. Za samo pisanje kvantno orijentiranih programa koristi se posebnim programskim jezikom pod nazivom Q#, dok se drugim programskim jezikom, u Microsoftovom slučaju, koristi kao svojevrsnom „podrškom“. O samom Q# jeziku bit će više riječi nešto kasnije.

 

Za pripremu primjera u okviru ovog serijala izabrana je kombinacija programskih jezika C# i Q#, a takvom razvojnom kombinacijom najjednostavnije je koristiti se u jednom od sljedeća dva, također Microsoftova, alata: Visual Studio Code ili Visual Studio 2019. Ako ste ozbiljniji programer u Microsoftovim alatima, onda na računalu već gotovo sigurno imate instaliran Visual Studio (bar besplatno Community izdanje), tako da možete u njemu izravno isprobati sve primjere. Za potpune početnike vjerojatno je jednostavniji pristup instalacija alternativnog alata Visual Studio Code (u nastavku teksta VSC). Riječ je o razvojnoj okolini za pisanje programa u različitim programskim jezicima na operativnim sustavima Windows, macOS ili Linux.

 

VSC se može slobodno preuzeti s ove web-adrese i instalirati kao bilo koja druga Windows aplikacija, tako da to nećemo posebno objašnjavati. Problem je što takva podrazumijevana instalacija paketa ne sadrži podršku za pisanje Q# programa, pa to treba dodatno instalirati.

 

Pokrenite VSC i pomoću gumba za pregled dostupnih proširenja (sljedeća slika) instalirajte podršku za razvoj kvantnih programa. Na sličan način provjerite je li instalirana podrška za C#. Ako nije, napravite i njezinu instalaciju.

 

Instalacija proširenja Microsoft Quantum Development Kit u VSC

Slika 1. Instalacija proširenja Microsoft Quantum Development Kit u VSC

 

Kao sljedeći korak u postupku pripreme razvojnog okruženja potrebno je u VSC instalirati  neophodne predloške za pisanje Q# programa. Za to možete upotrijebiti naredbu View > Command Palette. Nakon otvaranja odgovarajućeg dijaloškog okvira za pretraživanje naredbi, potrebno je upisati: Q#: Install project templates. Ili bar početne znakove dok VSC ne prepozna što točno želite.

 

Sad na računalu imate sve što je potrebno za pisanje Q# programa. Preostaje još samo da napravite provjeru je li zaista sve u redu.

 

Preuzimanje predložaka potrebnih za pisanje Q# programa

Slika 2. Preuzimanje predložaka potrebnih za pisanje Q# programa

 

Ponovo u dijaloškom okviru Command Palette upišite odgovarajuću naredbu za stvaranje novog Q# projekta, a to je Q#: Create new project. U sljedećem koraku kao vrstu aplikacije izaberite Standalone Console Application. Preostaje još samo da izaberete mapu na disku za spremanje Q# projekta, te upišete točan naziv projekta. Na primjer, možete upisati TestProjekt, jer nam je trenutačno samo cilj provjeriti je li računalo u potpunosti spremno za „kvantno programiranje“.

 

Kad VSC odradi svoj dio posla, projekt možete otvoriti. Kao rezultat pripreme projekta nastale su dvije datoteke:

 

TestProjekt.csproj

Pomoćna datoteka zadužena za definiranje okruženja u kojem će se izvoditi projekt.

 

<Project Sdk="Microsoft.Quantum.Sdk/0.11.2006.403">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>netcoreapp3.1</TargetFramework>
  </PropertyGroup>

</Project>

 

Program.qs

Glavna datoteka Q# programa. Za sada ne sadrži ništa spektakularno kvantno orijentirano, jer samo provjeravamo ispravnost cjelokupne instalacije.

 

namespace TestProjekt {

    open Microsoft.Quantum.Canon;
    open Microsoft.Quantum.Intrinsic;   

 

    @EntryPoint()
    operation HelloQ() : Unit {
        Message("Hello quantum world!");
    }
}

 

U slučaju da VSC nakon pripreme projekta javi da je za normalan rad potrebno preuzeti još nekakve biblioteke na računalo, jednostavno potvrdite takvo preuzimanje i pričekajte da se dovrši.

 

Sad doista možemo pokrenuti prvi „kvantni program“ na vlastitom Windows računalu. Najjednostavniji način za to je odabir naredbe Terminal > New Terminal. Preostaje još da u dijaloškom prozoru Terminal upišete naredbu za izvođenje programa, a to je:

 

dotnet run

 

Kod prvog pokušaja izvođenja naredbe postupak može potrajati neko vrijeme dok se preuzmu svi potrebni moduli za izvođenje. Svako naknadno pokretanje programa trajat će bitno kraće.

 

Kao rezultat izvođenja prvog kvantnog programa pojavit će se pozdravna poruka. Ništa spektakularno, ali dokaz da je na računalu sve spremno za pravo kvantno programiranje,  čime ćemo se pozabaviti u sljedećem nastavku.

 

Izvođenje prvog kvantnog programa na vlastitom računalu

Slika 3. Izvođenje prvog kvantnog programa na vlastitom računalu

 

 

Nekoliko riječi o programskom jeziku Q#

Što je zapravo programski jezik Q#? Već sam naziv pokazuje kako bi jezik trebao imati sličnosti s drugim Microsoftovim „#“ jezicima u pogledu osnovnih kontrolnih struktura i tipova podataka. Međutim, Q# podržava i posebne kvantno orijentirane strukture podataka i prateće operacije.

 

U nastavku je naveden primjer takvih posebnih struktura i operacija za rad s qubitima:

 

operation PrepareBitString(bitstring : Bool[], register : Qubit[]) : Unit
is
Adj + Ctl {
    let nQubits = Length(register);
    for (idxQubit in 0..nQubits - 1) {
        if (bitstring[idxQubit]) {
            X(register[idxQubit]);
        }
    }
}

operation RunExample() : Unit {
    using (register = Qubit[8]) {
        PrepareBitString(
            [
true, true, false, false, true, false, false, true],
            register
        );

        // At this point, register now has the state |11001001.
        // Resetting the qubits will allow us to deallocate them properly.
        ResetAll(register);
    }

}

 

Na kraju, vrlo važna stvar u vezi s korištenjem qubita u Q# jeziku, odnosno simulatoru. Ako se sjećate rasprave o kvantnom programiranju iz prvog nastavka serijala, onda je jasno da pomoću QDK-a zapravo izvodimo simulacije znatno jačeg (bržeg) kvantnog računala na klasičnom (sporijem) digitalnom računalu. Zbog toga pokušaj simulacije velikog broja qubita dovodi do sve većeg „mučenja“ simulatora da izvede kvantni program. Jer da nije tako, onda nam kvantna računala uopće ne bi ni trebala.

 

Za ozbiljnije rješavanje problema, ako se već ne može pristupiti nekom pravom D-Wave računalu ili nekom drugom sličnom hardveru, treba se koristiti nekim od simulatora u mnogo snažnijem cloud-okruženju nego što je to pojedinačno Windows računalo.

Kategorija
Članci iz ove serije: