I’m new to the pennylane API. So far it looks great!
I was working through the VQE tutorial.
My question is about changing the content of
cost_fn attribute of an object of the
ExpvalCost class. Specifically, I would like to change the cost function. For example, I have:
cost_fn_1 = qml.ExpvalCost(circuit, hamiltonian_1, dev) cost_fn_2 = qml.ExpvalCost(circuit, hamiltonian_2, dev)
Now I want to add the cost function of the object
cost_fn_2 to the cost function of the object
cost_fn_1 like so
cost_fn_1.cost_fn = cost_fn_1.cost_fn + foo*cost_fn_2.cost_fn - C
C are some variables. The above code gives an error because I’m trying to add
So the solution was to create a lambda function like so:
final_cost_fn = lambda x: cost_fn_1.cost_fn(x) + foo*cost_fn_2.cost_fn(x) - C
And then assigning
final_cost_fn as so
cost_fn_1.cost_fn = final_cost_fn
This approach works, but I’m not sure if this is the best way of altering the cost function given that this object will be further used by optimizers and other pennylane objects.