Hey,
I am trying to implement a new method for shot allocation:
The main idea is to be able to gain N samples from a given circuit, then I want to perform some calculations and based on the results decide if I need more shots or not. What is the best way to implement this?
I tried implementing an objective function that uses a circuit with qml.counts
:
def my_objective_function(params):
sample_circuit = sample_circuit_wrapper(dev_shots)
sum_samples = {}
X_hist = []
while np.sum(X_hist) < 10000: # shots count
samples = sample_circuit(params)
sum_samples = add_samples(sum_samples, samples)
X_hist = np.asarray(list(sum_samples.values()))
energy = MyEnergyEstimation(X_hist, hamiltonian)
print(f'X_hist: {X_hist}')
if enough_shots(X_hist, epsilon=epsilon):
break
return energy
I use this objective function with a GradientDescentOptimizer
which put this whole function under an autograd
and the autograd.tracer
doesn’t like the operations I do on the samples
, I get this error:
TypeError: Can't differentiate w.r.t. type <class 'numpy.int64'>