Vizualizace diagramů kvantových obvodů pomocí Q#
Diagramy kvantových obvodů jsou vizuální reprezentací kvantových operací. Zobrazují tok qubitů prostřednictvím kvantového programu, včetně bran a měření, která se na ně vztahují.
V tomto článku se dozvíte, jak vizuálně znázorňovat kvantové algoritmy pomocí diagramů kvantových obvodů pomocí editoru Visual Studio Code a poznámkových bloků Jupyter Notebook.
Další informace o konvencích diagramů kvantových obvodů najdete v tématu Konvence kvantových obvodů.
Požadavky
Pokud chcete pomocí editoru Visual Studio Code vizualizovat kvantové obvody, potřebujete:
- Nejnovější verze editoru Visual Studio Code nebo otevřete VS Code na webu.
- Nejnovější verze rozšíření Azure Quantum Development Kit
Kvantové obvody s editorem Visual Studio Code
Pokud chcete vizualizovat kvantové okruhy programů v editoru Q# Visual Studio Code, postupujte podle těchto kroků. Další informace o konvencích diagramů kvantových obvodů najdete v tématu Konvence kvantových obvodů.
Zobrazení diagramů okruhů pro Q# program
Otevřete soubor v editoru Q# Visual Studio Code nebo načtěte některou z kvantových ukázek.
Pokud chcete vizualizovat kvantový okruh Q# programu, vyberte Zobrazit –> paleta příkazů a zadejte "circuit", který by měl zobrazit Q#možnost : Zobrazit okruh . Můžete také kliknout na Okruh ze seznamu příkazů níže
@EntryPoint()
.Okruh se zobrazí v okně okruhu Q# . Například následující okruh odpovídá operaci, která vloží qubit do superpozice a pak ho změruje. Diagram okruhu znázorňuje jeden qubitový registr, který je inicializován do stavu |0⟩. Pak se na qubit použije hadamardská brána H, po které následuje operace měření, která je reprezentována symbolem měřiče.
Zobrazení diagramů obvodů pro operace
Kvantový obvod můžete vizualizovat pro jednu Q# operaci. Chcete-li to provést, klikněte na tlačítko Okruh v objektivu kódu, který se zobrazí nad deklarací operace.
Zobrazení diagramů okruhů při ladění
Při laděníQ# programu můžete vizualizovat kvantový okruh na základě aktuálního stavu programu.
Klikněte na tlačítko Ladit v seznamu příkazů pro objektiv kódu níže
@EntryPoint()
.V zobrazení Spustit a ladit na levé straně rozbalte oddíl Quantum Circuit v podokně Proměnné a zobrazte okruh při procházení programu.
Můžete procházet kód a nastavit zarážky v různých bodech, abyste viděli aktualizaci okruhu při spuštění programu.
Aktuální kvantový obvod se zobrazí na paneluQ# Okruh. Tento diagram okruhu představuje aktuální stav simulátoru, tj. bran, které byly použity až do aktuálního bodu provádění.
Kvantové obvody s poznámkovými bloky Jupyter
V Jupyter Notebooks můžete pomocí balíčku vizualizovat kvantové okruhy qsharp-widgets
. Tento balíček obsahuje widget, který vykresluje diagram kvantového obvodu jako obrázek SVG.
V editoru Visual Studio Code vyberte Zobrazit > paletu příkazů a vyberte Create: Nový Jupyter Notebook.
V první buňce poznámkového bloku spusťte následující kód pro import Q# modulu.
import qsharp
Přidejte novou buňkuQ# a zadejte kód. Například následující kód připraví Bell State.
%%qsharp // Prepare a Bell State. use register = Qubit[2]; H(register[0]); CNOT(register[0], register[1]);
Funkci můžete použít
dump_circuit()
k zobrazení kvantového obvodu na základě aktuálního stavu programu. Například diagram obvodu zobrazuje dva qubitové registry, které jsou inicializovány do stavu |0⟩. Pak se hadamardská brána H použije na první qubit. Poté se brána CNOT použije pomocí prvního qubitu jako ovládacího prvku, který je reprezentován jako tečka, a druhý qubit jako target, který je reprezentován jako X.qsharp.dump_circuit()
q_0 ── H ──── ● ── q_1 ───────── X ──
Pomocí balíčku můžete vizualizovat kvantové obvody jako image
qsharp-widgets
SVG. V tomto případě je brána CNOT reprezentována jako čára spojující dva qubity s tečkou na řídicím qubitu a ohraničeným křížkem na qubitu target . Další informace najdete v tématu Konvence kvantových obvodů.from qsharp_widgets import Circuit Circuit(qsharp.dump_circuit())
Zobrazení diagramů obvodů pro vstupní výraz
Diagram okruhu pro libovolný program se vstupním výrazem můžete vygenerovat voláním qsharp.circuit()
a předáním vstupního výrazu jako argumentu.
Například přidejte novou buňku a zkopírujte následující kód, který připraví stav GHZ.
%%qsharp open Microsoft.Quantum.Diagnostics; open Microsoft.Quantum.Measurement; operation GHZSample(n: Int) : Result[] { use qs = Qubit[n]; H(qs[0]); ApplyToEach(CNOT(qs[0], _), qs[1...]); let results = MeasureEachZ(qs); ResetAll(qs); return results; }
Přidejte novou buňku a spusťte následující kód pro vizualizaci okruhu. Můžete například připravit stav GHZ se 3 qubity.
Circuit(qsharp.circuit("GHZSample(3)"))
Zobrazení diagramů obvodů pro operace s qubity
Diagramy obvodů můžete generovat pro jakoukoli operaci, která přijímá qubity nebo pole qubitů. Diagram znázorňuje tolik vodičů, kolik je vstupních qubitů, plus všechny další qubity, které jsou přiděleny v rámci operace. Když operace převezme pole qubitů (Qubit[])
, okruh zobrazí pole jako registr 2 qubitů.
Přidejte novou buňku a zkopírujte následující příklad. Tento kód připraví stav kočky.
%%qsharp operation PrepareCatState(register : Qubit[]) : Unit { H(register[0]); ApplyToEach(CNOT(register[0], _), register[1...]); }
Přidejte novou buňku a spuštěním následujícího kódu vizualizujete okruh
PrepareCatState
operace.Circuit(qsharp.circuit(operation="PrepareCatState"))
Podmínky, které ovlivňují diagramy obvodů
Při vizualizaci kvantových obvodů můžou vizualizaci diagramu obvodů ovlivnit následující podmínky.
Dynamické okruhy
Diagramy okruhů se generují spuštěním veškeré klasické logiky v rámci Q# programu a sledováním všech přidělených qubitů nebo použitých bran. Smyčky a podmíněné hodnoty jsou podporovány, pokud se zabývají pouze klasickými hodnotami.
Programy, které obsahují smyčky a podmíněné výrazy, které používají výsledky měření qubitu, jsou však složitější na reprezentaci pomocí diagramu okruhu. Například výraz podobný následujícímu
if (M(q) == One) {
X(q)
}
nelze vyjádřit přímočarým diagramem obvodu, protože brány jsou podmíněny výsledkem měření. Takový okruh se nazývá dynamický okruh.
Diagramy okruhů je možné generovat pro dynamické okruhy spuštěním programu v kvantovém simulátoru a trasováním bran při jejich použití. Tomu se říká režim trasování , protože qubity a brány se trasují při simulaci.
Nevýhodou trasovaných obvodů je, že zachycují pouze výsledek měření a následné aplikace hradla pro jednu simulaci. Pokud je Zero
ve výše uvedeném příkladu výsledek měření , v diagramu X
nevidíte bránu. Další spuštění simulace může ukázat trochu jiný okruh.
Cílový profil
Aktuálně vybraný target profil ovlivňuje způsob generování diagramů obvodů. Cílové profily slouží k určení možností hardwaru target a omezení, která jsou pro kvantový program uložená.
target Pokud je profil nastavený na neomezený, diagramy obvodů zobrazují kvantové operace, které jsou vyvolány v Q# programu. target Pokud je profil nastavený na základ QIR, diagramy okruhů zobrazují kvantové operace, které by se spustily na hardwaru, pokud se program odešle do Azure Quantum s tímto target profilem.
Poznámka
Pokud chcete vybrat target profil ve VS Code, přejděte na Zobrazení –> Paleta příkazů a napišteQ#: Nastavte profil Azure Quantum QIRtarget. V rozevíracím seznamu můžete vybrat
Unrestricted
neboQIR Base Profile
.Pokud chcete vybrat target profil v Pythonu, napište
qsharp.init(target_profile=qsharp.TargetProfile.Unrestricted)
neboqsharp.init(target_profile=qsharp.TargetProfile.Base)
.
Konkrétně se používají dekompozice hradla, díky kterým by výsledný obvod byl kompatibilní s možnostmi hardwaru target . Jedná se o stejné rozklady, které by se použily při generování kódu a odesílání do Azure Quantum.
Představte si například následující Q# program, který měří qubit a pole qubitů.
namespace Sample { open Microsoft.Quantum.Measurement; @EntryPoint() operation Main() : (Result, Result[]) { // The `M` operation performs a measurement of a single qubit in the // computational basis, also known as the Pauli Z basis. use q = Qubit(); let result = M(q); Reset(q); // The `MeasureEachZ` operation measures each qubit in an array in the // computational basis and returns an array of `Result` values. use qs = Qubit[2]; let results = MeasureEachZ(qs); return (result, results); } }
Pokud target je profil nastavený na neomezené, brány zobrazené v okruhu přesně odpovídají kvantovým operacím, které jsou vyvolány v Q# programu.
target Pokud je profil základem QIR, okruh vypadá jinak. Vzhledem k tomu, že základní profil targets neumožňuje opakované použití qubitů po měření, měření se teď provádí na propleteném qubitu. Vzhledem k tomu
Reset
, že operace není podporovanou bránou v základním profilu, zahodí se. Výsledný okruh odpovídá tomu, co by se spustilo na hardwaru, pokud se tento program odešle do Azure Quantum s tímto target profilem.
Váš názor
https://aka.ms/ContentUserFeedback.
Připravujeme: V průběhu roku 2024 budeme postupně vyřazovat problémy z GitHub coby mechanismus zpětné vazby pro obsah a nahrazovat ho novým systémem zpětné vazby. Další informace naleznete v tématu:Odeslat a zobrazit názory pro