Issues using step_and_cost as part of an optimization method

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!

1 Like