Utilidades de truncamiento
qiskit_addon_obp.utils.truncating
Funciones para truncar los operadores de Pauli dentro de unos márgenes de error dados.
TruncationErrorBudget
class TruncationErrorBudget(per_slice_budget=<factory>, max_error_total=0.0, p_norm=1, tol=1e-08)
Bases: object
Una clase para almacenar las constantes que determinan el presupuesto de error de truncamiento.
Consulta la guía práctica para obtener información detallada sobre cómo truncar los términos de los operadores durante la retropropagación y cómo limitar el error resultante.
Parámetros
is_active
is_active()
Devuelve si el truncamiento está activo, es decir, si el presupuesto es distinto de cero.
Tipo de retorno
max_error_total
Tipo: float
Valor predeterminado: 0.0
El máximo error de truncamiento total a permitir para cada observable durante toda la retropropagación. Este valor puede ser numpy.infpor ejemplo, si no se ha especificado el error máximo en setup_budget().
p_norm
Tipo: int
Valor predeterminado: 1
Indica qué norma Lp se utiliza para calcular los errores de truncamiento.
Consulta la guía práctica para obtener información detallada sobre cómo limitar el error de truncamiento utilizando normas Lp más altas.
per_slice_budget
Tipo: list[float]
La cantidad máxima de error de truncamiento a permitir por rebanada retropropagada. Esta lista se repite durante la retropropagación de los circuitos.
tol
Tipo: float
Valor predeterminado: 1e-08
Tolerancia absoluta utilizada durante el truncamiento. Una vez encontrado un umbral de truncamiento óptimo, hasta esta tolerancia, se detendrá la búsqueda de un umbral óptimo.
setup_budget
setup_budget(*, max_error_per_slice=None, max_error_total=None, num_slices=None, p_norm=1)
Calcular el presupuesto disponible en cada tramo para el truncamiento de términos observables.
Este método facilita la creación de un al usuario final TruncationErrorBudget . Este margen de error se puede proporcionar al método backpropagate() para permitir el truncamiento de los términos de Pauli de bajo peso. Consulta la guía práctica para obtener información detallada sobre cómo truncar términos del operador de salida y limitar el error resultante.
La lógica de construcción es la siguiente:
- si se proporciona
max_error_per_slicesu valor se convierte en una lista y se utiliza inmediatamente paraTruncationErrorBudget.per_slice_budget - si no es el caso, hay que configurar
max_error_total - si
num_slicesno es set,:attr:.TruncationErrorBudget.per_slice_budget se establece en[max_error_total]lo que resulta en que todo el presupuesto se consume con avidez - sin embargo, si se proporciona
num_slices, entoncesTruncationErrorBudget.per_slice_budgetasume una distribución uniforme del error total máximo entre el número especificado de rebanadas:[max_error_total / num_slices]
Por último, si se establece max_error_total , se pone un límite duro al error máximo total que se acumulará a lo largo de toda la retropropagación. Por ello, puede ser útil configurar max_error_per_slice y max_error_total .
El presupuesto no gastado durante una iteración anterior se traspasará a iteraciones posteriores, lo que significa que el presupuesto máximo para cualquier rebanada durante la retropropagación puede exceder de hecho de TruncationErrorBudget.per_slice_budget.
Parámetros
- max_error_per_slice (float |Sequence[float] | None) – Especifica el error máximo por rebanada retropropagada. Para más información, véase más arriba.
- max_error_total (float | None) – Especifica el error máximo total para toda la retropropagación. Para más información, véase más arriba.
- num_slices (int | None) – El número de trozos entre los que distribuir el presupuesto. Para más información, véase más arriba.
- p_norm (int) – La norma Lp del error. Esto afecta a la distribución gradual de
max_error_totalen el caso de que tambiénnum_slicesesté establecido (véase más arriba). Consulta la guía práctica para obtener información detallada sobre cómo limitar el error de truncamiento utilizando normas Lp más altas.
Devuelve
El resultado TruncationErrorBudget.
Eleva
ValueError - si max_error_per_slice y max_error_total son a la vez None.
Tipo de retorno
truncate_binary_search
truncate_binary_search(observable, budget, *, p_norm=1, tol=1e-08)
Realizar una búsqueda binaria para encontrar un umbral de truncamiento observable óptimo.
Elimina los términos de Pauli de un SparsePauliOp cuya suma de los valores absolutos de sus coeficientes no supere el error proporcionado budget.
Parámetros
- observable (SparsePauliOp) – el
SparsePauliOpdel que truncar los términos. - budget (float) – el error de truncamiento máximo admisible.
- p_norm (int) – un entero que especifica qué p-norma utilizar.
- tol (float) – cuando los umbrales de búsqueda binaria difieran en una cantidad inferior a
tol, la búsqueda de umbral se detendrá.
Devuelve
El observable truncado y un límite para el error de truncamiento incurrido.
El límite de error de truncamiento incurrido, , se calcula como el p-norm de las magnitudes de los coeficientes de los términos truncados, , tal que .
Tipo de retorno
tupla [*SparsePauliOp*, float ]