This algorithm extends mhsa() by introducing the nested approach, meaning it automatically handles identified subphases (which are split by the user, and merged again by the algorithm), and allows handling things like inclusions by a splitting step at the end of the simulation (phases merged, or rather rearranged, by the user, and split again by the algorithm).

nmhsa(
  ti,
  dimensions = NULL,
  start_after = NULL,
  stop_after = NULL,
  stop_rejected = NULL,
  stop_at = 1e-06,
  order = NULL,
  distance = NULL,
  cool = 0.9,
  levels = 2,
  ti_merged = NULL,
  ti_splitted = NULL,
  merge_pairs = NULL,
  merge_distance = NULL,
  merge_stop_after = NULL,
  split_distance = NULL,
  split_stop_after = NULL
)

Arguments

ti

The original training image (2D array).

dimensions

Dimensions for the reconstruction (vector of length 2 or 3). Defaults to the dimensions of ti.

start_after

Number of iterations for determining the initial simulated annealing temperature. Defaults to 0.1% of the total amount of pixels in the reconstruction.

stop_after

Maximum number of iterations. Defaults to the amount of pixels in the reconstruction. Can be a vector for different values per phase.

stop_rejected

Maximum number of consecutively rejected iterations. Defaults to 1% of the total amount of pixels in the reconstruction.

stop_at

Target precision. Defaults to 1e-6.

order

Integer vector with the phase order for hierarchical simulation. Defaults to the least to the most occurring phase.

distance

Distance, in pixels, up to which to investigate the structural descriptors. Defaults to 1/4th of the minimum of dim(ti) and dimensions.

cool

Simulated annealing cooling factor. Must be lower than one. Defaults to 0.9.

levels

Amount of grid levels (or resolutions) to use for the reconstruction. Defaults to 2. Can be a vector to use different levels for different phases.

ti_merged

Merged version of ti. Typically obtained through phase_merge().

ti_splitted

Splitted version of ti_merged. Typically obtained through phase_split().

merge_pairs

List of length 2 vectors, indicating for which pairs of phases optimisation should again be performed after merging all subphases again to their original phase (transition from the state of ti_splitted to the state of ti_merged).

merge_distance

Distance, in pixels, up to which to investigate the structural descriptors for the merging step. Defaults to 1/4th of the minimum of dim(ti) and dimensions. Should be a vector of the same length as merge_pairs.

merge_stop_after

Maximum number of iterations for the merging step. Defaults to the amount of pixels in the reconstruction. Can be a vector for different values per phase.

split_distance

Distance, in pixels, up to which to investigate the structural descriptors for the splitting step. Defaults to 1/4th of the minimum of dim(ti) and dimensions.

split_stop_after

Maximum number of iterations for the splitting step. Defaults to the amount of pixels in the reconstruction.

Value

A reconstructed 2D or 3D array.

Details

A more general approach to the phase merging and splitting would be possible, where the user has control of every step in the simulation, but this is currently not implemented.

References

https://doi.org/10.1103/PhysRevE.100.053316