แบบฝึกหัดที่ 1 - สร้างตัวสร้างบิตแบบสุ่ม

เสร็จสมบูรณ์เมื่อ

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

คุณสร้างเครื่องสร้างตัวเลขสุ่มควอนตัมของคุณในสองขั้นตอน หน่วยนี้เป็นขั้นตอนแรก ซึ่งก็คือการสร้างบิตสุ่มเดียว ในการสร้างบิตแบบสุ่ม คุณจัดสรรคิวบิตในสถานะ $\ket{0}$ ใส่คิวบิตนั้นในสถานะการซ้อนทับ จากนั้นวัดคิวบิตเพื่อสร้างค่าบิตแบบสุ่มเป็น 0 หรือ 1

สร้างไฟล์โปรแกรม Q#

  1. เปิด Visual Studio Code
  2. เปิดเมนู แฟ้ม แล้วเลือก แฟ้มข้อความใหม่ เพื่อสร้างแฟ้มใหม่
  3. บันทึกไฟล์เป็น Main.qs

เขียนรหัส Q# ของคุณสําหรับตัวสร้างบิตแบบสุ่มใน Main.qs ไฟล์

กําหนดการดําเนินงาน Main

การดําเนินงาน Main คือ จุดเริ่มต้นของโปรแกรมของคุณ คัดลอกรหัสต่อไปนี้ลงในไฟล์ของคุณ Main.qs :

operation Main(): Result{

    // Your code goes here

}

จัดสรรโควตา

ในการเริ่มต้น ให้จัดสรรหนึ่งคิวบิตด้วย use คําสั่ง ใน Q# ทุกคิวบิตที่คุณจัดสรรจะ use เริ่มต้นในสถานะ $\ket{0}$ ตามค่าเริ่มต้น หากต้องการจัดสรรคิวบิตเดียว ให้คัดลอกโค้ดต่อไปนี้ลงในโปรแกรมของคุณ:

operation Main(): Result{

    // Allocate a qubit
    use q = Qubit();
}

ทําให้คิวบิตอยู่ในสถานะการซ้อนทับ

ณ จุดนี้ คุณไม่สามารถสร้างบิตแบบสุ่มจากคิวบิตได้ เนื่องจากคิวบิตอยู่ในสถานะ $\ket{0}$ หากคุณวัดสถานะของคิวบิตนี้ การวัดจะส่งคืนค่าบิตเป็น 0 ทุกครั้ง

ในการสร้างบิตสุ่มจากการวัดคิวบิต ก่อนอื่นคุณต้องใส่คิวบิตลงในการซ้อนทับของสถานะ $\ket{0}$ และสถานะ $\ket{1}$ หากต้องการทําให้คิวบิตอยู่ในสถานะการซ้อนทับ ให้ใช้การดําเนินการ Hadamard กับคิวบิต การดําเนินการ Hadamard จะแปลงคิวบิตจากสถานะ $\ket{0}$ เป็นการซ้อนทับที่เท่ากันของสถานะ $\ket{0}$ และ $\ket{1}$

$$ H \ket{0} = \frac{1}{\sqrt{2}} (\ket{0} + \ket{1}) $$

หากต้องการใช้การดําเนินการ Hadamard กับคิวบิตของคุณใน Q# ให้ใช้การดําเนินการ H :

operation Main(): Result{

    use q = Qubit();
    H(q);
}

โน้ต

เมื่อคุณใช้การดําเนินการควอนตัมกับคิวบิตใน Q# การดําเนินการจะไม่ส่งคืนค่า การดําเนินการจะส่งผลต่อสถานะของคิวบิตแทน

วัด Qubit

เมื่อคุณวัดคิวบิต คุณมีโอกาส 50% ที่การวัดจะส่งคืน 0 และโอกาส 50% ที่การวัดจะส่งคืน 1

ในการวัดค่าคิวบิตใน Q# ให้ใช้ M การดําเนินการและจัดเก็บค่าการวัดในตัว result แปร:

operation Main(): Result{

    use q = Qubit();
    H(q);
    let result = M(q);
}

รีเซ็ตคีย์บิต

ใน Q# คิวบิตต้องอยู่ในสถานะ $\ket{0}$ ก่อนที่คุณจะสามารถปล่อยคิวบิตได้ ใช้ Reset การดําเนินการเพื่อรีเซ็ตคิวบิตเป็นสถานะ $\ket{0}$

operation Main(): Result{

    use q = Qubit();
    H(q);
    let result = M(q);
    Reset(q);
}

แสดงผลลัพธ์การวัด

สุดท้าย ให้ส่งคืนผลการวัดพร้อม return คําสั่ง ผลลัพธ์นี้เป็นบิตสุ่ม ไม่ว่าจะเป็น 0 หรือ 1 ที่มีความน่าจะเป็นเท่ากัน คัดลอกรหัสต่อไปนี้ในไฟล์ของคุณ Main.qs :

operation Main(): Result{

    use q = Qubit();
    H(q);
    let result = M(q);
    Reset(q);
    return result;
}

เรียกใช้โปรแกรมสร้างบิตแบบสุ่มของคุณ

คุณสร้างโปรแกรม Q# ที่เรียกว่า Main.qs จัดสรรคิวบิต ทําให้คิวบิตอยู่ในสถานะการซ้อนทับที่เท่ากัน วัดคิวบิต รีเซ็ตคิวบิต แล้วส่งคืนผลการวัด นี่คือบทสรุปของรหัส Q# ของคุณ:

operation Main() : Result {
    // Allocate a qubit.
    use q = Qubit();

    // Set the qubit into superposition of 0 and 1 using the Hadamard 
    H(q);

    // Measure the qubit and store the result.
    let result = M(q);

    // Reset qubit to the |0〉 state.
    Reset(q);

    // Return the result of the measurement.
    return result;
}

โน้ต

//สัญลักษณ์แสดงความคิดเห็นเพิ่มเติมที่อธิบายแต่ละขั้นตอนของโปรแกรม คอมไพเลอร์จะละเว้นความคิดเห็น

หากต้องการเรียกใช้โปรแกรมของคุณบนเครื่องจําลองในตัว ให้เลือก เรียกใช้เลนส์โค้ด เหนือการทํางาน Main หรือกด Ctrl + F5 ผลลัพธ์ของคุณจะปรากฏบนคอนโซลการแก้ไขข้อบกพร่องในเทอร์มินัล

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

ในหน่วยถัดไป คุณจะรวมบิตสุ่มหลายบิตเพื่อใช้ส่วนที่สองของตัวสร้างตัวเลขสุ่มควอนตัมของคุณ