openqaoa
openqaoa copied to clipboard
Avoid measurement_outcomes during optimization
I like the openQAOA ecosystem and I am trying to integrate a tensor network based backend (using cuQuantum SDK), which does not calculate the explicit wf as statevec. I can use qiskit circuits as starting point before converting them to perform TN contractions, so I adapted a backend from qiskit_sim. However the optimization fails at the first cycle without measurement_outcomes.
Here is the kernel code from the backend, is there a way to bypass measurement_outcomes?
def expectation(self,
params: QAOAVariationalBaseParams) -> float:
ckt = self.qaoa_circuit(params)
## QISKIT VERSION
# output_wf = Statevector(ckt)
# self.measurement_outcomes = output_wf.data
# cost = np.real(output_wf.expectation_value(self.qiskit_cost_hamil))
## CUQUANTUM VERSION
einsum = CircuitToEinsum(ckt, dtype='complex128', backend=cp)
cost = 0
for pauli_term_list in self.qiskit_cost_hamil:
pauli_term = str(pauli_term_list).split(' * ')
expression, operands = einsum.expectation(pauli_term[1], lightcone=True)
expec = contract(expression, *operands)
cost += np.real(expec * float(pauli_term[0]))
return cost