ToolDingo

Προσομοιωτής Κβαντικού Υπολογιστή

Γράψτε ένα μικρό κβαντικό κύκλωμα σε JavaScript, προσομοιώστε το απευθείας στον περιηγητή σας και δείτε το διάγραμμα του κυκλώματος, τις πιθανότητες και το διάνυσμα κατάστασης. Ή περιγράψτε έναν υπολογισμό σε υψηλότερο επίπεδο (π.χ. μια πρόσθεση) και παρακολουθήστε τον να μετατρέπεται αυτόματα σε ένα πραγματικό αναστρέψιμο κβαντικό κύκλωμα.

Μοντέλο Θορύβου

Οι πραγματικοί κβαντικοί υπολογιστές δεν υπολογίζουν τέλεια: τα qubits είναι εξαιρετικά ευαίσθητα και χάνουν μέρος της πληροφορίας τους (αποσυμφωνία) μέσω κάθε ανεπιθύμητης αλληλεπίδρασης με το περιβάλλον τους – θερμότητα, ηλεκτρομαγνητικά πεδία, γειτονικά qubits. Οι λειτουργίες πύλης δεν είναι ποτέ τέλεια ακριβείς, και ακόμη και η τελική ανάγνωση μπορεί να πάει στραβά. Αυτός ο προσομοιωτής υπολογίζει ιδανικά από προεπιλογή· εδώ μπορείτε να ενεργοποιήσετε τυπικά μοντέλα σφαλμάτων και να παρατηρήσετε άμεσα την επίδρασή τους στα αποτελέσματα.

Ισχύει για κάθε προσομοίωση σε αυτή τη σελίδα – για εκτελέσεις υψηλού επιπέδου και κυκλώματα που έχουν γραφτεί χειροκίνητα.
%
Ανά πύλη και εμπλεκόμενο qubit, ή ανά bit ανάγνωσης για το μοντέλο ανάγνωσης. Επιλέξτε μια τιμή για το σενάριο που θέλετε να εξερευνήσετε.

Κώδικας Προγράμματος

Περιγράψτε έναν υπολογισμό με τα quantum.add, quantum.subtract, quantum.multiply, quantum.divide ή quantum.random. Το Ctrl+Enter ξεκινά την προσομοίωση. Πλήρης τεκμηρίωση μέσω του κουμπιού “Τεκμηρίωση”.

Τεκμηρίωση

Περιγράψτε έναν υπολογισμό στον επεξεργαστή – ένα πραγματικό κβαντικό κύκλωμα δημιουργείται αυτόματα από αυτόν και προσομοιώνεται. Μέγιστο μήκος 4000 χαρακτήρες. Ctrl+Enter ξεκινά την προσομοίωση.

ΤύποςΠεριγραφήΌρια
quantum.add({ a, b })Πρόσθεση δύο αριθμώνΑποτέλεσμα μέγ. 4 bits (0–15)
quantum.subtract({ a, b })Αφαίρεσηa ≥ b, μέγ. 4 bits
quantum.multiply({ a, b })ΠολλαπλασιασμόςΠαράγοντες 0–7 (3 bits)
quantum.divide({ a, b })Διαίρεση (πρόσθεση πηλίκου και υπολοίπου)b ≥ 1; πολύ αυστηρό: bits(a)+bits(b)+bits(a÷b)+1 ≤ 10
quantum.random({ bits })Αληθινός τυχαίος αριθμός κβαντικού υπολογιστήbits 1–10

Επιλέξτε ένα παράδειγμα

Κώδικας Κυκλώματος

Μέγιστο 4000 χαρακτήρες. Διαθέσιμες μέθοδοι QuantumCircuit: x, y, z, h, s, sdg, t, tdg, rx, ry, rz, cnot, cz, ccnot (ψευδώνυμο: toffoli), swap, measureAll, run. Ctrl+Enter ξεκινά την προσομοίωση.

Επιλέξτε ένα παράδειγμα

Βασικά: Πώς λειτουργεί;

Σχηματική διάταξη κβαντικού υπολογιστή: ένας κλασικός υπολογιστής κατευθύνει πολλές δέσμες λέιζερ πάνω σε έναν οπτικό πάγκο σε ένα qubit μέσα σε ένα κενό θαλάμου.
Από τον κλασικό υπολογιστή μέσω λέιζερ και οπτικής στο φυσικό qubit.

Από το πρόγραμμα στο φυσικό qubit

Ένας πραγματικός κβαντικός υπολογιστής είναι κάτι περισσότερο από ένα τσιπ. Η κλασική ηλεκτρονική ελέγχου μεταφράζει το κύκλωμα σε ακριβείς παλμούς. Στο παράδειγμα που φαίνεται, η ψύξη, η επανατροφοδότηση, το qubit και οι λέιζερ ανάγνωσης διαμορφώνουν αυτά τα σήματα σε έναν οπτικό πάγκο και τα κατευθύνουν σε ένα θωρακισμένο κενό θαλάμου. Εκεί αλλάζουν και μετρούν την κατάσταση του qubit· το αποτέλεσμα της μέτρησης επιστρέφει στη συνέχεια στον κλασικό υπολογιστή.

Qubit & βασικές καταστάσεις

Ένα κλασικό bit είναι είτε 0 είτε 1. Ένα qubit μπορεί επιπλέον να υπάρχει σε υπέρθεση των δύο βασικών καταστάσεων |0⟩ και |1⟩. Με αρκετά qubits, όλες οι βασικές καταστάσεις γράφονται ως συμβολοσειρά bit, π.χ. |10⟩ για 2 qubits – όπου q0 Σε αυτόν τον προσομοιωτή, το πιο σημαντικό (αριστερό) bit είναι πάντα το πρώτο.

Υπέρθεση

Ένα qubit σε υπέρθεση φέρει ταυτόχρονα συστατικά από διάφορες βασικές καταστάσεις. Αυτά τα συστατικά περιγράφονται ως μιγαδικές αμπλιτούδες· το τετράγωνο μέτρο μιας αμπλιτούδας δίνει την πιθανότητα να ληφθεί η αντίστοιχη κατάσταση σε μια μέτρηση.

Η σφαίρα Bloch

Η κατάσταση ενός μόνο qubit μπορεί να απεικονιστεί ως ένα βέλος σε μια σφαίρα: ο βόρειος πόλος αντιπροσωπεύει |0⟩ο νότιος πόλος |1⟩και όλα τα σημεία στον ίσο είναι εξίσου σταθμισμένες υπερθέσεις – η φάση καθορίζει την κατεύθυνση κατά μήκος του ίσο όπου δείχνει το βέλος. Οι πύλες περιστροφής rx, ryκαι rz περιστρέφουν το βέλος γύρω από τον αντίστοιχο άξονα, οι πύλες φάσης όπως S και T περιστρέφουν το βέλος γύρω από τον άξονα Z. Με συνυφασισμένα qubits, το βέλος συρρικνώνεται προς το κέντρο της σφαίρας: το μεμονωμένο qubit δεν έχει πλέον μια καθαρή κατάσταση από μόνο του – έτσι η εμπλοκή γίνεται κυριολεκτικά ορατή.

Μέτρηση & λήψεις

measureAll() μετρά όλα τα qubits ταυτόχρονα και τερματίζει το κύκλωμα. Επειδή μια μόνο μέτρηση αποδίδει μόνο ένα τυχαίο αποτέλεσμα, το κύκλωμα μετράται εννοιολογικά «λήψεις» φορές με run({ shots })ώστε η κατανομή πιθανοτήτων να εμφανίζεται ως ιστόγραμμα. Οι ακριβείς πιθανότητες υπολογίζονται επιπλέον άμεσα από το διάνυσμα κατάστασης, ανεξάρτητα από την τυχαιότητα των λήψεων.

Πύλη Hadamard

Η πύλη Hadamard h(q) μεταφέρει ένα qubit από μια ορισμένη κατάσταση (|0⟩ ή |1⟩) σε μια εξίσου σταθμισμένη υπέρθεση |0⟩ και |1⟩ —έτσι περίπου 50% / 50% όταν μετρηθεί.

Πύλες φάσης: S και T

Οι πύλες s(q) και t(q) δεν αλλάζουν τις πιθανότητες μέτρησης ενός μόνο qubit· αλλάζουν μόνο τη φάση της |1⟩ αμπλιτούδας – S κατά 90°, T κατά 45°. Εμφανίζουν την επίδρασή τους μόνο σε συνδυασμό με υπέρθεση: μεταξύ δύο πυλών Hadamard, η φάση αποφασίζει πώς συνδυάζονται ή αλληλοεξουδετερώνονται οι αμπλιτούδες (παρέμβαση). Οι παραλλαγές με τον κάτω παύλα sdg(q) και tdg(q) περιστρέφουν ακριβώς προς την αντίθετη κατεύθυνση και αναιρούν τις S και T. Ο κανόνας είναι: δύο T κάνουν ένα S, δύο S κάνουν ένα Z.

CNOT & συνθήκη εμπλοκής

Η πύλη CNOT cnot(control, target) αντιστρέφει το qubit στόχου ακριβώς όταν το qubit ελέγχου βρίσκεται |1⟩. Εάν το qubit ελέγχου βρίσκεται σε υπέρθεση, αυτό μπορεί να δημιουργήσει εμπλοκή – τα δύο qubits δεν μπορούν πλέον να περιγραφούν ανεξάρτητα το ένα από το άλλο, όπως στο παράδειγμα της κατάστασης Bell. Εάν το qubit ελέγχου βρίσκεται σε μια ορισμένη κατάσταση βάσης, η CNOT εκτελεί μόνο μια συνθηματική αναστροφή bit χωρίς εμπλοκή. Επομένως, δεν δημιουργεί πάντα η CNOT εμπλοκή.

CZ: το συμμετρικό ανάλογο της CNOT

Η πύλη CZ cz(a, b) αντιστρέφει το πρόσημο της συνάρτησης ακριβώς όταν και τα δύο qubits είναι |1⟩. Σε αντίθεση με την CNOT, δεν υπάρχει qubit ελέγχου ούτε qubit στόχου – η πύλη δρα ταυτόσημα και στα δύο qubits, για αυτό και απεικονίζεται ως δύο συνδεδεμένα σημεία στο διάγραμμα. Η CZ και η CNOT μπορούν να μετατραπούν η μία στην άλλη: μια CNOT είναι μια CZ του qubit στόχου της οποίας περνάει από μια πύλη Hadamard πριν και μετά. Η CZ είναι ένα κεντρικό δομικό στοιχείο πολλών αλγορίθμων, όπως η αναζήτηση Grover.

Κατάσταση GHZ: εμπλοκή ως τριάδα

Η κατάσταση GHZ (ονομαζόμενη προς τιμήν των Greenberger, Horne και Zeilinger) επεκτείνει την αρχή της κατάστασης Bell σε τρία qubits: μια πύλη Hadamard συν δύο CNOTs εμπλέκουν και τα τρία ώστε η μέτρηση να αποδίδει |000⟩ ή |111⟩ – ποτέ μεικτές αλυσίδες bit. Κανένα qubit δεν έχει πλέον δική του κατάσταση· η πληροφορία βρίσκεται αποκλειστικά στην κοινή συσχέτιση.

Αλγόριθμος Deutsch: το μικρότερο κβαντικό πλεονέκτημα

Ο αλγόριθμος Deutsch απαντά, με μία μόνο αξιολόγηση μιας άγνωστης οράκου, σε μια ερώτηση για την οποία ένας κλασικός υπολογιστής χρειάζεται δύο αξιολογήσεις: είναι η συνάρτηση σταθερή ή ισορροπημένη; Το κόλπο είναι να στείλετε την είσοδο μέσω του οράκου σε υπέρθεση – χάρη στη συμβολή, η απάντηση μετά είναι αδιαμφισβήτητα κωδικοποιημένη στο qubit εισόδου. Η αρχή πίσω από αυτό (kickback φάσης) βρίσκεται στον πυρήνα σχεδόν όλων των κβαντικών αλγορίθμων.

Αναζήτηση Grover: ενίσχυση συνόλων

Η αναζήτηση Grover βρίσκει μια επισημασμένη εγγραφή σε ένα μη ταξινομημένο σύνολο με σημαντικά λιγότερες ερωτήσεις από ό,τι απαιτείται κλασικά. Ένας οράκος επισημαίνει την αναζητούμενη κατάσταση με αναστροφή φάσης (εδώ μέσω μιας πύλης CZ), στη συνέχεια ο τελεστής διάδοσης ενισχύει το επισημασμένο σύνολο σε βάρος όλων των άλλων. Με 2 qubits, μία μόνο επανάληψη είναι αρκετή για να μετρηθεί το hit με 100% πιθανότητα.

Αναστρέψιμη πρόσθεση: από quantum.add() σε κύκλωμα

Ο επεξεργαστής κώδικα παραπάνω μεταφράζεται quantum.add({ a, b }) σε ένα κύκλωμα πυλών X, CNOT και CCNOT (Toffoli) που αναπαράγει την κλασική πρόσθεση με έναν καθαρά αναστρέψιμο τρόπο: κάθε πύλη μπορεί να αναιρεθεί ακριβώς, επειδή δεν απορρίπτεται καμία πληροφορία. Μια πύλη CCNOT (ccnot(c1, c2, target)) αντιστρέφει το qubit στόχου μόνο όταν και τα δύο qubits ελέγχου είναι |1⟩ – αυτό είναι αρκετό ως δομικό στοιχείο για να ανακατασκευαστεί οποιοδήποτε κλασικό κύκλωμα αναστρέψιμα, συμπεριλαμβανομένου ενός πλήρους πρόσθετου με μεταφορά. Οι είσοδοι A και B αρχικοποιούνται πρώτα ως ορισμένες καταστάσεις βάσης (χωρίς υπέρθεση) χρησιμοποιώντας πύλες X. Επειδή ολόκληρο το κύκλωμα περνάει επομένως μόνο από ορισμένες καταστάσεις αντί για υπέρθεσεις, η μέτρηση στο τέλος αποδίδει ακριβώς ένα αποτέλεσμα με 100% πιθανότητα – το κλασικά σωστό άθροισμα. Γι' αυτό quantum.add() παράγει ένα ντετερμινιστικό αποτέλεσμα παρά τη κβαντική προσομοίωση, αντί για πολλές πιθανές καταστάσεις με πιθανότητες κάτω από 100%.

Αφαίρεση: πρόσθεση αντίστροφα

Επειδή κάθε πύλη ενός κβαντικού κυκλώματος είναι ακριβώς αντιστρέψιμη, το πλήρες κύκλωμα πρόσθεσης μπορεί να εκτελεστεί προς τα πίσω – και η πρόσθεση γίνεται αφαίρεση: quantum.subtract({ a, b }) χρησιμοποιεί ακριβώς τις πύλες του πρόσθετου αντίστροφα και έτσι υπολογίζει το α − β. Αυτό δεν είναι ένα τέχνασμα αλλά η βασική αρχή του αντιστρέψιμου υπολογισμού: κανένα βήμα υπολογισμού δεν καταστρέφει πληροφορίες, κάθε βήμα μπορεί να αναιρεθεί. Σε αυτήν την έκδοση, απαιτείται α ≥ β ώστε να μην προκύψει αρνητικό αποτέλεσμα.

Πολλαπλασιασμός: quantum.multiply()

Ο πολλαπλασιασμός εδώ προκύπτει ακριβώς από τα ίδια αντιστρέψιμα δομικά στοιχεία όπως και η πρόσθεση: ακολουθώντας τη μέθοδο του σχολικού βιβλίου, ο παράγοντας α προστίθεται πολλές φορές σε μετατοπισμένες θέσεις – ταιριάζοντας με τα σετ bits του παράγοντα β. Κάθε μερική πρόσθεση είναι το ίδιο αντιστρέψιμο ripple-carry adder· το carry ρέει στο επόμενο bit του γινομένου κάθε φορά. Επειδή το μητρώο αποτελεσμάτων αυξάνεται με το γινόμενο, οι παράγοντες περιορίζονται στα 3 bits (0–7) εδώ – μόνο τότε ταιριάζουν ο παράγοντας, το γινόμενο και το qubit carry μαζί στα 10 qubits αυτού του προσομοιωτή.

Διαίρεση: quantum.divide()

Η διαίρεση επίσης χρησιμοποιεί μόνο αντιστρέψιμα δομικά στοιχεία: quantum.divide({ a, b }) εκτελεί διαίρεση με δαύριση, κατασκευασμένη από μετατοπισμένες, αντιστρέψιμες αφαιρέσεις του διαιρέτη από το μητρώο υπολοίπου· το αποτέλεσμα είναι ο διαιρέτης. και το υπόλοιπο (a = quotient · b + remainder). Επειδή το μέρισμα, ο διαιρέτης, ο διαιρέτης και ένα qubit borrow πρέπει όλα να χωρέσουν στα 10 qubits μαζί, η διαίρεση είναι η πιο αυστηρά περιορισμένη λειτουργία: bits(a) + bits(b) + bits(a÷b) + 1 ≤ 10 πρέπει να ισχύει, και ο διαιρέτης b πρέπει να είναι ≥ 1 (χωρίς διαίρεση με το μηδέν). Εάν μια είσοδος δεν χωράει στον προϋπολογισμό, ο επεξεργαστής αναφέρει το πρόβλημα αντί να υπολογίσει.

Αληθινή τυχαιότητα: quantum.random()

Οι κλασικοί υπολογιστές δεν μπορούν να δημιουργήσουν αληθινή τυχαιότητα – οι «τυχαίοι αριθμοί» τους προέρχονται από ντετερμινιστικούς αλγορίθμους (ψευδο-τυχαία). Ένας κβαντικός υπολογιστής μπορεί: quantum.random({ bits }) θέτει κάθε bit σε μια υπέρθεση 50/50 χρησιμοποιώντας πύλη Hadamard, και μόνο η μέτρηση αποφασίζει – θεμελιωδώς απρόβλεπτα – ποια τιμή βγαίνει. Σ πραγματικό κβαντικό υλικό αυτό είναι φυσική αληθινή τυχαιότητα· αυτός ο προσομοιωτής την μιμείται με την ψευδο-τυχαία του περιηγητή σας.

Προσομοιωτής έναντι πραγματικού κβαντικού υλικού

Αυτός ο προσομοιωτής υπολογίζει την κατάσταση ακριβώς χρησιμοποιώντας κλασική αριθμητική κινητής υποδιαστολής στον περιηγητή σας – αυτό λειτουργεί μόνο επειδή εξετάζονται αποκλειστικά πολύ μικρά κυκλώματα με έως και 10 qubits. Οι πραγματικοί κβαντικοί υπολογιστές χρησιμοποιούν φυσικά qubits, είναι επιρρεπείς σε σφάλματα (αποσυμφωνία, θόρυβος) και το πλεονέκτημά τους εμφανίζεται μόνο με πολύ μεγαλύτερα κυκλώματα που δεν μπορούν πλέον να προσομοιωθούν κλασικά στην πράξη. Αυτό το εργαλείο είναι ένα εργαλείο εκμάθησης, όχι ένας πραγματικός κβαντικός επεξεργαστής.

Συχνές ερωτήσεις

Είναι αυτός ένας πραγματικός κβαντικός υπολογιστής;
Όχι. Αυτό το εργαλείο είναι ένας κλασικός προσομοιωτής διανυσμάτων κατάστασης που υπολογίζει τα μαθηματικά ενός μικρού κβαντικού κυκλώματος (έως και 10 qubits) με ακρίβεια, χρησιμοποιώντας αριθμητική κινητής υποδιαστολής στον περιηγητή σας. Το πραγματικό κβαντικό υλικό χρησιμοποιεί φυσικά qubits και λειτουργεί θεμελιωδώς διαφορετικά.
Ποιο qubit είναι το q0 σε μια συμβολοσειρά bit όπως η «10»;
Το q0 είναι πάντα το πιο σημαντικό (αριστερό) bit. Με 2 qubits, το x(0) δημιουργεί την κατάσταση |10⟩, όχι |01⟩.
Τι σημαίνει η λέξη «shots»;
Τα shots είναι ο αριθμός των επαναλαμβανόμενων προσομοιωμένων μετρήσεων (1–10.000). Κάθε shot τραβήγει τυχαία ένα αποτέλεσμα μέτρησης σύμφωνα με την ακριβή κατανομή πιθανότητας του διανύσματος κατάστασης. Οι ακριβείς πιθανότητες αυτές δεν εξαρτώνται από την τύχη και εμφανίζονται χωριστά.
Γιατί ορισμένα παραδείγματα εμφανίζουν ένα μήνυμα σφάλματος;
Το πεδίο MVP επιτρέπει ακριβώς ένα κύκλωμα με ακριβώς μία κλήση run() μετά το measureAll(). Άκυρες ενδείξεις qubit, πύλες μετά το measureAll(), μη έγκυρες γωνίες ή αριθμούς shots, και συντακτικά λάθη στον κώδικα απορρίπτονται με ένα κατανοητό μήνυμα σφάλματος.
Τι κάνουν οι πύλες Hadamard, X και CNOT;
Το X ανταλλάσσει το |0⟩ και το |1⟩. Το Hadamard μετατρέπει μια βασική κατάσταση σε μια εξίσου σταθμισμένη υπέρθεση. Το CNOT αντιστρέφει τον στόχο του μόνο όταν ο έλεγχος είναι |1⟩ και μπορεί να δημιουργήσει εμπλοκή όταν συνδυαστεί με υπέρθεση.
Πώς δημιουργείται η εμπλοκή;
Ένα παράδειγμα εφαρμόζει Hadamard στο πρώτο qubit και στη συνέχεια CNOT σε ένα δεύτερο. Τα qubits δεν μπορούν πλέον να περιγραφούν ανεξάρτητα, και η μέτρηση παράγει συσχετισμένα αποτελέσματα όπως το |00⟩ ή το |11⟩.