Simulation
JuliQAOA.exp_valueJuliQAOA.exp_value!JuliQAOA.probabilitiesJuliQAOA.probabilities!JuliQAOA.statevectorJuliQAOA.statevector!
JuliQAOA.statevector — Methodstatevector(angles, mixer, obj_vals)Calculate the QAOA statevector $|\psi(\beta, \gamma)\rangle = e^{-i \beta_p H_M} e^{-i \gamma_p H_C} \dots e^{-i \beta_1 H_M} e^{-i \gamma_1 H_C} |\psi_0\rangle$, where
angles= $[\beta_1, \ldots, \beta_p,\gamma_1,\ldots,\gamma_p]$,mixer= $H_M$,obj_vals= the diagonal of $H_C$,
and $|\psi_0\rangle$ is the uniform superposition over mixer.feasible_states.
statevector(sv, angles, mixer, obj_vals)Calculate the QAOA statevector with the custom initial state $|\psi_0\rangle$ = sv.
Examples
using JuliQAOA, Graphs, LinearAlgebra
n = 6
# 3 rounds with random angles
p = 3
angles = rand(2*p)
# transverse field mixer
mixer = mixer_x(n)
# calculate the MaxCut cost function over all basis states on a random G(n,p) graph
g = erdos_renyi(n, 0.5)
obj_vals = [maxcut(g, x) for x in states(n)]
# calculate the statevector (with |ψ0⟩ = uniform superposition over all states)
statevector(angles, mixer, obj_vals)
# calculate the statevector (with |ψ0⟩ = random initial state)
sv = rand(2^n) + rand(2^n)*im
sv = sv/norm(sv)
statevector(sv, angles, mixer, obj_vals)JuliQAOA.statevector! — Methodstatevector!(sv, angles, mixer, obj_vals)Calculate the QAOA with $|\psi_0\rangle$ = sv, and store the result in sv.
JuliQAOA.probabilities — Methodprobabilities(angles, mixer, obj_vals)Calculate the probability of observing each state in mixer.feasible_states for the QAOA defined by (angles, mixer, obj_vals), where$|\psi_0\rangle$ is the uniform superposition over mixer.feasible_states.
Equivalent to abs2.(statevector(angles, mixer, obj_vals)).
probabilities(sv, angles, mixer, obj_vals)Calculate the probability of observing each state in mixer.feasible_states for the QAOA defined by (angles, mixer, obj_vals) with $|\psi_0\rangle$ = sv.
Equivalent to abs2.(statevector(sv. angles, mixer, obj_vals)).
JuliQAOA.probabilities! — Methodprobabilities!(sv, angles, mixer, obj_vals)Calculate the probability of observing each state in mixer.feasible_states for the QAOA defined by (angles, mixer, obj_vals) with $|\psi_0\rangle$ = sv, storing the resulting probabilities in sv.
JuliQAOA.exp_value — Functionexp_value(angles, mixer, obj_vals)Calculate $\langle\psi(\beta, \gamma)| H_C |\psi(\beta, \gamma)\rangle$, where $|\psi(\beta, \gamma)\rangle$ = statevector(angles, mixer, obj_vals).
Equivalent to dot(obj_vals, probabilities(angles, mixer, obj_vals)).
Can be modified to measure the expectation value of something other than $H_C$ and/or start at a non-standard $|\psi_0\rangle$ as follows:
exp_value(angles, mixer, obj_vals, measure)Calculate $\langle\psi(\beta, \gamma)| H_{\text{measure}} |\psi(\beta, \gamma) \rangle$, where measure = diagonal terms of $H_{\text{measure}}$.
Equivalent to dot(measure, probabilities(angles, mixer, obj_vals)).
exp_value(sv, angles, mixer, obj_vals)Calculate $\langle\psi(\beta, \gamma)| H_C |\psi(\beta, \gamma)\rangle$ with $|\psi_0\rangle$ = sv.
exp_value(sv, angles, mixer, obj_vals, measure)Calculate $\langle\psi(\beta, \gamma)| H_{\text{measure}} |\psi(\beta, \gamma) \rangle$ with $|\psi_0\rangle$ = sv.
Examples
using JuliQAOA, Graphs, LinearAlgebra
n = 6
# 3 rounds with random angles
p = 3
angles = rand(2*p)
# transverse field mixer
mixer = mixer_x(n)
# calculate the MaxCut cost function over all basis states on a random G(n,p) graph
g = erdos_renyi(n, 0.5)
obj_vals = [maxcut(g, x) for x in states(n)]
# the traditional expectation value
exp_value(angles, mixer, obj_vals)
# the probability of observing an optimal state
measure = obj_vals .== maximum(obj_vals)
exp_value(angles, mixer, obj_vals, measure)
# the probability of observing an optimal state starting from a random initial state
sv = rand(2^n) + rand(2^n)*im
sv = sv/norm(sv)
exp_value(sv, angles, mixer, obj_vals, measure)JuliQAOA.exp_value! — Methodexp_value!(sv, angles, mixer, obj_vals, measure)Calculate $\langle\psi(\beta, \gamma)| H_{\text{measure}} |\psi(\beta, \gamma) \rangle$ with $|\psi_0\rangle$ = sv, storing the probabilities of observing each state in sv.