Programowanie kwantowe krótkie wprowadzenie

Komputery kwantowe jak i cała dziedzina mechaniki kwantowej to obecnie silnie badana gałąź wiedzy z którą wiążą się duże nadzieje. Kryptografia, komunikacja, prace naukowe i badawcze, branże biologiczne czy chemiczne to tylko niektóre dziedziny które mogłyby zrewolucjonizować komputery tego typu.

 

I choć obecnie praktyczne zastosowanie komputerów kwantowych jest znikome powstaję coraz więcej startupów eksplorujących możliwości tych urządzeń. Natomiast firmy prywatne takie jak Google, IBM, Intel czy też uniwersytety i rządy takie jak Chiny osiągają coraz więcej sukcesów w tej dziedzinie. Do tego wybrane firmy jak np. Microsoft, w swojej platformie Azure, udostępnia użytkownikom usługę umożliwiając uruchamianie własnego kodu źródłowego na rzeczywistym komputerze kwantowym. Dlatego dla niektórych może być to być dobry czas aby zacząć poznawać programowanie kwantowe.

 

Czym jednak w zasadzie jest komputer kwantowy? Komputery kwantowe to urządzenia wykorzystujące zjawiska występujące w mechanice kwantowej i pracują na najmniejszych elementach naszej rzeczywistości – kwantach, najczęściej są to elektrony lub fotony. Prace te możliwe są poprzez dokonywanie odpowiednich zmian na kwantach przy wykorzystaniu precyzyjnych laserów lub wiązek mikrofalowych w specjalnie stworzonym środowisku (nierzadko temperatura w komputerach takich może być utrzymywana bliska zero absolutnemu). Tak naprawdę komputer kwantowy w istocie bardziej działają jak koprocesor który zarządzany jest przez klasyczny komputer. Klasyczny komputer wysyła polecenia do komputera kwantowego aby rozpocząć obliczeń odpowiednich dla zadań kwantowych i oczekuję na rezultat. Komputery kwantowe bowiem nie są w stanie być zawsze szybsze od komputerów klasycznych a ich zastosowanie ma sens jedynie w wybranych problemach algorytmicznych.

 

Bity i Kubity

Podstawową jednostką informacji w każdym klasycznym komputerze jest jeden bit który może przyjmować wartość zera lub jedynki. Wartości te fizycznie reprezentowane są przez tranzystory do których przesyłane jest napięcie elektryczne. Zero występuję gdy na tranzystorze nie ma napięcia oraz jeden gdy na tranzystorze jest napięcie. Odpowiednio łącząc tranzystory i napięcie możemy wykonywać wszystkie operacje znane dzisiejszym komputerom.

 

Komputery kwantowe operują na analogicznych wartościach zwanych kubitami. Kubit fizycznie w komputerach tych reprezentowany jest przez pojedynczy elektron lub foton na który możliwe jest wpływanie na jego stan poprzez wykorzystywania precyzyjnych laserów lub wiązek mikrofalowych. Kubit podobnie jak w komputerach klasycznych przyjmować wartość zera oraz jedynki. Niemniej kubity dzięki zjawiska superpozycji mogą przyjmować dowolną proporcję wartości 0 i 1 wyrażana w prawdopodobieństwie wystąpienia wartości 0 lub 1 w czasie pomiaru. Superpozycja pozwala kubitowi na bycie w kilku stanach w tym samym czasie do momentu dokonania pomiaru. Dopiero dokonanie pomiaru powoduje rozpad kwantu i ‘zmusza’ go do określenia swojej wartości w czasie pomiaru.

 

 

To właśnie zjawisko superpozycji pozwala na znaczne przyspieszenie obliczeń przy wykorzystaniu komputerów kwantowych. Bowiem już odpowiednio przygotowany algorytm z kilku kubitów pozwala na ‘jednoczesne’ dokonanie obliczeń. Które nawet najpotężniejszemu komputerowi klasycznemu zabrałyby nawet kilkaset jeśli nie więcej lat. Możliwości zaś te rosną wykładniczo z każdym kubitem informacji.

 

W bardzo dużym uproszczeniu przy czterech bitach informacji w klasycznym komputerze musielibyśmy sprawdzić po kolei 16 możliwości aby sprawdzić każdą możliwą ścieżkę. W przypadku 4 kubitów wartości te znajdują się w superpozycji i odpowiednio przygotowany układ mógłby je sprawdzić za jednym razem.

 

Graficzna reprezentacja kubitów

Do reprezentacji stanu pojedynczego kubita często wykorzystuję się sferę Blocha lub notacje kołową.

 

W przypadku sfery Blocha wykorzystywana jest sfera gdzie dla punktu na biegunie północnym znajduje się wartość zero. Na biegunie południowym zaś dla punktu znajduję się wartość jeden. Reprezentują one wartości kiedy prawdopodobieństwo wystąpienia danej wartości jest równe 100%. Pozostała punkty na powierzchni sfery reprezentują prawdopodobieństwo wystąpienia wartości 1 lub 0. Im punkt na sferze znajduję się bliżej 0 tym większe jest prawdopodobieństwo wystąpienia tej wartości analogicznie im punkt jest bliżej 1 tym większe są szanse na wystąpienie tej wartości.

 

 

Jeśli sami chcemy zobaczyć jak zachowują się wartości na sferze Blocha użytecznymi narzędziami mogą się okazać:

 

https://bloch.kherb.io
https://www.st-andrews.ac.uk/physics/quvis/simulations_html5/sims/blochsphere/blochsphere.html

 

Inną często używaną notacją jest notacja kołowa. Dla jednego kubita jest ona reprezentowana przez koło. Stopień zapełnienia koła określa prawdopodobieństwo wystąpienia wartości 0 lub 1. Na notacji też możemy również dotrzeć relatywną fazę (oś Z na sferze Blocha) przyjmującą wartość od 0 do 360 stopni w postaci kreski wychodzącej z centrum do obrębu koła.

 

 

Bramki Kwantowe

 

Podobnie jak w komputerach klasycznych gdzie korzysta się z bramek logicznych które przyjmują sygnały na wejściu i zwracają wartości w postaci zer i jedynek. Tak samo komputery kwantowe korzystają z bramek logicznych w celu dokonania obliczeń. Bramki te działają jednak na kubitach których wartości nie są deterministyczne i opierają się na prawdopodobieństwie. W celu manipulacji prawdopodobieństwa kubitów (spinu dla elektronów lub polaryzacji dla fotonów) wykorzystywane są precyzyjnych lasery lub wiązek mikrofalowe. Bramki kwantowe są podstawowymi narzędziami umożliwiającymi manipulowanie kwantami. Bramki kwantowe muszą współpracować z fizycznymi zdarzeniami kwantowymi dlatego znajdziemy tu wiele operacji nie występujących w klasycznych komputerach.

 

Do najistotniejszych bramek kwantowych zaliczamy:

 

M – Measurement – Akt pomiaru, powoduję natychmiastowe określenie wartości kubitu oraz utratę dotychczasowych danych związanych z tym kubitem (faza, prawdopodobieństwo).

 

 

Hadamard Gate – Jedna z podstawowych bramek w programowaniu kwantowym. Kubity które przechodzą przez tą bramkę są umieszczane w superpozycji gdzie szanse na to ze wartość po zapadnięciu i zmierzeniu będą równe 50% dla |0> i 50% dla |1>. W istocie bramka ta dokonuję obrotu według osi Y o 90 stopniu na sferze Blocha a następnie dokonuję jeszcze obrotu o 180 stopni według osi X.

 

 

Pauli X Gate (NOT)– Negacja jest analogiczna do znanej bramki NOT w klasycznych komputerach. Bramka ta zmienia wartość kubita z |0> do wartości |1> oraz z wartości |1> do wartości |0>. Na sferze Blocha bramka ta dokonuję obrotu o 180 stopni względem osi X.

 

 

Pauli Gate Y – Bramka ta dokonuję obrotu na sferze Blocha o 180 stopniu względem osi Y

 

 

Pauli Gate Z – Bramka ta dokonuję obrotu na sferze Blocha o 180 stopniu względem osi Z

 

 

Rx, Ry, Rz Bramki umożliwiające o dokonanie obrotu na sferze Blocha o podaną ilość stopniu według osi X, Y lub Z

 

CNOT – Control NOT – Jest to bramka działająca na dwóch kubitach i najłatwiej ją porównać do warunku if w klasycznych komputerach. Bramka ta wskazuję kubit kontrolujący oraz kubit warunkowy. Jeśli na pierwszym kubicie wartość będzie równa 1 wtedy na drugim kubicie zostanie wykorzystana bramka NOT negująca wartość kubitu.

 

 

SWAP – Bramka operująca na dwóch kubitach za pomocą której, tak jak nazwa wskazuję, możliwe jest zamienienie wartości między kubitami.

 

 

CCNOT Tofoli – Bramka operująca na trzech kubitach. Podobna w swoim działaniu jest do bramki CNOT niemniej konieczne jest otrzymanie wartości jeden z kubita pierwszego oraz drugiego jeśli te warunki są spełnione wartość na kubicie trzecim jest negowana.

 

 

Istnieją również inne bramki lecz te są jednymi z podstawowych.

 

Układy kwantowe

 

Tak samo jak w komputerach klasycznych tak samo w komputerach kwantowych bramki logiczne możemy łączyć w celu uzyskania specjalistycznych układów kwantowych wykonujących zadania postawione przez autora.

 

Przykładowy zapis graficzny takiego układu kwantowego może wyglądać następująco:

 

 

Gdzie każdy rząd reprezentuję pojedynczego kubita wszystkie zaś qubity zgrupowane są w pojedynczy rejestr. Od lewej zaś do prawej możemy dostrzec jakie pojedyncze operację są wykonywane na poszczególnych kubitach.

 

Istnieje kilka ciekawych narzędzi umożliwiających projektowanie układów kwantowych oraz symulowanie ich zachowań krok po kroku. Na pewno warto się z nimi zaznajomić w celu lepszego zrozumienia tematu:

 

https://quantum-computing.ibm.com/composer/
https://algassert.com/quirk
https://wybiral.github.io/quantum/

Dodaj komentarz

WordPress Video Lightbox Plugin