Skip to content
This repository was archived by the owner on Dec 7, 2021. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions qiskit/aqua/algorithms/minimum_eigen_solvers/qaoa/qaoa.py
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down
4 changes: 2 additions & 2 deletions qiskit/aqua/algorithms/minimum_eigen_solvers/vqe.py
Original file line number Diff line number Diff line change
Expand Up @@ -131,7 +131,9 @@ def __init__(self,

self._max_evals_grouped = max_evals_grouped
self._circuit_sampler = None
self._expectation = expectation
self._expect_op = None
self._operator = None

super().__init__(var_form=var_form,
optimizer=optimizer,
Expand All @@ -143,8 +145,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
self.aux_operators = aux_operators
Expand Down
5 changes: 4 additions & 1 deletion qiskit/aqua/algorithms/vq_algorithm.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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(
Expand Down
17 changes: 16 additions & 1 deletion test/optimization/test_qaoa.py
Original file line number Diff line number Diff line change
Expand Up @@ -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],
Expand Down Expand Up @@ -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()