forked from munich-quantum-toolkit/bench
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathqnn.py
29 lines (21 loc) · 1.1 KB
/
qnn.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
"""Quantum Neural Network benchmark definition. Code is inspired by https://qiskit.org/ecosystem/machine-learning/stubs/qiskit_machine_learning.neural_networks.EstimatorQNN.html."""
from __future__ import annotations
import numpy as np
from qiskit import QuantumCircuit
from qiskit.circuit.library import RealAmplitudes, ZZFeatureMap
def create_circuit(num_qubits: int) -> QuantumCircuit:
"""Returns a quantum circuit implementing a Quantum Neural Network (QNN) with a ZZ FeatureMap and a RealAmplitudes ansatz.
Arguments:
num_qubits: number of qubits of the returned quantum circuit
"""
feature_map = ZZFeatureMap(feature_dimension=num_qubits)
ansatz = RealAmplitudes(num_qubits=num_qubits, reps=1)
qc = QuantumCircuit(num_qubits)
feature_map = feature_map.assign_parameters([1 for _ in range(feature_map.num_parameters)])
rng = np.random.default_rng(10)
ansatz = ansatz.assign_parameters(rng.random(ansatz.num_parameters) * 2 * np.pi)
qc.compose(feature_map, inplace=True)
qc.compose(ansatz, inplace=True)
qc.name = "qnn"
qc.measure_all()
return qc