Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Diagramy obwodów kwantowych to wizualna reprezentacja operacji kwantowych. Diagramy obwodów pokazują przepływ kubitów za pośrednictwem programu kwantowego, w tym bramy i pomiary, które program stosuje do kubitów.
Z tego artykułu dowiesz się, jak wizualnie reprezentować algorytmy kwantowe za pomocą diagramów obwodów kwantowych w Azure Quantum Development Kit (QDK) za pomocą Visual Studio Code (VS Code) oraz Jupyter Notebook.
Aby uzyskać więcej informacji na temat diagramów obwodów kwantowych, zobacz Konwencje obwodów kwantowych.
Wymagania wstępne
Najnowsza wersja programu VS Code lub otwartego oprogramowania VS Code dla sieci internetowej.
Najnowsza wersja QDK rozszerzenia, rozszerzenia języka Python i Jupyter rozszerzenia zainstalowanego w programie VS Code.
Najnowsza wersja biblioteki
qdkjęzyka Python z opcjonalnymjupyterdodatkiem.python -m pip install --upgrade "qdk[jupyter]"
Wizualizowanie obwodów kwantowych w programie VS Code
Aby wizualizować obwody kwantowe programów języka Q# w programie VS Code, wykonaj następujące kroki.
Wyświetlanie diagramów obwodów dla programu języka Q#
Otwórz plik Q# w VS Code lub załaduj jeden z przykładów kwantowych.
Wybierz polecenie Obwód z CodeLens, które poprzedza operację punktu wejścia.
W oknie obwodu języka Q# zostanie wyświetlony diagram obwodu Twojego programu. Na przykład następujący obwód odpowiada operacji, która umieszcza kubit w stanie superpozycji, a następnie mierzy kubit. Diagram obwodu przedstawia jeden rejestr kubitów, który został zainicjowany do stanu $\ket{0}$. Następnie brama Hadamarda jest stosowana na kubicie, po czym następuje operacja pomiaru, która jest reprezentowana przez symbol miernika. W tym przypadku wynik pomiaru wynosi zero.
Wskazówka
W plikach Q# i OpenQASM wybierz element na diagramie obwodu, aby wyróżnić kod tworzący element obwodu.
Wyświetlanie diagramów obwodów dla poszczególnych operacji
Aby zwizualizować obwód kwantowy dla pojedynczej operacji w pliku Q#, wybierz polecenie Circuit z funkcji CodeLens poprzedzającej operację.
Wyświetlanie diagramów obwodów podczas debugowania
W przypadku korzystania z VS Code debugera w programie języka Q# można zwizualizować obwód kwantowy na podstawie stanu programu w bieżącym punkcie przerwania debugera.
- Wybierz polecenie Debuguj z CodeLens, które poprzedza operację punktu wejścia.
- W okienku Uruchamianie i debugowanie rozwiń listę rozwijaną Obwód kwantowy w menu ZMIENNE . Panel QDK Obwód otwiera się, pokazując obwód podczas krokowego przechodzenia przez program.
- Ustaw punkty przerwania i przejdź krokowo przez kod, aby zobaczyć, jak obwód jest aktualizowany podczas działania programu.
Obwody kwantowe w Jupyter Notebook
W Jupyter Notebook można wizualizować obwody kwantowe przy użyciu modułów Python qdk.qsharp i qdk.widgets. Moduł widgets udostępnia widżet renderujący diagram obwodu kwantowego jako obraz SVG.
Wyświetlanie diagramów obwodów dla wyrażenia wejścia
W VS Codeprogramie otwórz menu Widok i wybierz pozycję Paleta poleceń.
Wprowadź i wybierz opcję Utwórz: Nowy Jupyter Notebook.
Najpierw w pierwszej komórce notesu uruchom następujący kod, aby zaimportować pakiet
qsharp.from qdk import qsharpUtwórz nową komórkę i wprowadź kod języka Q#. Na przykład poniższy kod przygotowuje stan Bella:
%%qsharp // Prepare a Bell State. operation BellState() : Unit { use register = Qubit[2]; H(register[0]); CNOT(register[0], register[1]); }Aby wyświetlić prosty obwód kwantowy na podstawie bieżącego stanu programu, przekaż wyrażenie punktu wejścia do
qsharp.circuitfunkcji. Na przykład diagram obwodu poprzedniego kodu przedstawia dwa rejestry kubitów, które są inicjowane do stanu $\ket{0}$. Następnie bramka Hadamarda jest stosowana do pierwszego kubitu. Na koniec brama CNOT jest stosowana, gdzie pierwszy kubit jest kontrolką reprezentowaną przez kropkę, a drugi kubit jest obiektem docelowym reprezentowanym przez symbol X.qsharp.circuit("BellState()")q_0 ── H ──── ● ── q_1 ───────── X ──Aby zwizualizować obwód kwantowy jako obraz SVG, użyj modułu
widgets. Utwórz nową komórkę, a następnie uruchom następujący kod, aby zwizualizować obwód utworzony w poprzedniej komórce.from qdk.widgets import Circuit Circuit(qsharp.circuit("BellState()"))
Wyświetlanie diagramów obwodów dla operacji z kubitami
Możesz wygenerować diagramy obwodów operacji, które przyjmują kubity lub tablice kubitów, jako dane wejściowe. Na diagramie przedstawiono przewody dla każdego kubitu wejściowego wraz z przewodami dla dodatkowych kubitów przydzielanych w ramach operacji. Gdy operacja przyjmuje tablicę kubitów (Qubit[]), obwód pokazuje tablicę jako rejestr 2 kubitów.
Dodaj nową komórkę, a następnie skopiuj i uruchom następujący kod w języku Q#. Ten kod przygotowuje stan kota.
%%qsharp operation PrepareCatState(register : Qubit[]) : Unit { H(register[0]); ApplyToEach(CNOT(register[0], _), register[1...]); }Dodaj nową komórkę i uruchom następujący kod, aby zwizualizować obwód
PrepareCatStateoperacji.Circuit(qsharp.circuit(operation="PrepareCatState"))
Diagramy obwodów dla obwodów dynamicznych
Diagramy obwodów są generowane poprzez wykonanie klasycznej logiki w programie Q# i monitorowanie wszystkich przydzielonych oraz zastosowanych bram. Pętle i instrukcje warunkowe są obsługiwane, gdy zajmują się tylko wartościami klasycznymi.
Jednak programy zawierające pętle i wyrażenia warunkowe korzystające z wyników pomiaru kubitu są trudniejsze do reprezentowania za pomocą diagramu obwodu. Rozważmy na przykład następujące wyrażenie:
if (M(q) == One) {
X(q)
}
Tego wyrażenia nie można przedstawić za pomocą prostego schematu układu, ponieważ bramki są uzależnione od wyników pomiarów. Obwody z bramami, które zależą od wyników pomiaru, są nazywane obwodami dynamicznymi.
Aby wygenerować diagramy dla obwodów dynamicznych, można uruchomić program w symulatorze kwantowym i śledzić operacje bram podczas ich stosowania. Jest to nazywane trybem śledzenia, ponieważ kubity i bramy są śledzone podczas wykonywania symulacji.
Wadą śledzenia obwodów jest to, że przechwytują tylko wynik pomiaru i wynikające z tego zastosowania bramy dla jednej symulacji. W powyższym przykładzie, jeśli wynik pomiaru to Zero, brama X nie znajduje się na diagramie. Jeśli ponownie uruchomisz symulację, możesz uzyskać inny obwód.