Hi,
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
where foo
and C
are some variables. The above code gives an error because I’m trying to add function
types.
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.
Thank you