Custom move functions can be used with Josiann as long as they inherit from one of the base Move classes :
josiann.moves.base.Movebase class for defining any move.
josiann.moves.discrete.DiscreteMovebase class for defining discrete moves.
josiann.moves.ensemble.EnsembleMovebase class for defining moves with multiple walkers.
josiann.parallel.moves.base.ParallelMovebase class for defining moves for the parallel mode of Josiann.
Custom moves must at least implement the _get_proposal() method, which generates candidate positions for iteration \(k+1\) by altering the position vector of iteration \(k\). Function _get_proposal() has the following signature :
def _get_proposal(self, x: npt.NDArray[Union[np.int64, np.float64]], state: State) -> npt.NDArray[Union[np.int64, np.float64]]: """ Generate a new proposed vector x. Args: x: current vector x of shape (ndim,). state: current state of the SA algorithm. Returns: New proposed vector x of shape (ndim,). """ ...
The state parameter is a
josiann.moves.base.State object holding the current state of the SA algorithm.