diff --git a/src/mo_anneal.f90 b/src/mo_anneal.f90 index 7b1ab73a63c20b5790f12a30fb592c80b515da02..18fda005fdf05e8581438280df254fb6100dfdae 100644 --- a/src/mo_anneal.f90 +++ b/src/mo_anneal.f90 @@ -48,7 +48,7 @@ MODULE mo_anneal IMPLICIT NONE - PUBLIC :: anneal ! Minimization of a cost function via Simaulated Annealing + PUBLIC :: anneal ! Minimization of a cost function via Simulated Annealing PUBLIC :: GetTemperature ! Function which returns the optimal initial temperature for ! ! a given acceptance ratio and initial parameter set diff --git a/src/mo_optimization_utils.f90 b/src/mo_optimization_utils.f90 index df3ce231cb80f6dd0ebbbc0f06a28e7f5a7dae4c..6629c275d8ebbd86e2227388191a256a2c83f398 100644 --- a/src/mo_optimization_utils.f90 +++ b/src/mo_optimization_utils.f90 @@ -3,6 +3,15 @@ !> \details \copydetails mo_optimization_utils !> \brief Utility functions, such as interface definitions, for optimization routines. +!> \details An abstract type \ref optimizee is provided to be used with the optimization functions +!! such as \ref mo_anneal::anneal, \ref mo_dds::dds, \ref mo_dds::mdds, \ref mo_mcmc::mcmc, +!! \ref mo_mcmc::mcmc_stddev or \ref mo_sce::sce. +!! +!! Three reference implementations are provided: +!! - \ref function_optimizee : simple function optimization taking an array of parameters +!! - \ref likelihood_optimizee : likelihood optimization using sigma, stddev and likeli +!! - \ref eval_optimizee : optimization using an eval/objective pair (\ref eval_interface, \ref objective_interface) +!! !> \copyright Copyright 2005-\today, the CHS Developers, Sabine Attinger: All rights reserved. !! FORCES is released under the LGPLv3+ license \license_note module mo_optimization_utils @@ -12,21 +21,31 @@ module mo_optimization_utils implicit none + public :: eval_interface + public :: objective_interface + public :: optimizee + public :: function_optimizee + public :: likelihood_optimizee + public :: eval_optimizee + + private + + !> \brief Interface for evaluation function. abstract interface - subroutine eval_interface(config, opti_sim) + subroutine eval_interface(config, sim_data) use mo_optimization_types, only : config_t, sim_data_t - type(config_t), intent(in) :: config - type(sim_data_t), dimension(:), pointer, optional, intent(inout) :: opti_sim + type(config_t), intent(in) :: config !< configuration + type(sim_data_t), dimension(:), pointer, optional, intent(inout) :: sim_data !< simulated data end subroutine end interface !> \brief Interface for objective function. !> \details The optional arguments are motivated by likelihood objective functions. interface - function objective_interface(parameterset, eval, arg1, arg2, arg3) + function objective_interface(parameters, eval, arg1, arg2, arg3) use mo_kind, only : dp import eval_interface - real(dp), intent(in), dimension(:) :: parameterset !< parameter set + real(dp), intent(in), dimension(:) :: parameters !< parameter set procedure(eval_interface), INTENT(IN), pointer :: eval !< evaluation routine real(dp), optional, intent(in) :: arg1 !< optional argument 1 real(dp), optional, intent(out) :: arg2 !< optional argument 2 @@ -36,7 +55,6 @@ module mo_optimization_utils end function objective_interface end interface - !> \brief abstract type 'optimizee' to be used by optimizers type, abstract :: optimizee contains