Próbuję się przyzwyczaić do IBM Q, implementując algorytm Grovera w trzech kubitach, ale mam trudności z implementacją wyroczni.
Czy możesz pokazać, jak to zrobić lub zasugerować dobre zasoby, aby przyzwyczaić się do programowania obwodów IBM Q?
Chcę zaznaczyć jeden arbitralny stan, odwracając jego znak, tak jak ma to zrobić wyrocznia.
Na przykład mam
.
i chcę zaznaczyć , odwracając jego znak do . W jakiś sposób rozumiem, że brama CCZ rozwiązałaby problem, ale nie mamy bramy CCZ w IBM Q. Połączenie niektórych bram będzie działać tak samo jak CCZ, ale nie jestem jeszcze pewien, jak to zrobić. Walczę też o inne sprawy nie tylko o .
Sprawa dwóch kubitów jest dla mnie wystarczająco prosta, ale opieka nad trzema kubitami jest dla mnie nadal myląca.
Odpowiedzi:
Odpowiadam na moje pytanie. Po kilku wyszukiwaniach w Google znalazłem ten obraz przedstawiający bramę CCZ według CNOT, sztyletu T i bramki T. Próbowałem tego na IBM Q i działało. Chcę dowiedzieć się, dlaczego to działa, ale to już inna historia.
Dla kogoś, kto jest zainteresowany, oto mój obwód kwantowy znalezienia algorytmu Grovera | 111> z jedną iteracją.
źródło
Zaimplementowałem ten sam problem dla wielu kubitów za pomocą qiskit tutaj .
Dla zaprezentowanego stanu 3 kubitów możesz użyć wyroczni takiej jak tutaj (używam dziwactwa, aby pokazać amplitudy w czasie rzeczywistym). Zauważ, że pierwsze trzy Hadamardy (te przed nimi|111⟩
...
) służą jedynie do symulacji losowych danych wejściowych do wyroczni i nie są częścią samej wyroczni. W każdym przypadku, jak widać z amplitud na końcu obwodu, tylko stan jest usuwany, podczas gdy wszystkie pozostałe stany pozostają niezmienione.Ogólnie rzecz biorąc, chodzi o symulację bramki CCZ przy użyciu Hadamard na bicie docelowym, a następnie bramki CCX, a następnie kolejnej Hadamard na bicie docelowym.
źródło