torchref.refinement.optimizers.simulated_annealing module
Simulated Annealing optimizer for crystallographic refinement.
Implements a per-parameter Metropolis-Hastings acceptance criterion for fine-grained exploration of parameter space.
- torchref.refinement.optimizers.simulated_annealing.optimize_simulated_annealing(state, params, T_initial=1.0, T_final=0.01, n_steps=1000, perturbation_scale=0.01, absolute_scale=False, cooling_schedule='exponential', verbose=0, callback=None)[source]
Run simulated annealing optimization on a LossState.
Uses per-parameter Metropolis criterion where each parameter is independently accepted or rejected.
- Parameters:
state (LossState) – Configured loss state with targets and weights.
params (list of torch.Tensor) – Parameters to optimize.
T_initial (float) – Initial temperature. Default is 1.0.
T_final (float) – Final temperature. Default is 0.01.
n_steps (int) – Number of SA steps. Default is 1000.
perturbation_scale (float, list, or dict) – Scale factor for perturbations. Can be: - float: uniform scale for all parameters - list: per-parameter scales (same length as params) - dict: mapping from parameter index to scale (missing indices use 0.01) If absolute_scale=False (default), this is multiplied by parameter magnitude. If absolute_scale=True, this is used directly as the standard deviation. Default is 0.01.
absolute_scale (bool) – If True, perturbation_scale is used as absolute std dev for noise. If False (default), perturbation_scale is relative to parameter magnitude.
cooling_schedule (str) – Cooling schedule: “exponential” or “linear”. Default is “exponential”.
verbose (int) – Verbosity level. Default is 0.
callback (callable, optional) – Function called after each step with signature callback(step, T, loss, params). Useful for collecting snapshots during optimization.
- Returns:
State with history containing before/after loss values.
- Return type: