Simulador de ordenador cuántico
Escribe un pequeño circuito cuántico en JavaScript, simulalo directamente en tu navegador y mira el diagrama de circuito, las probabilidades y el vector de estado. O describe un cálculo a un alto nivel (por ejemplo, una adición) y observa cómo se convierte automáticamente en un circuito cuántico reversible real.
Modelo de ruido
Los ordenadores cuánticos reales no computan perfectamente: los qubits son extremadamente sensibles y pierden parte de su información (decoherencia) a través de cada interacción no deseada con su entorno – calor, campos electromagnéticos, qubits vecinos. Las operaciones de la puerta tampoco son perfectamente precisas, e incluso la lectura final puede salir mal. Este simulador calcula idealmente por defecto; aquí puede habilitar modelos de error típicos y observar su efecto directamente en los resultados.
Describe un cálculo con quantum.add, quantum.subtract, quantum.multiply, quantum.divide o quantum.random. Ctrl+Enter inicia la simulación. Consulta la documentación completa mediante el botón «Documentación».
Este código fue generado automáticamente desde el código del programa de arriba y simulado directamente. Puede editarlo aquí manualmente y ejecutarlo de nuevo.
El circuito generado se editó manualmente. Por lo tanto, se oculta el agrupamiento del registro en el diagrama; ejecutar el código del programa de arriba sobrescribirá estos cambios.
Máximo 4000 caracteres. Disponible Métodos QuantumCircuit: x, y, z, h, s, sdg, t, tdg, rx, ry, rz, cnot, ccnot (alias: toffoli), swap, measureAll, run. Ctrl+Enter inicia la simulación.
Diagrama de circuito
La vista escalonada muestra probabilidades y el vector de estado exactamente después de la puerta seleccionada. Los resultados de la toma abajo siempre se aplican al circuito completo.
OpenQASM 2.0
OpenQASM 2.0 es el formato de intercambio ampliamente utilizado para circuitos cuánticos y es leído por Qiskit, entre otros. Nota sobre el orden de bits: este simulador lee q0 como el bit más significativo (izquierda), mientras que Qiskit lee q[0] como el menos significativo – las cadenas de bits medidas por lo tanto aparecen reflejadas allí.
Probabilidades
La probabilidad de medir cada cadena de bits posible, calculada exactamente desde el vector de estado. La dirección de lectura: q0 es el bit izquierdo (más significativo).
Esferas bloch
El estado de cada qubit individual como una flecha en la esfera de Bloch: polo norte = 0», polo sur = 1», ecuador = superposición igualmente ponderada. Si la flecha es claramente más corta que el radio de la esfera, el qubit no tiene su propio estado puro – está enredado con otros qubits. Una flecha corta también puede venir del ruido: con un modelo de ruido activo el qubit pierde coherencia y la flecha se encoge hacia adentro. Las esferas ruidosas son una aproximación aquí – el vector Bloch se promedia sobre las trayectorias de ruido. Con la vista de arriba, las flechas mueven puerta por puerta (sólo sin ruido).
Resultados de la inyección
Cuán a menudo cada cadena de bits realmente ocurrió en las mediciones simuladas. Con varios resultados posibles, los números se dispersan aleatoriamente alrededor de las probabilidades exactas.
Estado Vector
Las complejas amplitudes detrás de las probabilidades: la magnitud cuadrada de una amplitud (real2 + imaginario2) da la probabilidad de su estado.
| Estado | Parte real | Parte imaginaria |
|---|
Fundamentos: ¿Cómo funciona?
De programa a qubit físico
Una computadora cuántica real es más que un chip. La electrónica de control clásica traduce el circuito en pulsos precisos. En el ejemplo mostrado, los láseres de enfriamiento, repugnancia, qubit y lectura dan forma a estas señales en una mesa óptica y las dirigen a una cámara de vacío blindada. Allí cambian y miden el estado de qubit; el resultado de la medición vuelve a la computadora clásica.
Estado de base del Qubit &
Un bit clásico es 0 o 1. Un qubit puede existir adicionalmente en una superposición de los dos estados de base |0⟩ y |1⟩. Con varios qubits, todos los estados de base se escriben como una cadena de bits, por ejemplo. |10⟩ para 2 qubits – donde q0 en este simulador es siempre el bit más significativo (izquierda).
Superposición
Un qubit en superposición transporta simultáneamente componentes de varios estados de base. Estos componentes se describen como amplitudes complejas; la magnitud cuadrada de una amplitud da la probabilidad de obtener el estado correspondiente en una medición.
La esfera Bloch
El estado de un único qubit se puede visualizar como una flecha en una esfera: el polo norte representa |0⟩, el polo sur |1⟩, y todos los puntos en el ecuador son superposiciones igualmente ponderadas – la fase determina la dirección a lo largo del ecuador en el que los puntos de flecha. rx, ry, y rz girar la flecha alrededor del eje respectivo, puertas de fase como S y T girarlo alrededor del eje Z. Con qubits enredados, la flecha se encoge hacia el centro de la esfera: el qubit individual entonces ya no tiene un estado puro propio – por lo que el enredo se vuelve literalmente visible.
Mediciones de disparos &
measureAll() mide todos los qubits a la vez y termina el circuito. Puesto que una sola medida sólo produce un resultado aleatorio, el circuito se mide conceptualmente "fotos" tiempos con run({ shots })Las probabilidades exactas se calculan también directamente desde el vector de estado, independientemente de la aleatoriedad de las tomas.
Puerta de Hadamard
La puerta de Hadamard h(q) toma un qubit de un estado definido (|0⟩ o |1⟩) en una superposición igualmente ponderada de |0⟩ y |1⟩ – así que alrededor del 50% / 50% cuando se mide.
Puertas de fase: S y T
Las puertas s(q) y t(q) no cambian las probabilidades de medición de un único qubit; sólo giran la fase de la |1⟩ amplitud – S por 90°, T por 45°. Solo muestran su efecto en combinación con la superposición: entre dos puertas Hadamard, la fase decide cómo las amplitudes se combinan o cancelan (interferencia). sdg(q) y tdg(q) rota exactamente de la manera opuesta y deshacer S y T. La regla es: dos T hacen un S, dos S hacen un Z.
Enredo condicional de CNOT &
La puerta de la CNOT cnot(control, target) voltea el qubit de destino exactamente cuando el qubit de control está en estado |1⟩. Si el qubit de control está en superposición de antemano, esto puede crear enredo – los dos qubits ya no pueden ser descritos independientemente uno del otro, como en el ejemplo del estado Bell. Si el qubit de control está en un estado de base definido en su lugar, CNOT sólo realiza un giro de bit condicional sin enredo. Así que no cada CNOT crea automáticamente enredo.
CZ: el pariente simétrico de CNOT
La puerta CZ cz(a, b) invierte el signo de la amplitud exactamente cuando ambos qubits son |1⟩. A diferencia de CNOT, no hay control y no hay qubit objetivo – la puerta actúa idénticamente en ambos qubits, por lo que se dibuja como dos puntos conectados en el diagrama. CZ y CNOT se pueden convertir en uno a: un CNOT es un CZ cuyo qubit objetivo se pasa a través de una puerta Hadamard antes y después. CZ es un bloque de construcción central de muchos algoritmos, como la búsqueda Grover.
Estado GHZ: enredo como trío
El estado GHZ (llamado así por Greenberger, Horne y Zeilinger) extiende el principio del estado Bell a tres qubits: una puerta Hadamard más dos CNOTS entrelazan a los tres para que la medición solo produzca |000⟩ o |111⟩ – nunca mezcló cuerdas de bits. qubit no tiene ya un estado propio; la información se encuentra exclusivamente en la correlación compartida.
Algoritmo de Deutsch: la ventaja cuántica más pequeña
El algoritmo de Deutsch responde, con una sola evaluación de un oráculo desconocido, a una pregunta para la que un ordenador clásico necesita dos evaluaciones: ¿la función es constante o equilibrada? El truco es enviar la entrada a través del oráculo en superposición – gracias a la interferencia, la respuesta después se codifica sin ambigüedades en el qubit de entrada. El principio detrás de ella (retroceso de fase) está en el núcleo de casi todos los algoritmos cuánticos.
Búsqueda en Grover: amplificación de amplitudes
La búsqueda de Grover encuentra una entrada marcada en un conjunto sin clasificar con significativamente menos consultas que las requeridas clásicamente. Un oráculo marca el estado buscado con un giro de fase (aquí a través de una puerta CZ), luego el operador de difusión amplifica la amplitud marcada a expensas de todos los demás. Con 2 qubits, una iteración única es suficiente para medir el golpe con 100% de probabilidad.
Adición reversible: desde quantum.add() a un circuito
El editor de código de programa arriba se traduce quantum.add({ a, b }) en un circuito de puertas X, CNOT y CNOT (Toffoli) que reproduce la adición clásica de una manera puramente reversible: cada puerta se puede deshacer exactamente, porque no se descarta información. Una puerta CNOT (ccnot(c1, c2, target)) voltea el qubit objetivo sólo cuando ambos qubits de control son |1⟩ – que es suficiente como un bloque de construcción para reconstruir cualquier circuito clásico reversible, incluyendo una escalera llena con carga. Las entradas A y B se inicializan primero como estados de base definidos (sin superposición) utilizando puertas X. Debido a que el circuito entero sólo pasa a través de estados definidos en lugar de superposiciones, la medición al final produce exactamente un resultado con 100% de probabilidad – la suma clásica correcta. quantum.add() produce un resultado determinista a pesar de la simulación cuántica, en lugar de varios estados posibles con probabilidades por debajo del 100%.
Sustracción: adición inversa
Debido a que cada puerta de un circuito cuántico es exactamente invertible, el circuito de la escalera completa se puede ejecutar hacia atrás – y la adición se convierte en una sustracción: quantum.subtract({ a, b }) utiliza exactamente las puertas de la escalera en orden inverso y por lo tanto calcula a − b. Esto no es un truco, pero el principio básico de cálculo reversible: ningún paso de cálculo destruye la información, cada paso se puede deshacer. En esta versión, se requiere un ≥ b para que no se produzca ningún resultado negativo.
Multiplicación: quantum.multiply()
La multiplicación aquí surge exactamente de los mismos bloques de construcción reversibles como adición: siguiendo el método del libro escolar, el factor a se añade varias veces en posiciones desplazadas – emparejando los bits de factor b. Cada adición parcial es la misma vespa reversible de transporte de ondas; el transporte fluye en el siguiente bit del producto cada vez. Debido a que el registro de resultados crece con el producto, los factores están limitados a 3 bits (0-7) aquí – sólo entonces el factor, producto y llevar qubit juntos encajan en los 10 qubits de este simulador.
División: quantum.divide()
Division también utiliza sólo bloques de construcción reversibles: quantum.divide({ a, b }) realiza la división larga construida a partir de las sustracciones reversibles desplazadas del divisor del resto del registro; el resultado es el cociente y el resto (a = quotient · b + remainderPorque dividendo, divisor, cociente y un qubit de préstamo debe encajar en los 10 qubits juntos, división es la operación más fuertemente limitada: bits(a) + bits(b) + bits(a÷b) + 1 ≤ 10 debe sostener, y el divisor b debe ser ≥ 1 (sin división por cero). Si una entrada no se ajusta al presupuesto, el editor lo informa en lugar de computar.
Aleatoriedad verdadera: quantum.random()
Las computadoras clásicas no pueden generar verdadera aleatoriedad – sus "números aleatorios" provienen de algoritmos deterministas (pseudo-aleatorio). quantum.random({ bits }) pone cada bit en una superposición 50/50 utilizando una puerta Hadamard, y sólo la medida decide – fundamentalmente imprevisible – el valor que sale. En el hardware cuántico real esto es al azar físicamente verdadera; este simulador lo imita con la pseudo-aleatoria de tu navegador.
Simulador vs. hardware cuántico real
Este simulador calcula el estado exactamente utilizando la aritmética clásica de punto flotante en tu navegador – esto sólo funciona porque se consideran aquí exclusivamente circuitos muy pequeños con hasta 10 qubits. Los ordenadores cuánticos reales utilizan qubits físicos, son propensos a errores (decoherencia, ruido), y tu ventaja sólo se muestra con circuitos mucho más grandes que ya no se pueden simular clásicamente en la práctica. Esta herramienta es una herramienta de aprendizaje, no un procesador cuántico real.