LinearAmplitudeFunction
class qiskit.circuit.library.LinearAmplitudeFunction(num_state_qubits, slope, offset, domain, image, rescaling_factor=1, breakpoints=None, name='F')
Bases: QuantumCircuit
A circuit implementing a (piecewise) linear function on qubit amplitudes.
An amplitude function of a function is a mapping
for a function , where is a qubit state.
This circuit implements for piecewise linear functions . In this case, the mapping can be approximately implemented using a Taylor expansion and linearly controlled Pauli-Y rotations, see [1, 2] for more detail. This approximation uses a rescaling_factor
to determine the accuracy of the Taylor expansion.
In general, the function of interest is defined from some interval , the domain
to , the image
, instead of to . Using an affine transformation we can rescale to :
with
If is a piecewise linear function on intervals with slopes and offsets it can be written as
where is an indication function that is 1 if the argument is in the interval and otherwise 0. The breakpoints can be specified by the breakpoints
argument.
References
[1]: Woerner, S., & Egger, D. J. (2018).
Quantum Risk Analysis. arXiv:1806.06893
[2]: Gacon, J., Zoufal, C., & Woerner, S. (2020).
Quantum-Enhanced Simulation-Based Optimization. arXiv:2005.10780
Parameters
- num_state_qubits (int) – The number of qubits used to encode the variable .
- slope (float |list[float]) – The slope of the linear function. Can be a list of slopes if it is a piecewise linear function.
- offset (float |list[float]) – The offset of the linear function. Can be a list of offsets if it is a piecewise linear function.
- domain (tuple[float, float]) – The domain of the function as tuple .
- image (tuple[float, float]) – The image of the function as tuple .
- rescaling_factor (float) – The rescaling factor to adjust the accuracy in the Taylor approximation.
- breakpoints (list[float] | None) – The breakpoints if the function is piecewise linear. If None, the function is not piecewise.
- name (str) – Name of the circuit.
Attributes
name
Type: str
A human-readable name for the circuit.
Example
from qiskit import QuantumCircuit
qc = QuantumCircuit(2, 2, name="my_circuit")
print(qc.name)
my_circuit
Methods
post_processing
post_processing(scaled_value)
Map the function value of the approximated to .
Parameters
scaled_value (float) – A function value from the Taylor expansion of .
Returns
The scaled_value
mapped back to the domain of , by first inverting the transformation used for the Taylor approximation and then mapping back from to the original domain.
Return type