Jak wyglądałby bardzo prosty program kwantowy?


15

Po przeczytaniu „ pierwszego programowalnego mikroukładu fotonicznego ”. Zastanawiałem się, jakie byłoby oprogramowanie dla komputera wykorzystującego splątanie kwantowe.

Czy jest jakiś przykład kodu dla konkretnego programowania kwantowego? Jak pseudokod lub język wysokiego poziomu? W szczególności jaki jest najkrótszy program, którego można użyć do utworzenia stanu Bell począwszy od stanu inicjalizowana| ψ0=| 00użyciu zarówno symulację i jeden z IBMQuantum Experienceprocesorów, takich jakibmqx4?

|ψ=12)(|00+|11)
|ψ0=|00

Przejście od tradycyjnego programowania do uwikłania nie jest tak łatwe.


Znalazłem c za libquantum też.

Odpowiedzi:


12

|Φ+

Bellstate

|ψ0|ψ1|ψ2) możemy określić Entagled stan po zastosowaniu wszystkich bram:

|ψ0 :

|ψ0=|00

2) |ψ1 :

Bramka Hadamarda ma zastosowanie do pierwszego kubita, co powoduje:

|ψ1=(H.ja)|00=H.|0|0=12)(|0+|1)|0=12)(|00+|10)

3) |ψ2):

Teraz stosowana jest bramka CNOT i odwraca drugi kubit, ale tylko tam, gdzie pierwszy ma wartość 1. Wynik jest

|ψ2)=12)(|00+|11)

Ten ostatni stan |ψ2)jest stanem uwikłanym i zwykle najbardziej naturalnym sposobem na uzyskanie takiej sytuacji. Stany dzwonu występują w wielu interesujących algorytmach kwantowych, takich jak kodowanie bardzo gęste lub teleportacja.

Chociaż powyższe podejście może nie wydawać się programowaniem w zwykłym znaczeniu, zastosowanie bramek do stanów jest w zasadzie sposobem programowania komputerowego komputera kwantowego. Istnieją warstwy abstrakcji, które umożliwiają wykonywanie programowania na wysokim poziomie, ale przekładają polecenia na zastosowanie bramek. Interfejs IBM Quantum Experience zapewnia takie funkcje.

W języku takim jak Q # Microsoftu powyższy przykład może wyglądać podobnie do tego:

operation BellTest () : ()
{
    body
    {
        // Use two qubits
        using (qubits = Qubit[2])
        {
            Set (One, qubits[0]);
            Set (Zero, qubits[1]);

            // Apply Hadamard gate to the first qubit
            H(qubits[0]);

            // Apply CNOT gate
            CNOT(qubits[0],qubits[1]);
         }
     }
}

Bardziej szczegółową wersję (w tym pomiar) można znaleźć tutaj: Microsoft: Pisanie programu kwantowego .


14

Jednym ze sposobów pisania programów kwantowych jest QISKit. Może to służyć do uruchamiania programów na urządzeniach IBM. Witryna QISKit sugeruje następujący fragment kodu na początek , który jest obwodem zaplątanym, jak chcesz. Jest to również ten sam proces, co w odpowiedzi datell. Skomentuję to linia po linii.

# import and initialize the method used to store quantum programs
from qiskit import QuantumProgram
qp = QuantumProgram()
# initialize a quantum register of two qubits
qr = qp.create_quantum_register('qr',2) 
# and a classical register of two bits
cr = qp.create_classical_register('cr',2) 
# create a circuit with them which we call 'Bell'
qc = qp.create_circuit('Bell',[qr],[cr]) 
# apply a Hadamard to the first qubit
qc.h(qr[0]) 
# apply a controlled not with the first qubit as control
qc.cx(qr[0], qr[1]) 
# measure the first qubit and store its result on the first bit
qc.measure(qr[0], cr[0]) 
# the same for the second qubit and bit
qc.measure(qr[1], cr[1]) 
# run the circuit
result = qp.execute('Bell') 
# extract the results
print(result.get_counts('Bell')) 

Zauważ, że tutaj polecenie „wykonaj” określa tylko program do uruchomienia. Wszystkie inne ustawienia, takie jak urządzenie, którego chcesz użyć, liczba powtórzeń, aby uzyskać statystyki itp., Są ustawione na wartości domyślne. Aby uruchomić na ibmqx4 dla 1024 zdjęć, możesz zamiast tego użyć

results = qp.execute(['Bell'], backend='ibmqx4', shots=1024)

4

Najprostszym programem kwantowym, jaki mogę wymyślić, jest (1-bitowy) prawdziwy generator liczb losowych. Jako obwód kwantowy wygląda to tak:

Najpierw przygotowujesz kubit w stanie |0, a następnie zastosuj bramę Hadamarda, aby uzyskać superpozycję 2)2)(|0+|1)które następnie mierzysz na podstawie obliczeniowej. Wynik pomiaru to|0 lub |1, każdy z prawdopodobieństwem 50%.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.