Ansatz

El submódulo ansatz proporciona plantillas de circuitos listas para usar (Ansätze) y un marco ligero para escribir las propias. Para crear una plantilla personalizada:

  1. Crear una subclase de Ansatz (que ya hereda de Circuit).

  2. Llamar a super().__init__(nqubits=...) dentro de __init__ para establecer el ancho del circuito.

  3. Añadir puertas en cualquier orden con self.add(gate); los bucles están permitidos, y se pueden conservar referencias a cualquier objeto Parameter que se desee exponer más adelante.

Ejemplo

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))

Una vez definida, la subclase se comporta exactamente como cualquier otro circuito: se puede dibujar, vincular parámetros o pasarla a backends.

Para una opción prediseñada, considere cualquiera de las siguientes:

  • HardwareEfficientAnsatz para una estructura de capas simple que puede adaptarse a diversas topologías de hardware.

  • TrotterizedSchedule para simular dinámicas analógicas con Trotterización.

  • QAOA para problemas de optimización combinatoria.