QAOA
QAOA és un ansatz que aplica l’evolució temporal alternada d’un Hamiltonià de problema i un Hamiltonià mesclador [1]. Inicialitzant el circuit com l’estat fonamental del Hamiltonià mesclador (sovint simplement la superposició uniforme) i aplicant l’evolució alternada escalada pels paràmetres \(\gamma_i\) i \(\alpha_i\), la idea és que amb un cert conjunt de paràmetres l’ansatz hauria d’aproximar l’evolució de l’estat fonamental del Hamiltonià mesclador a l’estat fonamental del Hamiltonià de problema, d’acord amb el teorema adiabàtic quàntic. Tractant aquest circuit parametritzat com un ansatz per a un algorisme quàntic variacional, podem optimitzar per intentar minimitzar el valor esperat del Hamiltonià de problema i així resoldre el problema d’optimització codificat.
Opcions de configuració:
problem_hamiltonian: El Hamiltonià de problema que codifica la funció de cost.
layers: Nombre de capes repetides de portes. Cada capa aplica dues evolucions: una per al Hamiltonià de problema i una per al Hamiltonià mesclador.
mixer_hamiltonian: El Hamiltonià mesclador. Per defecte és el mesclador X.
trotter_steps: Nombre de passos de Trotter per usar en l’aproximació del Hamiltonià. Només s’utilitza si els Hamiltonians contenen termes que no commuten.
problem_params: Valors inicials dels paràmetres per als angles d’evolució del Hamiltonià de problema. Per defecte és 0.0 per a totes les capes.
mixer_params: Valors inicials dels paràmetres per als angles d’evolució del Hamiltonià mesclador. Per defecte és 0.0 per a totes les capes.
Exemple
from qilisdk.digital import QAOA
from qilisdk.analog.hamiltonian import Z as pauli_z
problem_hamiltonian = pauli_z(0) * pauli_z(1) + pauli_z(2)
ansatz = QAOA(
problem_hamiltonian=problem_hamiltonian,
layers=2,
mixer_hamiltonian=None,
trotter_steps=1,
problem_params=[0.5, 1.0],
mixer_params=[0.25, 0.75],
)
ansatz.draw()
Com amb el HardwareEfficientAnsatz, aquest ansatz es pot utilitzar com qualsevol circuit de QiliSDK. O bé, per realitzar en canvi una optimització variacional sobre els paràmetres per minimitzar el valor esperat del Hamiltonià de problema, es pot configurar un VariationalProgram (vegeu Functionals per a més detalls):
from qilisdk.functionals.variational_program import VariationalProgram
from qilisdk.functionals import DigitalPropagation
from qilisdk.optimizers.scipy_optimizer import SciPyOptimizer
from qilisdk.cost_functions.observable_cost_function import ObservableCostFunction
from qilisdk.readout import Readout
from qilisdk.backends import QiliSim
vqa = VariationalProgram(functional=DigitalPropagation(ansatz),
optimizer=SciPyOptimizer(method="powell", tol=1e-7),
cost_function=ObservableCostFunction(problem_hamiltonian))
print(f"Running QAOA with {len(ansatz.get_parameters())} parameters...")
backend = QiliSim()
result = backend.execute(vqa, readout=Readout().with_sampling(nshots=1000))
print("VQA Result:", result)