แบบฝึกหัดที่ 1 - สร้างตัวสร้างบิตแบบสุ่ม
ในหน่วยก่อนหน้า คุณได้เรียนรู้เกี่ยวกับบล็อกการสร้างพื้นฐานของโปรแกรม Q# ตอนนี้คุณพร้อมที่จะเขียนโปรแกรมควอนตัมแรกของคุณแล้ว ในหน่วยนี้ คุณเขียนโปรแกรมควอนตัมที่สร้างบิตสุ่มอย่างแท้จริง
คุณสร้างเครื่องสร้างตัวเลขสุ่มควอนตัมของคุณในสองขั้นตอน หน่วยนี้เป็นขั้นตอนแรก ซึ่งก็คือการสร้างบิตสุ่มเดียว ในการสร้างบิตแบบสุ่ม คุณจัดสรรคิวบิตในสถานะ $\ket{0}$ ใส่คิวบิตนั้นในสถานะการซ้อนทับ จากนั้นวัดคิวบิตเพื่อสร้างค่าบิตแบบสุ่มเป็น 0 หรือ 1
สร้างไฟล์โปรแกรม Q#
- เปิด Visual Studio Code
- เปิดเมนู แฟ้ม แล้วเลือก แฟ้มข้อความใหม่ เพื่อสร้างแฟ้มใหม่
- บันทึกไฟล์เป็น
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% ค่าการวัดของบิตนี้บนคอมพิวเตอร์ควอนตัมเป็นแบบสุ่มอย่างแท้จริง เรียกใช้โปรแกรมหลาย ๆ ครั้งเพื่อดูด้วยตัวคุณเองว่าผลลัพธ์เปลี่ยนแปลงไปอย่างไร
ในหน่วยถัดไป คุณจะรวมบิตสุ่มหลายบิตเพื่อใช้ส่วนที่สองของตัวสร้างตัวเลขสุ่มควอนตัมของคุณ