sig
  module type LOCAL =
    sig
      type data
      type user_data
      type result
      exception Fin_AG
      val gvars : Ga_types.gvars
      val eval :
        Ga_optimize.LOCAL.user_data ->
        int -> Ga_optimize.LOCAL.data -> float Lazy.t
      val generate :
        Ga_optimize.LOCAL.user_data -> int -> Ga_optimize.LOCAL.data
      val cross :
        Ga_optimize.LOCAL.user_data ->
        int ->
        Ga_optimize.LOCAL.data ->
        Ga_optimize.LOCAL.data ->
        Ga_optimize.LOCAL.data * Ga_optimize.LOCAL.data
      val mutate :
        Ga_optimize.LOCAL.user_data ->
        int -> Ga_optimize.LOCAL.data -> Ga_optimize.LOCAL.data
      val distance :
        Ga_optimize.LOCAL.user_data ->
        Ga_optimize.LOCAL.data -> Ga_optimize.LOCAL.data -> float
      val barycenter :
        Ga_optimize.LOCAL.user_data ->
        Ga_optimize.LOCAL.data ->
        int -> Ga_optimize.LOCAL.data -> int -> Ga_optimize.LOCAL.data
      val init : Ga_optimize.LOCAL.user_data -> unit
      val prepare_ag :
        Ga_optimize.LOCAL.user_data ->
        Ga_optimize.LOCAL.data Ga_types.population -> unit
      val prepare_gen :
        Ga_optimize.LOCAL.user_data ->
        int -> Ga_optimize.LOCAL.data Ga_types.population -> unit
      val after_scale :
        Ga_optimize.LOCAL.user_data ->
        int ->
        Ga_optimize.LOCAL.data Ga_types.population ->
        Ga_optimize.LOCAL.data Ga_types.chromosome -> unit
      val after_share :
        Ga_optimize.LOCAL.user_data ->
        int ->
        Ga_optimize.LOCAL.data Ga_types.population ->
        Ga_types.sharing -> unit
      val after_reproduce :
        Ga_optimize.LOCAL.user_data ->
        int -> Ga_optimize.LOCAL.data Ga_types.population -> int list -> unit
      val after_gen :
        Ga_optimize.LOCAL.user_data ->
        int -> Ga_optimize.LOCAL.data Ga_types.population -> unit
      val terminate_ag :
        Ga_optimize.LOCAL.user_data ->
        Ga_optimize.LOCAL.data Ga_types.population ->
        int list -> int -> Ga_optimize.LOCAL.result
    end
  module Make :
    functor (Local : LOCAL->
      sig val opti : Local.user_data -> Local.result end
end