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∨¬x2∨x3)∧(x1∨x2∨¬x3)∧(x1∨¬x2∨¬x3)∧(¬x1∨x2∨x3)(\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.