-
Notifications
You must be signed in to change notification settings - Fork 8
Expand file tree
/
Copy pathcustom_vqa.py
More file actions
68 lines (57 loc) · 2.05 KB
/
custom_vqa.py
File metadata and controls
68 lines (57 loc) · 2.05 KB
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
# SPDX-FileCopyrightText: 2026 Qoro Quantum Ltd <divi@qoroquantum.de>
#
# SPDX-License-Identifier: Apache-2.0
"""Tutorial: CustomVQA with QuantumScript and Qiskit inputs."""
import pennylane as qp
from qiskit import QuantumCircuit
from qiskit.circuit import Parameter
from divi.qprog import CustomVQA
from divi.qprog.optimizers import ScipyMethod, ScipyOptimizer
from tutorials._backend import get_backend
def build_quantum_script() -> qp.tape.QuantumScript:
"""Create a parameterized QuantumScript with a single expval measurement."""
ops = [
qp.RX(0.0, wires=0),
qp.RZ(0.0, wires=0),
]
measurements = [qp.expval(qp.Z(0))]
return qp.tape.QuantumScript(ops=ops, measurements=measurements)
def build_qiskit_quantum_circuit() -> QuantumCircuit:
"""Create a Qiskit QuantumCircuit with measurements."""
theta = Parameter("theta")
phi = Parameter("phi")
qc = QuantumCircuit(1, 1)
qc.rx(theta, 0)
qc.rz(phi, 0)
qc.measure(0, 0)
return qc
if __name__ == "__main__":
optimizer = ScipyOptimizer(method=ScipyMethod.COBYLA)
# Example 1: PennyLane QuantumScript
print("Example 1: PennyLane QuantumScript")
qscript = build_quantum_script()
program1 = CustomVQA(
qscript=qscript,
param_shape=(2,),
optimizer=optimizer,
max_iterations=5,
backend=get_backend(),
)
program1.run(perform_final_computation=False)
print(f"Best loss: {program1.best_loss:.4f}")
print(f"Best params: {program1.best_params}")
print(f"Total circuits: {program1.total_circuit_count}\n")
# Example 2: Qiskit QuantumCircuit
print("Example 2: Qiskit QuantumCircuit")
qc = build_qiskit_quantum_circuit()
program2 = CustomVQA(
qscript=qc,
param_shape=(2,),
optimizer=optimizer,
max_iterations=5,
backend=get_backend(),
)
program2.run(perform_final_computation=False)
print(f"Best loss: {program2.best_loss:.4f}")
print(f"Best params: {program2.best_params}")
print(f"Total circuits: {program2.total_circuit_count}")