3 #include <geneial/algorithm/BaseGeneticAlgorithm.h>
8 geneial_private_namespace(geneial)
10 geneial_private_namespace(algorithm)
12 geneial_export_namespace
15 template<
typename FITNESS_TYPE>
16 inline bool BaseGeneticAlgorithm<FITNESS_TYPE>::wasCriteriaReached()
18 const bool wasReached = _stoppingCriterion->wasReached(*_manager);
21 notifyObservers(AlgorithmObserver<FITNESS_TYPE>::CRITERIA_REACHED);
26 template<
typename FITNESS_TYPE>
27 inline void BaseGeneticAlgorithm<FITNESS_TYPE>::notifyObservers(
typename AlgorithmObserver<FITNESS_TYPE>::ObserveableEvent event)
29 typename observers_map::const_iterator lb = _observers.lower_bound(event);
31 if (lb != _observers.end() && !(_observers.key_comp()(event, lb->first)))
36 case AlgorithmObserver<FITNESS_TYPE>::AFTER_GENERATION:
38 for (
const auto& it : lb->second)
40 it->updateAfterGeneration(*_manager);
45 case AlgorithmObserver<FITNESS_TYPE>::BEFORE_GENERATION:
47 for (
const auto& it : lb->second)
49 it->updateBeforeGeneration(*_manager);
53 case AlgorithmObserver<FITNESS_TYPE>::CRITERIA_REACHED:
55 for (
const auto& it : lb->second)
57 it->updateCriteriaReached(*_manager, *_stoppingCriterion);
65 template<
typename FITNESS_TYPE>
66 inline void BaseGeneticAlgorithm<FITNESS_TYPE>::registerObserver(
const std::shared_ptr<AlgorithmObserver<FITNESS_TYPE>> &observer)
68 typedef std::set<typename AlgorithmObserver<FITNESS_TYPE>::ObserveableEvent> setType;
69 const setType events = observer->getSubscribedEvents();
70 for (
const auto &it :events)
73 typename observers_map::iterator lb = _observers.lower_bound(it);
75 if (lb != _observers.end() && !(_observers.key_comp()(it, lb->first)))
79 lb->second.emplace_back(observer);
85 typename std::vector<std::shared_ptr<AlgorithmObserver<FITNESS_TYPE>>> list;
86 list.emplace_back(observer);
87 _observers.insert(lb,
typename observers_map::value_type(it, list));