Sure thing! Here’s a minimal example:
import pennylane as qml
from pennylane import numpy as np
class MyClass:
def __init__(self, n_qubits):
self.n_qubits = n_qubits
device = qml.device("default.qubit", wires=n_qubits)
self.quantum_node = qml.QNode(self.quantum_function, device)
def quantum_function(self, params):
for i in range(len(params)):
qml.RX(params[i], wires=i)
return [qml.expval(qml.PauliZ(i)) for i in range(len(params))]
def cost(self, params):
return -np.sum(self.quantum_node(params))
def do_optimization(self):
params = np.random.uniform(0, np.pi, size=(self.n_qubits,), requires_grad=True)
opt = qml.GradientDescentOptimizer(0.1)
for n in range(10):
params = opt.step(self.cost, params)
print(self.cost(params))
obj = MyClass(4)
obj.do_optimization()
-3.6838202359463894
-3.737987269714827
-3.783698057758141
-3.8220120753125184
-3.8539404434260787
-3.880416877392254
-3.9022816835753353
-3.920275812324963
-3.9350420219145708
-3.9471306216104813
Hope this helps!