โปรแกรมควอนตัมแบบง่าย ๆ จะเป็นอย่างไร?


15

หลังจากอ่าน " ชิพโทนิคควอนตัมชิปตัวแรก " ฉันสงสัยว่าซอฟต์แวร์สำหรับคอมพิวเตอร์ที่ใช้ความยุ่งเหยิงของควอนตัมเป็นอย่างไร

มีตัวอย่างของรหัสสำหรับการเขียนโปรแกรมควอนตัมที่เฉพาะเจาะจงหรือไม่ เช่น pseudocode หรือภาษาระดับสูง? โดยเฉพาะสิ่งที่เป็นโปรแกรมที่สั้นที่สุดที่สามารถใช้ในการสร้างรัฐเบลล์เริ่มต้นจากสถานะที่กำหนดเป็น| ψ0=| 00ใช้ทั้งการจำลองสถานการณ์และหนึ่งในโปรเซสเซอร์Quantum Experienceของ IBMเช่นibmqx4?

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

การทำให้ความคิดกระโดดจากการเขียนโปรแกรมแบบดั้งเดิมไปสู่ความพัวพันไม่ใช่เรื่องง่าย


ฉันได้พบlibquantumของ C ด้วยเช่นกัน

คำตอบ:


12

สมมติว่าคุณกำลังพิจารณาคอมพิวเตอร์ควอนตัมแบบเกทเกตวิธีที่ง่ายที่สุดในการสร้างสถานะที่ยุ่งเหยิงคือการสร้างสถานะเบลล์ วงจรต่อไปนี้แสดงสถานะเบลล์|Φ+

Bellstate

|ψ0|ψ1|ψ2

|ψ0

|ψ0=|00

|ψ1

Hadamard-Gate นำไปใช้กับ qubit แรกซึ่งส่งผลต่อไปนี้:

|ψ1=(Hผม)|00=H|0|0=12(|0+|1)|0=12(|00+|10)

3 |ψ2:

ตอนนี้จะใช้เกต CNOT และพลิก qubit ที่สอง แต่เฉพาะที่อันแรกที่มีค่า 1 ผลลัพธ์คือ

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

สถานะสุดท้ายนี้ |ψ2เป็นรัฐที่มีปัญหาและมักจะเป็นวิธีที่เป็นธรรมชาติที่สุดที่จะเกิดขึ้นกับสถานการณ์ดังกล่าว เบลล์ระบุว่าเกิดขึ้นในอัลกอริทึมควอนตัมที่น่าสนใจมากมายเช่นการเข้ารหัสแบบหนาแน่นสูงหรือการส่งผ่านทางไกล

แม้ว่าวิธีการข้างต้นอาจไม่เหมือนกับการเขียนโปรแกรมให้คุณตามปกติ แต่การใช้เกตกับรัฐเป็นวิธีการเขียนโปรแกรมคอมพิวเตอร์ควอนตัมแบบเกต มีเลเยอร์นามธรรมที่ให้คุณทำการเขียนโปรแกรมระดับสูง แต่แปลคำสั่งไปยังแอพพลิเคชั่นของเกท ไอบีเอ็มควอนตัมประสบการณ์อินเตอร์เฟซที่มีคุณสมบัติดังกล่าว

ในภาษาเช่น Microsoft # Q ตัวอย่างข้างต้นอาจมีลักษณะคล้ายกับนี้:

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]);
         }
     }
}

รุ่นที่มีรายละเอียดมากขึ้น (รวมถึงการวัด) สามารถพบได้ที่นี่: ไมโครซอฟท์: การเขียนโปรแกรมควอนตัม


14

วิธีหนึ่งในการเขียนโปรแกรมควอนตัมคือใช้ QISKit สิ่งนี้สามารถใช้เพื่อเรียกใช้โปรแกรมบนอุปกรณ์ของ IBM เว็บไซต์ QISKitแสดงให้เห็นโค้ดต่อไปนี้จะได้รับคุณไปซึ่งเป็นวงจรที่พันกันตามที่คุณต้องการ นอกจากนี้ยังเป็นกระบวนการเดียวกับในคำตอบโดย datell ฉันจะแสดงความคิดเห็นในบรรทัดต่อบรรทัด

# 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')) 

โปรดทราบว่าคำสั่ง 'execute' ที่นี่ระบุเฉพาะโปรแกรมที่จะเรียกใช้ การตั้งค่าอื่น ๆ ทั้งหมดเช่นอุปกรณ์ที่คุณต้องการใช้จำนวนครั้งที่คุณต้องการทำซ้ำเพื่อรับสถิติ ฯลฯ ถูกตั้งค่าเป็นค่าเริ่มต้น หากต้องการรันบนibmqx4 เป็นเวลา 1024 ภาพคุณสามารถใช้แทนได้

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

4

โปรแกรมควอนตัมที่ง่ายที่สุดที่ฉันสามารถนึกได้คือตัวสร้างตัวเลขสุ่ม (1 บิต) จริง ในฐานะที่เป็นวงจรควอนตัมดูเหมือนว่า:

คุณเตรียมคิวบิตในสถานะก่อน |0จากนั้นใช้ประตู Hadamard เพื่อสร้างการซ้อนทับ 22(|0+|1)ซึ่งคุณจะวัดตามเกณฑ์การคำนวณ ผลลัพธ์ของการวัดคือ|0 หรือ |1แต่ละอันมีโอกาส 50%

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.