Skip to main content
IBM Quantum Platform

PhaseOracle

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

GitHub

Basi: QuantumCircuit

Fase Oracle.

L'oggetto Phase Oracle costruisce circuiti per qualsiasi espressione logica arbitraria in ingresso. Un'espressione logica è composta dagli operatori logici & (AND logico), | (OR logico), ~ (NOT logico) e ^ (XOR logico). nonché i simboli per i letterali (variabili). Ad esempio, "a & b" e ( v0 | ~v1 ) & ( ~v2 & v3 ) sono entrambe rappresentazioni valide di espressioni logiche booleane.

Un oracolo di fase per una funzione booleana f(x) esegue la seguente operazione quantistica:

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

Per comodità, questo oracolo, oltre ad analizzare espressioni logiche arbitrarie, supporta anche stringhe di input nel formato DIMACS CNF, che è il formato standard per specificare istanze di problemi di SATisfiabilità (SAT) in Conjunctive Normal Form (CNF), ovvero una congiunzione di una o più clausole, dove una clausola è una disgiunzione di uno o più letterali. Vedere qiskit.circuit.library.phase_oracle.PhaseOracle.from_dimacs_file().

A partire da 16 variabili, si devono prevedere possibili problemi di prestazioni quando si utilizza il sintetizzatore predefinito.

Deprecato dalla versione 2.2

La classe qiskit.circuit.library.phase_oracle.PhaseOracle è deprecata a partire da Qiskit 2.2. Verrà rimosso in Qiskit 3.0. Utilizzare invece la classe qiskit.circuit.library.PhaseOracleGate.

Parametri

  • expression (str | BooleanExpression) – Una stringa di espressione booleana simile a Python o un oggetto BooleanExpression.
  • var_order (list[str] | None) – Un elenco con l'ordine in cui verranno create le variabili. (impostazione predefinita: in base all'aspetto)

Attributi

name

Tipo: str

Un nome leggibile per il circuito.

Esempio

from qiskit import QuantumCircuit

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

Metodi

evaluate_bitstring

evaluate_bitstring(bitstring)

GitHub

Valutare l'oracolo su una stringa di bit. Questa valutazione viene effettuata in modo classico senza alcun circuito quantistico.

Parametri

bitstring (str) – La stringa di bit da valutare. La stringa di bit in ingresso deve essere in ordine little-endian.

Risultati

Vero se la stringa di bit è uno stato buono, falso altrimenti.

Tipo di restituzione

bool

from_dimacs_file

classmethod from_dimacs_file(filename)

GitHub

Crea un PhaseOracle dalla stringa nel formato DIMACS.

È possibile costruire un PhaseOracle a partire da un file in formato DIMACS CNF, che è il formato standard per specificare istanze di problemi di SATisfiabilità (SAT) in Conjunctive Normal Form (CNF), ovvero una congiunzione di una o più clausole, dove una clausola è una disgiunzione di uno o più letterali.

Di seguito è riportato un esempio di CNF espressa nel 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 prima riga, dopo il carattere «c», è un commento. La seconda riga specifica che il CNF riguarda tre variabili booleane — chiamiamole x1,x2,x3x_1, x_2, x_3 — e contiene cinque clausole. Le cinque clausole, elencate di seguito, sono implicitamente unite dall'operatore logico AND, \land, mentre le variabili in ciascuna clausola, rappresentate dai loro indici, sono implicitamente disgiunte dall'operatore logico OR, \lor. Il simbolo - che precede l'indice di una variabile booleana corrisponde all'operatore logico NOT, ¬\lnot. Il carattere 0 (zero) segna la fine di ciascuna clausola. In sostanza, il codice sopra riportato corrisponde alla seguente 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).

Parametri

filename (str) – Un file in formato DIMACS.

Risultati

Un circuito quantistico con un oracolo di fase.

Tipo di restituzione

PhaseOracle

Questa pagina è stata utile?
Segnala un bug, un errore di battitura o richiedi contenuti su GitHub.