From 2771517ec102bf4df661adc5565d46d3d141145b Mon Sep 17 00:00:00 2001 From: Donny Date: Wed, 29 Apr 2020 13:03:58 -0400 Subject: [PATCH 1/5] Fix #928 --- qiskit/aqua/algorithms/minimum_eigen_solvers/vqe.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/qiskit/aqua/algorithms/minimum_eigen_solvers/vqe.py b/qiskit/aqua/algorithms/minimum_eigen_solvers/vqe.py index f9656aa340..74ea0aa8f4 100755 --- a/qiskit/aqua/algorithms/minimum_eigen_solvers/vqe.py +++ b/qiskit/aqua/algorithms/minimum_eigen_solvers/vqe.py @@ -131,6 +131,7 @@ def __init__(self, self._max_evals_grouped = max_evals_grouped self._circuit_sampler = None + self._expectation = expectation self._expect_op = None super().__init__(var_form=var_form, @@ -143,7 +144,6 @@ def __init__(self, self._optimizer.set_max_evals_grouped(max_evals_grouped) self._callback = callback - self._expectation = expectation self._operator = None if operator is not None: self.operator = operator From ee311bd4037752db38f47adbc5311a22f0e3914d Mon Sep 17 00:00:00 2001 From: Donny Greenberg Date: Wed, 29 Apr 2020 16:01:09 -0400 Subject: [PATCH 2/5] trigger CLA check From f76711d2c238e7e6349f21a26c91146cb53c7ec2 Mon Sep 17 00:00:00 2001 From: Donny Date: Wed, 29 Apr 2020 16:31:16 -0400 Subject: [PATCH 3/5] Really fix. --- qiskit/aqua/algorithms/minimum_eigen_solvers/qaoa/qaoa.py | 2 ++ qiskit/aqua/algorithms/minimum_eigen_solvers/vqe.py | 2 +- qiskit/aqua/algorithms/vq_algorithm.py | 5 ++++- 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/qiskit/aqua/algorithms/minimum_eigen_solvers/qaoa/qaoa.py b/qiskit/aqua/algorithms/minimum_eigen_solvers/qaoa/qaoa.py index 46888ca477..245c7538d6 100755 --- a/qiskit/aqua/algorithms/minimum_eigen_solvers/qaoa/qaoa.py +++ b/qiskit/aqua/algorithms/minimum_eigen_solvers/qaoa/qaoa.py @@ -123,6 +123,8 @@ def __init__(self, @VQE.operator.setter def operator(self, operator: Union[OperatorBase, LegacyBaseOperator]) -> None: """ Sets operator """ + # Need to wipe the var_form in case number of qubits differs from operator. + self.var_form = None # Setting with VQE's operator property super(QAOA, self.__class__).operator.__set__(self, operator) self.var_form = QAOAVarForm(self.operator, diff --git a/qiskit/aqua/algorithms/minimum_eigen_solvers/vqe.py b/qiskit/aqua/algorithms/minimum_eigen_solvers/vqe.py index 74ea0aa8f4..46a9a0a404 100755 --- a/qiskit/aqua/algorithms/minimum_eigen_solvers/vqe.py +++ b/qiskit/aqua/algorithms/minimum_eigen_solvers/vqe.py @@ -133,6 +133,7 @@ def __init__(self, self._circuit_sampler = None self._expectation = expectation self._expect_op = None + self._operator = None super().__init__(var_form=var_form, optimizer=optimizer, @@ -144,7 +145,6 @@ def __init__(self, self._optimizer.set_max_evals_grouped(max_evals_grouped) self._callback = callback - self._operator = None if operator is not None: self.operator = operator self.aux_operators = aux_operators diff --git a/qiskit/aqua/algorithms/vq_algorithm.py b/qiskit/aqua/algorithms/vq_algorithm.py index b394f31d79..f74938a163 100644 --- a/qiskit/aqua/algorithms/vq_algorithm.py +++ b/qiskit/aqua/algorithms/vq_algorithm.py @@ -84,7 +84,7 @@ def var_form(self) -> Optional[Union[QuantumCircuit, VariationalForm]]: return self._var_form @var_form.setter - def var_form(self, var_form: Union[QuantumCircuit, VariationalForm]): + def var_form(self, var_form: Optional[Union[QuantumCircuit, VariationalForm]]): """ Sets variational form """ if isinstance(var_form, QuantumCircuit): # store the parameters @@ -93,6 +93,9 @@ def var_form(self, var_form: Union[QuantumCircuit, VariationalForm]): elif isinstance(var_form, VariationalForm): self._var_form_params = ParameterVector('θ', length=var_form.num_parameters) self._var_form = var_form + elif var_form is None: + self._var_form_params = None + self._var_form = var_form else: raise ValueError( "Unsupported type '{}' of var_form".format( From 1a62c03cceb8ca0ce93e1ae2daebc554571d2aea Mon Sep 17 00:00:00 2001 From: Donny Date: Wed, 29 Apr 2020 16:50:23 -0400 Subject: [PATCH 4/5] Add test for changing Operator size. --- test/optimization/test_qaoa.py | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/test/optimization/test_qaoa.py b/test/optimization/test_qaoa.py index 72734889e4..e3b99b68ba 100755 --- a/test/optimization/test_qaoa.py +++ b/test/optimization/test_qaoa.py @@ -26,7 +26,7 @@ from qiskit.aqua.components.optimizers import COBYLA from qiskit.aqua.algorithms import QAOA from qiskit.aqua import QuantumInstance, aqua_globals -from qiskit.aqua.operators import WeightedPauliOperator +from qiskit.aqua.operators import WeightedPauliOperator, X, Z W1 = np.array([ [0, 1, 0, 1], @@ -90,6 +90,21 @@ def test_qaoa(self, w, prob, m, solutions, convert_to_matrix_op): self.log.debug('solution objective: %s', max_cut.max_cut_value(x, w)) self.assertIn(''.join([str(int(i)) for i in graph_solution]), solutions) + def test_change_operator_size(self): + """ QAOA test """ + backend = BasicAer.get_backend('statevector_simulator') + optimizer = COBYLA(maxiter=2) + qubit_op, _ = max_cut.get_operator(W1) + qubit_op = qubit_op.to_opflow().to_matrix_op() + + seed = 0 + aqua_globals.random_seed = seed + qaoa = QAOA(qubit_op, optimizer, P1) + quantum_instance = QuantumInstance(backend, seed_simulator=seed, seed_transpiler=seed) + qaoa.run(quantum_instance) + qaoa.operator = (X^qubit_op^Z) + qaoa.run() + if __name__ == '__main__': unittest.main() From 30471d42da95549070ac45c0702d5af0184f4850 Mon Sep 17 00:00:00 2001 From: Donny Date: Wed, 29 Apr 2020 19:47:56 -0400 Subject: [PATCH 5/5] Fix style --- test/optimization/test_qaoa.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/optimization/test_qaoa.py b/test/optimization/test_qaoa.py index e3b99b68ba..f97242fdef 100755 --- a/test/optimization/test_qaoa.py +++ b/test/optimization/test_qaoa.py @@ -102,7 +102,7 @@ def test_change_operator_size(self): qaoa = QAOA(qubit_op, optimizer, P1) quantum_instance = QuantumInstance(backend, seed_simulator=seed, seed_transpiler=seed) qaoa.run(quantum_instance) - qaoa.operator = (X^qubit_op^Z) + qaoa.operator = (X ^ qubit_op ^ Z) qaoa.run()