Skip to main content
IBM Quantum Platform

PhaseOracle

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

GitHub

Bases: QuantumCircuit

Fase Oracle.

O objeto Phase Oracle constrói circuitos para qualquer expressão lógica de entrada arbitrária. Uma expressão lógica é composta pelos operadores lógicos & (AND lógico), | (OR lógico), ~ (NOT lógico) e ^ (XOR lógico). bem como símbolos para literais (variáveis). Por exemplo, 'a & b' e ( v0 | ~v1 ) & ( ~v2 & v3 ) são representações válidas de expressões lógicas booleanas.

Um oráculo de fase para uma função booleana f(x) realiza a seguinte operação quântica:

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

Por conveniência, esse oráculo, além de analisar expressões lógicas arbitrárias, também é compatível com cadeias de caracteres de entrada no formato DIMACS CNF, que é o formato padrão para especificar instâncias de problemas de SATisfiabilidade (SAT) na Forma Normal Conjuntiva (CNF), que é uma conjunção de uma ou mais cláusulas, em que uma cláusula é uma disjunção de um ou mais literais. Consulte qiskit.circuit.library.phase_oracle.PhaseOracle.from_dimacs_file().

A partir de 16 variáveis, deve-se esperar possíveis problemas de desempenho ao usar o sintetizador padrão.

Descontinuado desde a versão 2.2

A classe qiskit.circuit.library.phase_oracle.PhaseOracle está obsoleta desde o Qiskit 2.2. Ele será removido no Qiskit 3.0. Em vez disso, use a classe qiskit.circuit.library.PhaseOracleGate.

Parâmetros

  • expression (str | BooleanExpression) – Uma cadeia de caracteres de expressão booleana semelhante a Python ou um objeto BooleanExpression.
  • var_order (list[str] | None) – Uma lista com a ordem em que as variáveis serão criadas. (padrão: por aparência)

Atributos

name

Tipo: str

Um nome legível por humanos para o circuito.

Exemplo

from qiskit import QuantumCircuit

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

Métodos

evaluate_bitstring

evaluate_bitstring(bitstring)

GitHub

Avalie o oráculo em uma bitstring. Essa avaliação é feita de forma clássica, sem nenhum circuito quântico.

Parâmetros

bitstring (str) – A cadeia de bits a ser avaliada. Espera-se que a cadeia de bits de entrada esteja na ordem little-endian.

Retorna

True (verdadeiro) se a bitstring for um estado bom, False (falso) caso contrário.

Tipo de retorno

bool

from_dimacs_file

classmethod from_dimacs_file(filename)

GitHub

Crie um PhaseOracle a partir da cadeia de caracteres no formato DIMACS.

É possível criar um PhaseOracle a partir de um arquivo no formato DIMACS CNF, que é o formato padrão para especificar instâncias de problemas de SATisfiabilidade (SAT) na Forma Normal Conjuntiva (CNF), que é uma conjunção de uma ou mais cláusulas, em que uma cláusula é uma disjunção de um ou mais literais.

A seguir, um exemplo de um CNF expresso no 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

A primeira linha, após o caractere "c", é um comentário. A segunda linha especifica que a CNF é definida por três variáveis booleanas — vamos chamá-las de x1,x2,x3x_1, x_2, x_3 — e contém cinco cláusulas. As cinco cláusulas, listadas a seguir, são implicitamente unidas pelo operador lógico AND, \land, enquanto as variáveis em cada cláusula, representadas por seus índices, são implicitamente separadas pelo operador lógico OR, \lor. O símbolo - que precede o índice de uma variável booleana corresponde ao operador lógico NOT, ¬\lnot. O caractere 0 (zero) marca o fim de cada cláusula. Essencialmente, o código acima corresponde à seguinte 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) – Um arquivo no formato DIMACS.

Retorna

Um circuito quântico com um oráculo de fase.

Tipo de retorno

PhaseOracle

Esta página foi útil?
Relate um bug, erro de digitação ou solicite conteúdo no GitHub.