Ansatz
El submòdul ansatz proporciona plantilles de circuit llestes per usar (Ansätze) i un marc lleuger per escriure les vostres pròpies. Per crear una plantilla personalitzada:
Crideu
super().__init__(nqubits=...)dins de__init__per establir l’amplada del circuit.Afegiu portes en qualsevol ordre amb
self.add(gate), els bucles estan permesos, i podeu mantenir referències a qualsevol objecteParameterque vulgueu exposar més endavant.
Exemple
from qilisdk.core.variables import Parameter
from qilisdk.digital import H, RX, CZ
from qilisdk.digital.ansatz import Ansatz
class NewAnsatz(Ansatz):
def __init__(self, nqubits: int, beta: float):
super().__init__(nqubits=nqubits)
self.beta = Parameter("beta", value=beta)
# Layer 1: put each qubit in superposition
for q in range(self.nqubits):
self.add(H(q))
# Layer 2: simple linear entangler
for q in range(self.nqubits - 1):
self.add(CZ(q, q + 1))
# Layer 3: parameterized mixer
for q in range(self.nqubits):
self.add(RX(q, theta=self.beta))
Un cop definida, la subclasse es comporta exactament com qualsevol altre circuit: podeu dibuixar-la, vincular paràmetres o passar-la als backends.
Per a una opció preconstruïda, considereu qualsevol de les següents:
HardwareEfficientAnsatz per a una estructura de capes senzilla que es pot adaptar a diverses topologies de hardware.
TrotterizedSchedule per simular dinàmiques analògiques amb Trotterització.
QAOA per a problemes d’optimització combinatòria.