एक छोटे क्वांटम कंप्यूटर का सिम्युलेशन करना
क्वांटम स्टेट एम्प्लीट्यूड (amplitudes) का एक वेक्टर होती है, और गेट्स मैट्रिक्स होते हैं। numpy में Hadamard, X और CNOT बनाएं, एक Bell स्टेट बनाएं, और देखें कि n क्यूबिट्स के लिए 2ⁿ संख्याओं की ज़रूरत क्यों होती है।
60 सेकंड में
एक छोटे क्वांटम कंप्यूटर का सिम्युलेशन करना
क्वांटम स्टेट एम्प्लीट्यूड (amplitudes) का एक वेक्टर होती है, और गेट्स मैट्रिक्स होते हैं। numpy में Hadamard, X और CNOT बनाएं, एक Bell स्टेट बनाएं, और देखें कि n क्यूबिट्स के लिए…
तीन गेट्स
| गेट | किस पर काम करता है | यह क्या करता है | मैट्रिक्स |
|---|---|---|---|
| X (NOT) | 1 क्यूबिट | |0⟩ और |1⟩ को आपस में बदल देता है, क्लासिकल NOT की तरह | [[0, 1], [1, 0]] |
| H (Hadamard) | 1 क्यूबिट | |0⟩ → (|0⟩ + |1⟩)/√2 और |1⟩ → (|0⟩ − |1⟩)/√2 | [[1, 1], [1, −1]] / √2 |
| CNOT | 2 क्यूबिट्स | यदि पहला (कंट्रोल) क्यूबिट 1 है, तो दूसरे (टारगेट) क्यूबिट को उलट देता है | 4 × 4, 10 और 11 के एम्प्लीट्यूड को आपस में बदल देता है |
दो क्यूबिट्स: क्रम और क्रोनेकर गुणनफल (Kronecker product)
np.kron) का उपयोग करके आइडेंटिटी मैट्रिक्स I के साथ मिलाते हैं। उदाहरण के लिए, np.kron(H, I) क्यूबिट 0 पर H लागू करता है और क्यूबिट 1 को वैसा ही छोड़ देता है।एक Bell स्टेट बनाएं
- 1
शुरुआत
दोनों क्यूबिट्स |0⟩ में: वेक्टर [1, 0, 0, 0]। - 2
क्यूबिट 0 पर Hadamard
अब (|00⟩ + |10⟩)/√2। - 3
CNOT, कंट्रोल 0, टारगेट 1
|10⟩ वाला हिस्सा |11⟩ बन जाता है। परिणाम: (|00⟩ + |11⟩)/√2।
import numpy as np
I = np.eye(2)
H = np.array([[1, 1], [1, -1]]) / np.sqrt(2)
CNOT = np.array([[1, 0, 0, 0],
[0, 1, 0, 0],
[0, 0, 0, 1],
[0, 0, 1, 0]])
state = np.array([1.0, 0, 0, 0]) # |00>
state = np.kron(H, I) @ state # H on qubit 0
state = CNOT @ state # entangle
for label, amp in zip(["00", "01", "10", "11"], state):
print(label, round(float(amp), 3), "prob", round(float(amp) ** 2, 3))बड़े सिम्युलेशन कठिन क्यों हैं
# Each amplitude stored as a complex number takes 16 bytes (complex128 in numpy).
for n in [10, 20, 30, 40, 50]:
amplitudes = 2 ** n
gigabytes = amplitudes * 16 / 1e9
print(f"{n:2d} qubits: {amplitudes:>20,d} amplitudes, about {gigabytes:,.3f} GB")np.kron(I, X) (क्यूबिट 1 पर X) जोड़ें। अब कौन से दो परिणाम दिखाई देते हैं?और देखें और पढ़ें
लैब
एक numpy सिम्युलेटर जो गेट मैट्रिक्स से एक Bell स्टेट और दूसरी एंटैंगल्ड स्टेट बनाता है, और उनकी प्रायिकताएं प्रिंट करता है।
समस्या
इसे ब्राउज़र में, या Python 3 और numpy के साथ चलाएं। क्यूबिट 0 बायां बिट है।
startपर क्यूबिट 0 पर H और फिर CNOT लागू करकेbellको (|00⟩ + |11⟩)/√2 के बराबर बनाएं। मैट्रिक्स का उपयोग करें, हाथ से टाइप किए गए उत्तरों का नहीं।- फिर से
startसे शुरू करके,otherको (|01⟩ + |10⟩)/√2 के बराबर बनाएं। संकेत: पहले एक क्यूबिट पर X लगाएं। showके साथ दोनों स्टेट्स की प्रायिकताएं प्रिंट करें।- एक वाक्य लिखें: 3-क्यूबिट वर्शन के लिए कितने एम्प्लीट्यूड की आवश्यकता होगी?
प्रैक्टिस लैब
कोड में बदलाव करें और इसे रन करें। Python आपके ब्राउज़र में चलता है — हमारे सर्वर पर कुछ नहीं भेजा जाता।
कोई आउटपुट नहीं। वैल्यूज़ देखने के लिए print(...) जोड़ें।
आपका काम तब पूरा होगा जब
कठिन सवाल
उत्तर देखने से पहले ख़ुद जवाब देने की कोशिश करें। अगर आप इनके जवाब दे सकते हैं, तो आप पाठ समझ गए हैं।
Q1सिम्युलेटर को 3 क्यूबिट्स तक बढ़ाएं और (|000⟩ + |111⟩)/√2 बनाएं। आपको किन गेट्स की आवश्यकता है?दिखाएं
np.kron(np.kron(H, I), I) के साथ क्यूबिट 0 पर H लागू करें। फिर np.kron(CNOT, I) के साथ क्यूबिट 0 से क्यूबिट 1 पर CNOT लागू करें, और np.kron(I, CNOT) के साथ क्यूबिट 1 से क्यूबिट 2 पर CNOT लागू करें। स्टेट वेक्टर में 8 एम्प्लीट्यूड होते हैं, और केवल 000 और 111 गैर-शून्य होते हैं। इसे अक्सर GHZ स्टेट कहा जाता है।
Q2हमारा सिम्युलेटर पूरे 4 × 4 या 8 × 8 मैट्रिक्स बनाता है। गंभीर सिम्युलेटर हर गेट के लिए 2ⁿ × 2ⁿ मैट्रिक्स बनाने से क्यों बचते हैं?दिखाएं
n क्यूबिट्स के एक पूरे मैट्रिक्स में 2ⁿ × 2ⁿ प्रविष्टियाँ (entries) होती हैं, जो खुद स्टेट वेक्टर से बहुत अधिक हैं। चूंकि प्रत्येक गेट केवल एक या दो क्यूबिट्स को छूता है, इसलिए एक सिम्युलेटर बड़ा मैट्रिक्स बनाए बिना ही स्टेट वेक्टर को सीधे, जोड़े दर जोड़े या एम्प्लीट्यूड के छोटे समूहों में अपडेट कर सकता है। फिर आवश्यक मेमोरी लगभग स्टेट वेक्टर के आकार जितनी होती है, जो अभी भी 2ⁿ ही है।
अक्सर पूछे जाने वाले सवाल
गेट्स मैट्रिक्स क्यों होते हैं?
क्वांटम मैकेनिक्स कहती है कि किसी बंद सिस्टम में (बिना मापे) आप जो बदलाव कर सकते हैं वे लीनियर होते हैं और कुल प्रायिकता (probability) को 1 के बराबर रखते हैं। लीनियर मैप मैट्रिक्स होते हैं, और "प्रायिकता 1 रखने" के नियम का मतलब है कि मैट्रिक्स यूनिटरी (unitary) हैं। X, H और CNOT सभी यूनिटरी हैं।
क्या मापना (measurement) भी एक मैट्रिक्स है?
उस तरह से नहीं। मापन कोई यूनिटरी गेट नहीं है: यह Born नियम के साथ एक रैंडम परिणाम चुनता है और फिर स्टेट उस परिणाम से मेल खाने के लिए बदल (jump कर) जाती है। हमारे सिम्युलेटर में हम प्रायिकताओं में से सैंपलिंग करके ऐसा करते हैं।
क्या असली क्वांटम प्रोग्राम इसी तरह लिखे जाते हैं?
लोग आमतौर पर एक क्वांटम प्रोग्रामिंग लाइब्रेरी का उपयोग करते हैं जो उनके लिए सर्किट बनाती है, और उन्हें सिम्युलेटर या असली हार्डवेयर पर भेज सकती है। अंदरूनी तौर पर, एक सिम्युलेटर वही करता है जो आपने यहाँ किया। इसे एक बार खुद लिखने से उन लाइब्रेरीज़ को समझना बहुत आसान हो जाता है।
यदि सिम्युलेशन इतना कठिन है, तो हम कैसे जांचते हैं कि बड़े क्वांटम कंप्यूटर सही हैं?
यह एक वास्तविक चुनौती है। शोधकर्ता उन छोटे हिस्सों की जांच करते हैं जिनका सिम्युलेशन किया जा सकता है, ऐसे विशेष सर्किट्स का उपयोग करते हैं जिनके उत्तर ज्ञात हैं, और ऐसी समस्याओं का उपयोग करते हैं जहाँ प्रस्तावित उत्तर को सत्यापित करना आसान होता है, जैसे कि यह जांचना कि दो संख्याओं को गुणा करने पर तीसरी संख्या मिलती है या नहीं।
पाठ का टेस्ट
5 सवाल। पास होने और इस पाठ को पूरा करने के लिए 3 सही होने चाहिए (60%)।