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:

  1. Creeu una subclasse de Ansatz (que ja hereta de Circuit).

  2. Crideu super().__init__(nqubits=...) dins de __init__ per establir l’amplada del circuit.

  3. Afegiu portes en qualsevol ordre amb self.add(gate), els bucles estan permesos, i podeu mantenir referències a qualsevol objecte Parameter que 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.