Już możemy programować komputery kwantowe!
IBM udostępnia platformę programistyczną (framework), na której możemy ćwiczyć programowanie komputerów kwantowych.
Pięciokubitowy komputer kwantowy IBM, dostępny za darmo przez internet, umożliwia wykonywanie własnych aplikacji kwantowych.
IBM ma do dyspozycji użytkowników kilka urządzeń kwantowych i symulator:
- 5 kubitów – IBM Q 5 Tenerife,
- 14 kubitów – IBM Q 14 Melbourne,
- 16 kubitów – IBM Q 16 Rüschlikon,
- 20 kubitów – IBM Q 20 Tokyo – dostępny tylko dla klientów IBM.
- symulator 32 kubity – IBM Q QASM 32 Q Simulator.
Symulator ma tę zaletę, że nie robi błędów, jak to się zdarza rzeczywistym procesorom kwantowym, więc najlepiej nadaje się do nauki programowania. Ponadto dostęp do symulatora jest nielimitowany, zaś do prawdziwych komputerów kwantowych darmowy dostęp jest ograniczany do kilku eksperymentów.
IBM szacuje, że pięćdziesięciokubitowy komputer kwantowy będzie miał taką moc obliczeniową, jak dzisiejsze najszybsze komputery.
Komputery kwantowe mogą znaleźć zastosowanie do rozwiązywania niektórych problemów, zwłaszcza o dużej złożoności obliczeniowej. Przyczyną jest stocha styczność wyniku – nie jest on tak zdeterminowany, jak w komputerach cyfrowych. (Podobnie jest w sieciach neuronowych, które znalazły swoje specyficzne zastosowania.)
Komputer kwantowy
Komputer kwantowy, choć pracuje na cząstkach elementarnych, wcale nie jest mały. Mierzenie kwantów wymaga temperatury poniżej 1 Kelvina, potrzebna jest bardzo mocna zamrażarka.
Strona firmowa IBM na temat komputerów kwantowych: https://www.research.ibm.com/ibm-q/.
Programowanie
Programowanie komputerów kwantowych różni się bardzo od programowania komputerów cyfrowych przy pomocy języków, a przypomina układanie obwodów komputerów analogowych.
Urządzenia kwantowe IBM można wykorzystywać za pomocą:
- zestawu do tworzenia oprogramowania kwantowego „Qiskit” (https://qiskit.org/),
- wirtualnego interfejsu do kodowania komputera kwantowego „IBM Q Experience” z programem Composer.
Podręcznik programowania znajdziemy na stronie https://quantumexperience.ng.bluemix.net.
W programie Composer mamy pięciolinię (gdy pracujemy na komputerze pięciokubitowym), na której będziemy umieszczać elementy operujące na kwantach.
Interfejs programu Composer
Każda linia reprezentuje 1 kubit. Podobnie jak w przypadku nut, każdy kubit ma inną częstotliwość.
Po umieszczeniu na linii wybranego kubitu elementów działających na kwantach („bramek”) i uruchomieniu programu, na kubitach będą odbywać się kolejne operacje zdefiniowane bramkami, w kolejności od lewej do prawej strony pięciolinii.
W prawej części interfejsu widoczne są bramki, które można chwytać myszką i przeciągać na linię wybranego kubitu i w wybrane jej miejsce, które decyduje o sekwencji działań.
Każdy obwód (program ułożony z bramek) musi kończyć się bramką pomiarową, która odczytuje efekt eksperymentu.
Bramki zmieniają stan kubitów, bramka pomiarowa odczytuje ich stan.Wynikiem działania programu (eksperymentu, jak go nazywa IBM) jest wykres słupkowy pokazujący, ile razy każda kombinacja kubitów wystąpiła w serii. Bowiem po uruchomieniu symulacji (lub pracy komputera kwantowego) ten sam program przeprowadzany jest wielokrotnie.
Tu, w wynikach eksperymentów, ujawnia się główna cecha programowania kwantowego: niepewność wyniku.
Kubit uzyskuje oczekiwany stan z jakimś prawdopodobieństwem, zależnym od wykonywanych na nim działań. Dlatego przeprowadzana jest od razu cała seria tych samych sekwencji działań, której wynik reprezentuje wykres słupkowy (na załączonym przykładzie seria wynosiła 100 sekwencji).
Kubit
Kubit jest jednostką informacji w kwantowym świecie, jest odpowiednikiem bitu.
W odróżnieniu od bitu, kubit może przyjmować nieskończoną ilość wartości.
Ilustracją stanu kubitu jest strefa Blocha.
Fizycznie rolę kubitu spełnia spin elektronu. Ponieważ spin może przyjmować różne kierunki i zwroty w przestrzeni, to stan kubitu może przyjmować różne wartości na strefie Blocha.
Kąt ϕ do osi x mówi o fazie kubitu.
Podstawowymi stanami kubitu są |0> i |1> (bieguny sfery Blocha na osi z). |0> i |1> to oznaczenia kwantowego 0 i kwantowej 1.
|0>jest stanem o najniższej energii i od niego rozpoczyna się programowanie.
Bramka pomiarowa potrafi mierzyć tylko stany podstawowe |0> i |1>, a o innych stanach pośrednich możemy wnioskować na podstawie znajomości funkcji bramek biorących udział w eksperymencie.
Bramki
Wystarczy zarejestrować się na stronie internetowej https://quantumexperience.ng.bluemix.net/qx/signup, aby móc sprawdzać działanie różnych obwodów, korzystając z programu Composer .W przewodniku przy opisach bramek są załączone linki do symulacji działania obwodów skonfigurowanych z użyciem opisywanych bramek.
- Bramka ”X”, znana jako „bit-flip”, odwraca stan kubitu z |0> do |1> lub z |1> do |0>.
(Jest to działanie podobne do klasycznej bramki NOT.)
- Bramka „H” tworzy superpozycję stanów podstawowych.
Superpozycja to dziwny stan, w którym |0> i |1> są równie prawdopodobne,a wektor kubitu jest na osi x.
Gdy wektor kubitu ma zwrot zgodny z osią x, stan superpozycji oznacza się symbolem |+>. Natomiast |-> oznacza stan superpozycji z wektorem skierowanym wzdłuż osi -x. Aby go uzyskać, przed bramką H wstawiamy bramkę X.
Eksperymentalnie nie możemy mierzyć stanów superpozycji.
(H działa jak rzucenie monetą – póki wiruje zmienia stan, a gdy ją złapiemy, to zmierzymy stan.)
Choć bramka H powoduje powstanie losowego stanu, to parzysta liczba bramek H daje stan zdeterminowany:
- |0> H H daje |0>,
- |0> X H H daje |1>.
Bramki zmieniające fazę kubitu:
- Z obraca wektor o 180 stopni wokół osi z,
- S obraca wektor o 90 stopni wokół osi z,
- S+ obraca wektor o -90 stopni wokół osi z,
- T obraca wektor o 45 stopni wokół osi z,
- T+ obraca wektor o -45 stopni wokół osi z.
Gdy wejściowy stan kubitu jest |0> lub |1>, zmiana fazy nic nie wnosi do wyniku działania. Ale jeśli wprowadzimy kubit w stan superpozycji |+> lub |->, bramka zmieniająca fazę wpływa na wynik.
Razem ze wzbudzającą superpozycję bramką H bramki zmieniające fazę mogą tworzyć następujące sekwencje:
- |0>H H daje 0
- |0>H T H daje 0 z prawdopodobieństwem 85%
- |0>H S H daje 0 z prawdopodobieństwem 50%
- |0>H S T H daje 1 z prawdopodobieństwem 85%
- |0>H Z H daje 1.
Wykorzystywanie 2 kubitów
Jeśli odczytujemy dane z 2 linii kubitów, możliwe są 4 stany: |00>,|01>, |10>, |11>.
W oznaczeniach tych pierwszy kubit (q0) jest zawsze wyświetlany po prawej stronie.
Aby programować różne funkcje, potrzeba bramek, które wykonują logikę warunkową między kubitami, co oznacza, że stan jednego kubitu zależy od stanu innego.
Bramka CNOT
Brama warunkowa, której użyjemy, to Controlled-NOT lub CNOT. Oznaczeniem jej jest + w kółku.
Działanie bramki CNOT na stanach bazowych polega na odwróceniu zwrotu (jakbramka X) docelowego kubitu, ale tylko wtedy,gdy kontrolny kubit to |1>; inaczej CNOT nic nie robi.
Jeśli pierwszy kubit (ten z prawej) jest kontrolny, to:
- |00>pozostanie |00>,
- |10>pozostanie |10>,
- |01>przejdzie w |11>,
- |11>przejdzie w |01>.
Aby użyć bramki warunkowej w programie Composer, należy bramkę CNOT przeciągnąć na linię docelowego kubitu, a następnie kliknąć kubit kontrolny, dodając w ten sposób połączenie między nimi.