ObservableCostFunction

La classe ObservableCostFunction avalua el valor d’expectació d’un observable contra un estat final (d’una evolució temporal) o la distribució de probabilitat de les cadenes de bits mostrejades. Accepta tres representacions intercanviables per a l’observable: un QTensor, un Hamiltonian simbòlic, o un únic PauliOperator. Internament, totes les entrades es converteixen a QTensor perquè el mateix flux de processament numèric es pugui reutilitzar tant per a resultats analògics com digitals.

Exemple: valor d’expectació d’una evolució analògica

import numpy as np
from qilisdk.analog import Schedule, X, Z, Y
from qilisdk.core import ket, tensor_prod
from qilisdk.core.interpolator import Interpolation
from qilisdk.backends import QiliSim
from qilisdk.functionals import AnalogEvolution
from qilisdk.readout import Readout
from qilisdk.cost_functions import ObservableCostFunction

# Define total time and timestep
T = 10.0
dt = 0.5
nqubits = 1

# Define Hamiltonians
Hx = sum(X(i) for i in range(nqubits))
Hz = sum(Z(i) for i in range(nqubits))

# Build a time-dependent schedule
schedule = Schedule(
    hamiltonians={"driver": Hx, "problem": Hz},
    coefficients={
        "driver": {(0.0, T): lambda t: 1 - t / T},
        "problem": {(0.0, T): lambda t: t / T},
    },
    dt=dt,
    interpolation=Interpolation.LINEAR,
)

functional = AnalogEvolution(
    schedule=schedule,
    initial_state=(ket(0) - ket(1)).unit(),
)

backend = QiliSim()
evolution_result = backend.execute(functional, readout=Readout().with_sampling(nshots=1000))

cost_fn = ObservableCostFunction(Z(0))
energy = cost_fn.compute_cost(evolution_result)
print("Expectation value <Z> =", energy)

Per als fluxos de treball de mostreig, la funció de cost itera per la distribució de probabilitat exposada per get_probabilities() i acumula el valor d’expectació en la base computacional.