Hi Catalina,
Thank you for you answer, yes I tried your suggestion
Below is the code with the tried method.
Summary
import pennylane as qml
from pennylane import numpy as np
import jax
import optax
dev = qml.device("default.qubit", 4)
@qml.qnode(dev)
def circuit_expected(H):
qml.BasisState([1, 1, 0, 0], wires=[0, 1, 2, 3])
qml.DoubleExcitation(0.2, wires=[0, 1, 2, 3])
return qml.expval(H)
def loss_f(coord):
symbols = ["H", "H"]
H, qb = qml.qchem.molecular_hamiltonian(symbols, jax.numpy.array([0, 0, 0, *coord]))
return circuit_expected(H)
H_1 = np.array([1., 1., 1.])
opt = optax.sgd(learning_rate=0.4)
opt_coords_state = opt.init(H_1)
for i in range(10):
grad_coordinates = jax.grad(loss_f, 0)(H_1)
updates, opt_coords_state = opt.update(grad_coordinates, opt_coords_state)
H_1 = optax.apply_updates(H_1, updates)
print(grad_coordinates)
I think the main trouble here is that I don’t want to calculate the gradient descent for every coordinates in one tensor, but in the current setting of Pennylane I guess it is not possible?