Skip to content

Commit

Permalink
Summary:
Browse files Browse the repository at this point in the history
Fixes qiskit-community#217 where ```VQC``` couldn't be instantiated unless either ```feature_map``` or ```ansatz``` were provided. ```VQC``` is now instantiated with the default ```feature_map``` and/or ```ansatz```.

Changelog: Bugfix
  • Loading branch information
jonvet committed Oct 25, 2021
1 parent 7f7bde7 commit 6372bf8
Show file tree
Hide file tree
Showing 2 changed files with 51 additions and 4 deletions.
8 changes: 4 additions & 4 deletions qiskit_machine_learning/algorithms/classifiers/vqc.py
Original file line number Diff line number Diff line change
Expand Up @@ -105,14 +105,14 @@ def __init__(
self._ansatz = ansatz_
self._num_qubits = num_qubits_
self._circuit = QuantumCircuit(self._num_qubits)
self._circuit.compose(feature_map, inplace=True)
self._circuit.compose(ansatz, inplace=True)
self._circuit.compose(self.feature_map, inplace=True)
self._circuit.compose(self.ansatz, inplace=True)

# construct circuit QNN
neural_network = CircuitQNN(
self._circuit,
feature_map.parameters,
ansatz.parameters,
self.feature_map.parameters,
self.ansatz.parameters,
interpret=self._get_interpret(2),
output_shape=2,
quantum_instance=quantum_instance,
Expand Down
47 changes: 47 additions & 0 deletions test/algorithms/classifiers/test_vqc.py
Original file line number Diff line number Diff line change
Expand Up @@ -105,6 +105,53 @@ def test_vqc(self, config):
score = classifier.score(X, y)
self.assertGreater(score, 0.5)

@data(
# num_qubits, feature_map, ansatz
(True, False, False),
(True, True, False),
(True, True, True),
(False, True, True),
(False, False, True),
(True, False, True),
(False, True, False),
)
def test_default_parameters(self, config):
provide_num_qubits, provide_feature_map, provide_ansatz = config
num_inputs = 2

num_qubits, feature_map, ansatz = None, None, None

if provide_num_qubits:
num_qubits = num_inputs
if provide_feature_map:
feature_map = ZZFeatureMap(num_inputs)
if provide_ansatz:
ansatz = RealAmplitudes(num_inputs, reps=1)

classifier = VQC(
num_qubits=num_qubits,
feature_map=feature_map,
ansatz=ansatz,
quantum_instance=self.qasm_quantum_instance,
)

# construct data
num_samples = 5
# pylint: disable=invalid-name
X = algorithm_globals.random.random((num_samples, num_inputs))
y = 1.0 * (np.sum(X, axis=1) <= 1)
while len(np.unique(y)) == 1:
X = algorithm_globals.random.random((num_samples, num_inputs))
y = 1.0 * (np.sum(X, axis=1) <= 1)
y = np.array([y, 1 - y]).transpose() # VQC requires one-hot encoded input

# fit to data
classifier.fit(X, y)

# score
score = classifier.score(X, y)
self.assertGreater(score, 0.5)


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

0 comments on commit 6372bf8

Please sign in to comment.