Source code for ferrmion.optimize.enumeration
"""Init for enumeration optimizations."""
import numpy as np
from ferrmion.core import anneal_enumerations as core_anneal_enumerations
from .evolutionary import lambda_plus_mu
[docs]
def anneal_enumerations(
template: dict,
one_e_coeffs: np.ndarray,
two_e_coeffs: np.ndarray,
temperature: float | None = None,
initial_guess=np.typing.ArrayLike | None,
coefficient_weighted: bool = False,
):
"""Optimise mode enumeration using simulated annealing.
Args:
template (dict): Encoding template dictionary.
one_e_coeffs (np.ndarray): One-electron coefficient matrix.
two_e_coeffs (np.ndarray): Two-electron coefficient matrix.
temperature (float | None): Initial annealing temperature. Defaults to ``n_modes``.
initial_guess (ArrayLike | None): Starting permutation. Defaults to identity.
coefficient_weighted (bool): If True, minimise coefficient-weighted Pauli weight.
"""
n_modes = one_e_coeffs.shape[0]
if temperature is None:
temperature = float(n_modes)
if initial_guess is None:
initial_guess = np.array([*range(n_modes)], dtype=np.uint)
return core_anneal_enumerations(
template=template,
one_e_coeffs=one_e_coeffs,
two_e_coeffs=two_e_coeffs,
temperature=temperature,
initial_guess=initial_guess,
coefficient_weighted=coefficient_weighted,
)
__all__ = ["lambda_plus_mu", "anneal_enumerations"]