Skip to content

Commit 282bed5

Browse files
mergify[bot]lasys
andauthored
Override classmethod supports_aux_operators in VQEProgram (#223) (#226)
* override supports_aux_operators * removed docstring * added tests * added tests * add release note * reordered imports + merged tests into one * added method docstring * fixed formatting * Update test/algorithms/test_min_eigen_optimizer.py Co-authored-by: Takashi Imamichi <[email protected]> * Update test/algorithms/test_min_eigen_optimizer.py Co-authored-by: Takashi Imamichi <[email protected]> Co-authored-by: Takashi Imamichi <[email protected]> (cherry picked from commit 103db34) Co-authored-by: lasys <[email protected]>
1 parent a4b7536 commit 282bed5

File tree

2 files changed

+44
-2
lines changed

2 files changed

+44
-2
lines changed

qiskit_optimization/runtime/vqe_program.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -222,6 +222,10 @@ def wrapped_callback(*args):
222222
else:
223223
return None
224224

225+
@classmethod
226+
def supports_aux_operators(cls) -> bool:
227+
return True
228+
225229
def compute_minimum_eigenvalue(
226230
self, operator: OperatorBase, aux_operators: Optional[List[Optional[OperatorBase]]] = None
227231
) -> MinimumEigensolverResult:

test/algorithms/test_min_eigen_optimizer.py

Lines changed: 40 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,17 +17,22 @@
1717
QiskitOptimizationTestCase,
1818
requires_extra_library,
1919
)
20+
from test.runtime.fake_vqeruntime import FakeRuntimeProvider
2021

2122
import numpy as np
2223
from ddt import data, ddt
2324
from docplex.mp.model import Model
24-
2525
from qiskit import BasicAer
2626
from qiskit.algorithms import QAOA, VQE, NumPyMinimumEigensolver
2727
from qiskit.algorithms.optimizers import COBYLA, SPSA
2828
from qiskit.circuit.library import TwoLocal
29+
from qiskit.providers.basicaer import QasmSimulatorPy
2930
from qiskit.utils import QuantumInstance, algorithm_globals
30-
from qiskit_optimization.algorithms import CplexOptimizer, MinimumEigenOptimizer
31+
from qiskit_optimization.algorithms import (
32+
CplexOptimizer,
33+
MinimumEigenOptimizer,
34+
MinimumEigenOptimizationResult,
35+
)
3136
from qiskit_optimization.algorithms.optimization_algorithm import (
3237
OptimizationResultStatus,
3338
)
@@ -39,6 +44,7 @@
3944
QuadraticProgramToQubo,
4045
)
4146
from qiskit_optimization.problems import QuadraticProgram
47+
from qiskit_optimization.runtime import VQEProgram, QAOAProgram
4248
from qiskit_optimization.translators import from_docplex_mp
4349

4450

@@ -353,6 +359,38 @@ def test_samples_vqe(self, simulator):
353359
self.assertAlmostEqual(results.raw_samples[0].fval, opt_sol)
354360
self.assertEqual(results.raw_samples[0].status, success)
355361

362+
@data("vqe", "qaoa")
363+
def test_runtime(self, subroutine):
364+
"""Test vqe and qaoa runtime"""
365+
optimizer = {"name": "SPSA", "maxiter": 100}
366+
backend = QasmSimulatorPy()
367+
provider = FakeRuntimeProvider()
368+
369+
if subroutine == "vqe":
370+
ry_ansatz = TwoLocal(5, "ry", "cz", reps=3, entanglement="full")
371+
initial_point = np.random.default_rng(42).random(ry_ansatz.num_parameters)
372+
solver = VQEProgram(
373+
ansatz=ry_ansatz,
374+
optimizer=optimizer,
375+
initial_point=initial_point,
376+
backend=backend,
377+
provider=provider,
378+
)
379+
else:
380+
reps = 2
381+
initial_point = np.random.default_rng(42).random(2 * reps)
382+
solver = QAOAProgram(
383+
optimizer=optimizer,
384+
reps=reps,
385+
initial_point=initial_point,
386+
backend=backend,
387+
provider=provider,
388+
)
389+
390+
opt = MinimumEigenOptimizer(solver)
391+
result = opt.solve(self.op_ordering)
392+
self.assertIsInstance(result, MinimumEigenOptimizationResult)
393+
356394

357395
if __name__ == "__main__":
358396
unittest.main()

0 commit comments

Comments
 (0)