PhaseOracle
class qiskit.circuit.library.PhaseOracle(expression, var_order=None)
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:
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.
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_circuitMétodos
evaluate_bitstring
evaluate_bitstring(bitstring)
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
from_dimacs_file
classmethod from_dimacs_file(filename)
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 0La 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 — y contiene cinco cláusulas. Las cinco cláusulas, enumeradas a continuación, se unen implícitamente mediante el operador lógico AND, , mientras que las variables de cada cláusula, representadas por sus índices, se disyunen implícitamente mediante el operador lógico OR, . El símbolo que precede al índice de una variable booleana corresponde al operador lógico NOT, . El carácter 0 (cero) marca el final de cada cláusula. En esencia, el código anterior se corresponde con la siguiente CNF:
.
Parámetros
filename (str) – Un archivo en formato DIMACS.
Devuelve
Un circuito cuántico con un oráculo de fase.
Tipo de retorno