Skip to main content
IBM Quantum Platform

PhaseOracle

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

GitHub

Bases : QuantumCircuit

Phase Oracle.

L'objet Phase Oracle construit des circuits pour n'importe quelle expression logique d'entrée arbitraire. Une expression logique est composée des opérateurs logiques & (ET logique), | (OU logique), ~ (NOT logique) et ^ (XOR logique). ainsi que des symboles pour les littéraux (variables). Par exemple, "a & b" et ( v0 | ~v1 ) & ( ~v2 & v3 ) sont tous deux des représentations valables d'expressions logiques booléennes.

Un oracle de phase pour une fonction booléenne f(x) effectue l'opération quantique suivante :

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

Pour des raisons pratiques, cet oracle, en plus d'analyser des expressions logiques arbitraires, prend également en charge les chaînes d'entrée dans le format CNF DIMACS, qui est le format standard pour spécifier les instances de problèmes de SATisfiabilité (SAT) en forme normale conjonctive (CNF), qui est une conjonction d'une ou plusieurs clauses, où une clause est une disjonction d'un ou plusieurs éléments littéraux. Voir qiskit.circuit.library.phase_oracle.PhaseOracle.from_dimacs_file().

À partir de 16 variables, il faut s'attendre à des problèmes de performance lors de l'utilisation du synthétiseur par défaut.

Déclassé depuis la version 2.2

La classe qiskit.circuit.library.phase_oracle.PhaseOracle est obsolète depuis Qiskit 2.2. Elle sera supprimée à Qiskit 3.0. Utilisez plutôt la classe qiskit.circuit.library.PhaseOracleGate.

Paramètres

  • expression (str | BooleanExpression) – Une chaîne d'expression booléenne de type Python ou un objet BooleanExpression.
  • var_order (list[str] | None) – Une liste indiquant l'ordre dans lequel les variables seront créées. (par défaut : par ordre d'apparition)

Attributs

name

Type : str

Un nom lisible par l'homme pour le circuit.

Exemple

from qiskit import QuantumCircuit

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

Méthodes

evaluate_bitstring

evaluate_bitstring(bitstring)

GitHub

Évaluer l'oracle sur une chaîne de bits. Cette évaluation est réalisée de manière classique, sans circuit quantique.

Paramètres

bitstring (str) – La chaîne de bits à évaluer. La chaîne de bits d'entrée est censée être dans l'ordre little-endian.

Retours

Vrai si la chaîne de bits est un bon état, Faux sinon.

Type de retour

booléen

from_dimacs_file

classmethod from_dimacs_file(filename)

GitHub

Créer un PhaseOracle à partir de la chaîne au format DIMACS.

Il est possible de construire un site PhaseOracle à partir d'un fichier au format CNF de DIMACS, qui est le format standard pour spécifier des instances de problèmes de SATisfiabilité (SAT) en forme normale conjonctive (CNF), qui est une conjonction d'une ou de plusieurs clauses, où une clause est une disjonction d'un ou de plusieurs littéraux.

Voici un exemple de CNF exprimée dans le format 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 première ligne, après le caractère « c », est un commentaire. La deuxième ligne précise que la CNF porte sur trois variables booléennes — appelons-les x1,x2,x3x_1, x_2, x_3 — et comporte cinq clauses. Les cinq clauses énumérées ci-après sont implicitement conjonctionnées par l'opérateur logique ET, \land, tandis que les variables de chaque clause, représentées par leurs indices, sont implicitement disjonctionnées par l'opérateur logique OU, \lor. Le symbole - précédant l'indice d'une variable booléenne correspond à l'opérateur logique NON, ¬\lnot. Le caractère 0 (zéro) marque la fin de chaque clause. En substance, le code ci-dessus correspond à la CNF suivante :

(¬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).

Paramètres

filename (str) – Un fichier au format DIMACS.

Retours

Un circuit quantique avec un oracle de phase.

Type de retour

PhaseOracle

Cette page a-t-elle été utile ?
Signaler un bogue, une coquille ou proposer du contenu sur GitHub.