VQE cost functions¶
We provide two different cost functions for VQE. One for PyQuil’s WavefunctionSimulator, and one for Rigetti’s QVM that can also be run on the QPU.
On the Wavefunction Simulator¶
-
class
vqe.cost_function.
PrepareAndMeasureOnWFSim
(prepare_ansatz, make_memory_map, hamiltonian, sim=None, scalar_cost_function=True, nshots=0, enable_logging=False, qubit_mapping=None, hamiltonian_is_diagonal=False)¶ A cost function that prepares an ansatz and measures its energy w.r.t
hamiltonian
on the qvm- Parameters
prepare_ansatz (param) – A parametric pyquil program for the state preparation
make_memory_map (param) – A function that creates a memory map from the array of parameters
hamiltonian (
PauliSum
) – The hamiltonian with respect to which to measure the energy.sim (
Optional
[WavefunctionSimulator
]) – A WavefunctionSimulator instance to get the wavefunction from. Automatically created, if None is passed.scalar_cost_function (
bool
) – If True: __call__ returns only the expectation value If False: __call__ returns a tuple (exp_val, std_dev) Defaults to True.nshots (
int
) – Number of shots to assume to simulate the sampling noise. 0 corresponds to no sampling noise added and is the default.enable_logging (
bool
) – If true, a log is created which contains the parameter and function values at each function call. It is a list of namedtuples of the form (“x”, “fun”)qubit_mapping (
Optional
[Dict
[QubitPlaceholder
,Union
[Qubit
,int
]]]) – A mapping to fix QubitPlaceholders to physical qubits. E.g. pyquil.quil.get_default_qubit_mapping(program) gives you on.hamiltonian_is_diagonal (
bool
) – Pass true, if the hamiltonian contains only Z terms and products thereof. This speeds up __init__ considerably. Defaults to False.
-
__call__
(params, nshots=None)¶ Cost function that computes <psi|ham|psi> with psi prepared with prepare_ansatz(params).
- Parameters
params (
Union
[list
,ndarray
]) – Parameters of the state preparation circuit.nshots (
Optional
[int
]) – Overrides nshots from __init__ if passed
- Returns
Either only the cost or a tuple of the cost and the standard deviation estimate based on the samples.
- Return type
float or tuple (cost, cost_stdev)
-
get_wavefunction
(params)¶ Same as __call__ but returns the wavefunction instead of cost
- Parameters
params (
Union
[List
[~T],ndarray
]) – Parameters of the state preparation circuit- Returns
The wavefunction prepared with parameters
params
- Return type
Wavefunction
On the QVM / QPU¶
-
class
vqe.cost_function.
PrepareAndMeasureOnQVM
(prepare_ansatz, make_memory_map, hamiltonian, qvm, scalar_cost_function=True, nshots=1, base_numshots=100, qubit_mapping=None, enable_logging=False, hamiltonian_is_diagonal=False)¶ A cost function that prepares an ansatz and measures its energy w.r.t hamiltonian on a quantum computer (or simulator).
This cost_function makes use of pyquils parametric circuits and thus has to be supplied with a parametric circuit and a function to create memory maps that can be passed to qvm.run.
- Parameters
prepare_ansatz (
Program
) – A parametric pyquil program for the state preparationmake_memory_map (
Callable
[[Iterable
[+T_co]],dict
]) – A function that creates a memory map from the array of parametershamiltonian (
PauliSum
) – The hamiltonianqvm (
Union
[QuantumComputer
,str
]) – Connection the QC to run the program on OR a name string like expected bypyquil.api.get_qc
scalar_cost_function (
bool
) – If True: __call__ returns only the expectation value If False: __call__ returns a tuple (exp_val, std_dev) Defaults to True.nshots (
int
) – Fixed multiple ofbase_numshots
for each estimation of the expectation value. Defaults to 1base_numshots (
int
) –- numshots multiplier to compile into the binary. The argument nshots of
__call__ is then a multplier of this.
qubit_mapping (
Optional
[Dict
[QubitPlaceholder
,Union
[Qubit
,int
]]]) – A mapping to fix all QubitPlaceholders to physical qubits. E.g. pyquil.quil.get_default_qubit_mapping(program) gives you on.enable_logging (
bool
) – If true, a log is created which contains the parameter and function values at each function call. It is a list of namedtuples of the form (“x”, “fun”)
-
__call__
(params, nshots=None)¶ - Parameters
params (param) – the parameters to run the state preparation circuit with
nshots (param) – Overrides nshots in __init__ if passed
- Returns
Either only the cost or a tuple of the cost and the standard deviation estimate based on the samples.
- Return type
float or tuple (cost, cost_stdev)