Skip to main content
IBM Quantum Platform

PhaseOracle

class qiskit.circuit.library.PhaseOracle(expression, var_order=None)

GitHub

Bases: QuantumCircuit

Fase Oracle.

El objeto Fase Oracle construye circuitos para cualquier expresión lógica de entrada arbitraria. Una expresión lógica se compone de los operadores lógicos & (AND lógico), | (OR lógico), ~ (NOT lógico) y ^ (XOR lógico). así como símbolos para literales (variables). Por ejemplo, 'a & b', y ( v0 | ~v1 ) & ( ~v2 & v3 ) son ambas representaciones de cadena válidas de expresiones lógicas booleanas.

Un oráculo de fase para una función booleana f(x) realiza la siguiente operación cuántica:

x(1)f(x)x|x\rangle \mapsto (-1)^{f(x)}|x\rangle

Para mayor comodidad, este oráculo, además de analizar expresiones lógicas arbitrarias, también admite cadenas de entrada en el formato DIMACS CNF, que es el formato estándar para especificar instancias de problemas SATisfiability (SAT) en Forma Normal Conjuntiva (CNF), que es una conjunción de una o más cláusulas, donde una cláusula es una disyunción de uno o más literales. Consulte qiskit.circuit.library.phase_oracle.PhaseOracle.from_dimacs_file().

A partir de 16 variables, cabe esperar posibles problemas de rendimiento al utilizar el sintetizador predeterminado.

Obsoleto desde la versión 2.2

La clase qiskit.circuit.library.phase_oracle.PhaseOracle está obsoleta a partir de Qiskit 2.2. Se eliminará en Qiskit 3.0. En su lugar, utilice la clase qiskit.circuit.library.PhaseOracleGate.

Parámetros

  • expression (str | BooleanExpression) – Una cadena de expresión booleana similar a Python o un objeto BooleanExpression.
  • var_order (list[str] | None) – Una lista con el orden en el que se crearán las variables. (por defecto: por apariencia)

Atributos

name

Tipo: str

Un nombre legible para el circuito.

Ejemplo

from qiskit import QuantumCircuit

qc = QuantumCircuit(2, 2, name="my_circuit")
print(qc.name)
my_circuit

Métodos

evaluate_bitstring

evaluate_bitstring(bitstring)

GitHub

Evalúa el oráculo en una cadena de bits. Esta evaluación se realiza de forma clásica sin ningún circuito cuántico.

Parámetros

bitstring (str) – La cadena de bits a evaluar. Se espera que la cadena de bits de entrada esté en orden little-endian.

Devuelve

True si la cadena de bits es un buen estado, False en caso contrario.

Tipo de retorno

bool

from_dimacs_file

classmethod from_dimacs_file(filename)

GitHub

Crea un PhaseOracle a partir de la cadena en formato DIMACS.

Es posible construir un PhaseOracle a partir de un archivo en formato DIMACS CNF, que es el formato estándar para especificar instancias de problemas SATisfiability (SAT) en Forma Normal Conjuntiva (CNF), que es una conjunción de una o más cláusulas, donde una cláusula es una disyunción de uno o más literales.

A continuación se muestra un ejemplo de CNF expresada en formato DIMACS:

c DIMACS CNF file with 3 satisfying assignments: 1 -2 3, -1 -2 -3, 1 2 -3.
p cnf 3 5
-1 -2 -3 0
1 -2 3 0
1 2 -3 0
1 -2 -3 0
-1 2 3 0

La primera línea, tras el carácter «c», es un comentario. La segunda línea especifica que la CNF se define sobre tres variables booleanas —llamémoslas x1,x2,x3x_1, x_2, x_3 — y contiene cinco cláusulas. Las cinco cláusulas, enumeradas a continuación, se unen implícitamente mediante el operador lógico AND, \land, mientras que las variables de cada cláusula, representadas por sus índices, se disyunen implícitamente mediante el operador lógico OR, \lor. El símbolo - que precede al índice de una variable booleana corresponde al operador lógico NOT, ¬\lnot. El carácter 0 (cero) marca el final de cada cláusula. En esencia, el código anterior se corresponde con la siguiente CNF:

(¬x1¬x2¬x3)(x1¬x2x3)(x1x2¬x3)(x1¬x2¬x3)(¬x1x2x3)(\lnot x_1 \lor \lnot x_2 \lor \lnot x_3) \land (x_1 \lor \lnot x_2 \lor x_3) \land (x_1 \lor x_2 \lor \lnot x_3) \land (x_1 \lor \lnot x_2 \lor \lnot x_3) \land (\lnot x_1 \lor x_2 \lor x_3).

Parámetros

filename (str) – Un archivo en formato DIMACS.

Devuelve

Un circuito cuántico con un oráculo de fase.

Tipo de retorno

PhaseOracle

¿Le ha resultado útil esta página?
Informe de un error, de una errata o solicite contenido en GitHub.