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:
Llamar a
super().__init__(nqubits=...)dentro de__init__para establecer el ancho del circuito.Añadir puertas en cualquier orden con
self.add(gate); los bucles están permitidos, y se pueden conservar referencias a cualquier objetoParameterque 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.