Skip to content

Commit

Permalink
Override classmethod supports_aux_operators in VQEProgram (#223)
Browse files Browse the repository at this point in the history
* 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 <31178928+t-imamichi@users.noreply.github.com>

* Update test/algorithms/test_min_eigen_optimizer.py

Co-authored-by: Takashi Imamichi <31178928+t-imamichi@users.noreply.github.com>

Co-authored-by: Takashi Imamichi <31178928+t-imamichi@users.noreply.github.com>
(cherry picked from commit 103db34)
  • Loading branch information
lasys authored and mergify-bot committed Aug 16, 2021
1 parent a4b7536 commit 31925a7
Show file tree
Hide file tree
Showing 2 changed files with 44 additions and 2 deletions.
4 changes: 4 additions & 0 deletions qiskit_optimization/runtime/vqe_program.py
Original file line number Diff line number Diff line change
Expand Up @@ -222,6 +222,10 @@ def wrapped_callback(*args):
else:
return None

@classmethod
def supports_aux_operators(cls) -> bool:
return True

def compute_minimum_eigenvalue(
self, operator: OperatorBase, aux_operators: Optional[List[Optional[OperatorBase]]] = None
) -> MinimumEigensolverResult:
Expand Down
42 changes: 40 additions & 2 deletions test/algorithms/test_min_eigen_optimizer.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,17 +17,22 @@
QiskitOptimizationTestCase,
requires_extra_library,
)
from test.runtime.fake_vqeruntime import FakeRuntimeProvider

import numpy as np
from ddt import data, ddt
from docplex.mp.model import Model

from qiskit import BasicAer
from qiskit.algorithms import QAOA, VQE, NumPyMinimumEigensolver
from qiskit.algorithms.optimizers import COBYLA, SPSA
from qiskit.circuit.library import TwoLocal
from qiskit.providers.basicaer import QasmSimulatorPy
from qiskit.utils import QuantumInstance, algorithm_globals
from qiskit_optimization.algorithms import CplexOptimizer, MinimumEigenOptimizer
from qiskit_optimization.algorithms import (
CplexOptimizer,
MinimumEigenOptimizer,
MinimumEigenOptimizationResult,
)
from qiskit_optimization.algorithms.optimization_algorithm import (
OptimizationResultStatus,
)
Expand All @@ -39,6 +44,7 @@
QuadraticProgramToQubo,
)
from qiskit_optimization.problems import QuadraticProgram
from qiskit_optimization.runtime import VQEProgram, QAOAProgram
from qiskit_optimization.translators import from_docplex_mp


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

@data("vqe", "qaoa")
def test_runtime(self, subroutine):
"""Test vqe and qaoa runtime"""
optimizer = {"name": "SPSA", "maxiter": 100}
backend = QasmSimulatorPy()
provider = FakeRuntimeProvider()

if subroutine == "vqe":
ry_ansatz = TwoLocal(5, "ry", "cz", reps=3, entanglement="full")
initial_point = np.random.default_rng(42).random(ry_ansatz.num_parameters)
solver = VQEProgram(
ansatz=ry_ansatz,
optimizer=optimizer,
initial_point=initial_point,
backend=backend,
provider=provider,
)
else:
reps = 2
initial_point = np.random.default_rng(42).random(2 * reps)
solver = QAOAProgram(
optimizer=optimizer,
reps=reps,
initial_point=initial_point,
backend=backend,
provider=provider,
)

opt = MinimumEigenOptimizer(solver)
result = opt.solve(self.op_ordering)
self.assertIsInstance(result, MinimumEigenOptimizationResult)


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

0 comments on commit 31925a7

Please sign in to comment.