qiskit.ignis.mitigation.expval_meas_mitigator_circuits
expval_meas_mitigator_circuits(num_qubits, method='CTMP', labels=None)
Generate measurement error mitigator circuits and metadata.
Use the ExpvalMeasMitigatorFitter
class to fit the execution results to construct a calibrated expectation value measurement error mitigator.
Parameters
- num_qubits (
int
) – the number of qubits to calibrate. - method (
Optional
[str
]) – the mitigation method'complete'
,'tensored'
, or'CTMP'
. - labels (
Optional
[List
[str
]]) – Optional, custom labels to run for calibration. If None the method will determine the default label values.
Returns
(circuits, metadata) the measurement error characterization
circuits, and metadata for the fitter.
Return type
tuple
Mitigation Method:
- The
'complete'
method will generate all computational basis states measurement circuits and fitting will return aCompleteExpvalMeasMitigator
. This method should only be used for small numbers of qubits. - The
'tensored'
method will generate two input state circuits of the all 0 and all 1 states on number of qubits unless custom labels are specified. Ftting will return aTensoredExpvalMeasMitigator
. This method assumes measurement errors are uncorrelated between qubits. - The
'CTMP'
method will generate input state circuits unless custom labels are specified. The default input states are the all 0 state, the all 1 state, and the state with a single qubit in the 1 state and all others in the 0 state. Ftting will return aCTMPExpvalMeasMitigator
.
Example
The following example shows calibrating a 5-qubit expectation value measurement error mitigator using the 'tensored'
method.
from qiskit import execute
from qiskit.test.mock import FakeVigo
import qiskit.ignis.mitigation as mit
backend = FakeVigo()
num_qubits = backend.configuration().num_qubits
# Generate calibration circuits
circuits, metadata = mit.expval_meas_mitigator_circuits(
num_qubits, method='tensored')
result = execute(circuits, backend, shots=8192).result()
# Fit mitigator
mitigator = mit.ExpvalMeasMitigatorFitter(result, metadata).fit()
# Plot fitted N-qubit assignment matrix
mitigator.plot_assignment_matrix()
<matplotlib.axes._subplots.AxesSubplot at 0x7fc2ddc3c710>
The following shows how to use the above mitigator to apply measurement error mitigation to expectation value computations
from qiskit import QuantumCircuit
# Test Circuit with expectation value -1.
qc = QuantumCircuit(num_qubits)
qc.x(range(num_qubits))
qc.measure_all()
# Execute
shots = 8192
seed_simulator = 1999
result = execute(qc, backend, shots=8192, seed_simulator=1999).result()
counts = result.get_counts(0)
# Expectation value of Z^N without mitigation
expval_nomit, error_nomit = mit.expectation_value(counts)
print('Expval (no mitigation): {:.2f} ± {:.2f}'.format(
expval_nomit, error_nomit))
# Expectation value of Z^N with mitigation
expval_mit, error_mit = mit.expectation_value(counts,
meas_mitigator=mitigator)
print('Expval (with mitigation): {:.2f} ± {:.2f}'.format(
expval_mit, error_mit))
Expval (no mitigation): -0.81 ± 0.01
Expval (with mitigation): -0.99 ± 0.01
Was this page helpful?
Report a bug or request content on GitHub.