क्वांटम कंप्यूटर सिम्युलेटर
JavaScript में छोटा क्वांटम सर्किट लिखें, उसे सीधे ब्राउज़र में सिम्युलेट करें और सर्किट आरेख, प्रायिकताएँ तथा स्टेट वेक्टर देखें। या जोड़ जैसी गणना का उच्च-स्तरीय वर्णन देकर उसे वास्तविक उत्क्रमणीय क्वांटम सर्किट में बदलते देखें।
Noise model
वास्तविक क्वांटम कंप्यूटर त्रुटिरहित गणना नहीं करते। पर्यावरण से अनचाही क्रिया के कारण क्यूबिट जानकारी खोते हैं, गेट कभी पूरी तरह सटीक नहीं होते और readout भी गलत हो सकता है। यह simulator सामान्यतः आदर्श गणना करता है; यहाँ सामान्य त्रुटि मॉडल चालू करके उनका प्रभाव देखें।
quantum.add, quantum.subtract, quantum.multiply, quantum.divide या quantum.random से गणना लिखें। Ctrl+Enter simulation शुरू करता है। पूरा विवरण “दस्तावेज़” बटन में है।
यह code ऊपर के program से स्वतः बना और सीधे सिम्युलेट हुआ। आप इसे यहाँ बदलकर फिर चला सकते हैं।
बना सर्किट हाथ से बदला गया है, इसलिए आरेख में register grouping छिपी है। ऊपर का program फिर चलाने पर बदलाव मिटेंगे।
अधिकतम 4000 अक्षर। उपलब्ध QuantumCircuit विधियाँ: x, y, z, h, s, sdg, t, tdg, rx, ry, rz, cnot, cz, ccnot (alias: toffoli), swap, measureAll, run। Ctrl+Enter simulation शुरू करता है।
सर्किट आरेख
चरण दृश्य चुने गेट के ठीक बाद की प्रायिकताएँ और state vector दिखाता है। नीचे के shot परिणाम हमेशा पूरे सर्किट पर लागू हैं।
OpenQASM 2.0
OpenQASM 2.0 क्वांटम सर्किट का व्यापक interchange format है और Qiskit इसे पढ़ता है। यहाँ q0 सबसे महत्वपूर्ण बायाँ bit है, जबकि Qiskit q[0] को सबसे कम महत्वपूर्ण मानता है; इसलिए measured bit string वहाँ उलटी दिख सकती है।
प्रायिकताएँ
हर संभावित bit string को मापने की संभावना, state vector से ठीक-ठीक निकाली गई। q0 सबसे बायाँ महत्वपूर्ण bit है।
Bloch sphere
हर क्यूबिट की अवस्था Bloch sphere में तीर से दिखती है: उत्तर ध्रुव |0⟩, दक्षिण ध्रुव |1⟩ और भूमध्य रेखा समान-भार सुपरपोज़िशन है। छोटा तीर उलझी या मिश्रित अवस्था दिखाता है; सक्रिय noise में औसत trajectory से तीर भीतर सिकुड़ता है।
Shot परिणाम
सिम्युलेटेड मापनों में हर bit string वास्तव में कितनी बार आई। कई परिणाम होने पर संख्या सटीक प्रायिकता के आसपास यादृच्छिक बदलती है।
State vector
प्रायिकताओं के पीछे complex amplitude: amplitude के परिमाण का वर्ग (real² + imaginary²) उसकी अवस्था की प्रायिकता देता है।
| अवस्था | वास्तविक भाग | काल्पनिक भाग |
|---|
मूल बातें: यह कैसे काम करता है?
Program से भौतिक क्यूबिट तक
वास्तविक क्वांटम कंप्यूटर केवल chip नहीं है। शास्त्रीय control electronics सर्किट को सटीक pulse में बदलते हैं। Cooling, repump, qubit और readout laser optical table पर signal बनाकर shielded vacuum chamber में भेजते हैं, जहाँ क्यूबिट अवस्था बदलती और मापी जाती है। परिणाम फिर शास्त्रीय कंप्यूटर लौटता है।
क्यूबिट और basis अवस्थाएँ
शास्त्रीय bit 0 या 1 होता है। क्यूबिट इन दोनों basis अवस्थाओं के सुपरपोज़िशन में भी रह सकता है |0⟩ और |1⟩। कई क्यूबिट में सभी basis अवस्थाएँ bit string के रूप में लिखी जाती हैं, जैसे |10⟩ 2 क्यूबिट के लिए—जहाँ q0 इस simulator में हमेशा सबसे महत्वपूर्ण बायाँ bit है।
सुपरपोज़िशन
सुपरपोज़िशन का क्यूबिट कई basis अवस्थाओं के घटक एक साथ रखता है। Complex amplitude उन्हें वर्णित करती है और उसके परिमाण का वर्ग मापन में संबंधित अवस्था की प्रायिकता देता है।
Bloch sphere
एक क्यूबिट की अवस्था sphere में तीर की तरह दिखाई जा सकती है: उत्तर ध्रुव |0⟩, दक्षिण ध्रुव |1⟩, और भूमध्य रेखा के सभी बिंदु समान-भार सुपरपोज़िशन हैं। Phase तीर की दिशा तय करता है। Rotation gate rx, ryऔर rz अपने अक्षों के चारों ओर तीर घुमाते हैं; S और T जैसे phase gate Z अक्ष पर घुमाते हैं। उलझाव में तीर केंद्र की ओर सिकुड़ता है, क्योंकि अकेले क्यूबिट की शुद्ध अवस्था नहीं रहती।
मापन और shots
measureAll() सभी क्यूबिट को एक साथ मापकर सर्किट समाप्त करता है। एक मापन केवल एक यादृच्छिक परिणाम देता है, इसलिए सर्किट को वैचारिक रूप से इतने “shots” मापा जाता है: run({ shots })। इससे प्रायिकता वितरण histogram में दिखता है। सटीक प्रायिकताएँ shots की यादृच्छिकता से स्वतंत्र state vector से निकाली जाती हैं।
Hadamard गेट
Hadamard गेट h(q) क्यूबिट को निश्चित अवस्था (|0⟩ या |1⟩) से समान-भार सुपरपोज़िशन में ले जाता है: |0⟩ और |1⟩ —इसलिए मापन में लगभग 50% / 50%।
Phase gate: S और T
गेट s(q) और t(q) एक क्यूबिट की मापन प्रायिकता नहीं बदलते; वे केवल इसकी phase घुमाते हैं: |1⟩ amplitude—S से 90°, T से 45°। सुपरपोज़िशन के साथ ही व्यतिकरण में प्रभाव दिखता है। Dagger रूप sdg(q) और tdg(q) उलटी दिशा में घुमाकर S और T का प्रभाव मिटाते हैं। नियम: दो T से S और दो S से Z बनता है।
CNOT और सशर्त उलझाव
CNOT गेट cnot(control, target) control क्यूबिट की अवस्था यह हो तभी target पलटता है: |1⟩। Control पहले सुपरपोज़िशन में हो तो उलझाव बन सकता है; निश्चित basis अवस्था में केवल सशर्त bit flip होता है। हर CNOT स्वतः उलझाव नहीं बनाता।
CZ: CNOT का सममित संबंधी
CZ गेट cz(a, b) दोनों क्यूबिट इस अवस्था में हों तभी amplitude का चिह्न उलटता है: |1⟩। CNOT के विपरीत control और target अलग नहीं होते; इसलिए आरेख में दो जुड़े बिंदु हैं। Target के आगे-पीछे Hadamard लगाकर CZ को CNOT में बदला जा सकता है। CZ, Grover खोज जैसे एल्गोरिदम का मुख्य building block है।
GHZ अवस्था: तीन क्यूबिट का उलझाव
Greenberger, Horne और Zeilinger के नाम वाली GHZ अवस्था Bell सिद्धांत को तीन क्यूबिट तक बढ़ाती है। एक Hadamard और दो CNOT के बाद मापन केवल यह देता है: |000⟩ या |111⟩ —मिश्रित bit string कभी नहीं। किसी एक क्यूबिट की अपनी अवस्था नहीं रहती; जानकारी साझा सहसंबंध में होती है।
Deutsch एल्गोरिदम: सबसे छोटा क्वांटम लाभ
Deutsch एल्गोरिदम अज्ञात oracle का एक मूल्यांकन करके बताता है कि फलन स्थिर है या संतुलित, जबकि शास्त्रीय कंप्यूटर को दो मूल्यांकन चाहिए। Input को सुपरपोज़िशन में oracle से गुजारकर व्यतिकरण उत्तर को input क्यूबिट में स्पष्ट कर देता है।
Grover खोज: amplitude बढ़ाना
Grover खोज unsorted set में चिह्नित item कम query में खोजती है। Oracle phase flip से अवस्था चिह्नित करता है और diffusion operator अन्य amplitudes की कीमत पर उसे बढ़ाता है। 2 क्यूबिट में एक iteration से hit 100% मापा जाता है।
उत्क्रमणीय जोड़: quantum.add() से सर्किट
ऊपर का program code इसे बदलता है: quantum.add({ a, b }) X, CNOT और CCNOT (Toffoli) सर्किट में, जो जानकारी नष्ट किए बिना शास्त्रीय जोड़ को उत्क्रमणीय रूप से करता है। CCNOT गेट (ccnot(c1, c2, target)) target को तभी पलटता है जब दोनों control क्यूबिट यह हों: |1⟩ । इससे carry वाला पूर्ण adder बनाया जा सकता है। Input A और B, X गेट से निश्चित basis अवस्थाओं में शुरू होते हैं। सर्किट केवल निश्चित अवस्थाओं से गुजरता है, इसलिए अंत में 100% संभावना वाला सही योग मिलता है। इसी कारण quantum.add() क्वांटम simulation के बावजूद कई संभावित अवस्थाओं के बजाय निश्चित परिणाम देता है।
घटाव: उलटे क्रम में जोड़
हर क्वांटम गेट ठीक-ठीक उलट सकता है, इसलिए पूरा adder पीछे चलाकर जोड़ को घटाव बनाया जा सकता है: quantum.subtract({ a, b }) adder के गेट उलटे क्रम में उपयोग करके a − b निकालता है। यह उत्क्रमणीय गणना का मूल सिद्धांत है: जानकारी नष्ट नहीं होती और हर चरण उलट सकता है। इस संस्करण में ऋणात्मक परिणाम रोकने के लिए a ≥ b चाहिए।
गुणा: quantum.multiply()
गुणा भी जोड़ के उत्क्रमणीय building block उपयोग करता है। स्कूली विधि में factor b के सेट bit के अनुसार factor a को shift करके कई बार जोड़ा जाता है। Factor, product और carry को 10 क्यूबिट में रखने के लिए factor 3 bit (0–7) तक सीमित हैं।
भाग: quantum.divide()
भाग भी केवल उत्क्रमणीय building block उपयोग करता है: quantum.divide({ a, b }) divisor को remainder register से shift किए उत्क्रमणीय घटावों द्वारा लंबा भाग करता है; परिणाम भागफल है और शेष (a = quotient · b + remainder)। Dividend, divisor, quotient और borrow क्यूबिट साथ में 10 क्यूबिट में आने चाहिए, इसलिए भाग पर सबसे कड़ी सीमा है: bits(a) + bits(b) + bits(a÷b) + 1 ≤ 10 सत्य होना चाहिए और divisor b ≥ 1 होना चाहिए। Input बजट में न आए तो editor गणना के बजाय सूचना देता है।
वास्तविक यादृच्छिकता: quantum.random()
शास्त्रीय कंप्यूटर की “यादृच्छिक” संख्याएँ नियत एल्गोरिदम से बनी छद्म-यादृच्छिकता हैं। क्वांटम कंप्यूटर यह कर सकता है: quantum.random({ bits }) Hadamard गेट से हर bit को 50/50 सुपरपोज़िशन में रखता है और मूलतः अनिश्चित मापन ही परिणाम तय करता है। वास्तविक हार्डवेयर पर यह भौतिक यादृच्छिकता है; simulator ब्राउज़र की छद्म-यादृच्छिकता से इसकी नकल करता है।
Simulator बनाम वास्तविक क्वांटम हार्डवेयर
यह simulator ब्राउज़र में शास्त्रीय floating-point arithmetic से अवस्था की सटीक गणना करता है; अधिकतम 10 क्यूबिट के छोटे सर्किट के कारण यह संभव है। वास्तविक क्वांटम कंप्यूटर भौतिक और त्रुटि-प्रवण क्यूबिट उपयोग करते हैं। यह सीखने का साधन है, वास्तविक क्वांटम processor नहीं।