36 #ifndef _FITNESSFUNCTION_HPP_
37 #define _FITNESSFUNCTION_HPP_
40 #include "QuantitativeTrait.hpp"
41 #include "shared_ptr.hpp"
64 virtual DataVectorPtr calculate_fitnesses(
const TraitValueMap& trait_values,
65 size_t generation_index,
66 size_t population_index)
const = 0;
71 virtual std::string class_name()
const;
72 virtual Parameters parameters()
const;
73 virtual void configure(
const Parameters& parameters,
const Registry& registry);
81 typedef shared_ptr<FitnessFunction> FitnessFunctionPtr;
82 typedef std::vector<FitnessFunctionPtr> FitnessFunctionPtrs;
105 virtual DataVectorPtr calculate_fitnesses(
const TraitValueMap& trait_values,
106 size_t generation_index,
107 size_t population_index)
const
109 return DataVectorPtr();
114 virtual std::string class_name()
const {
return "FitnessFunction_Trivial";}
115 virtual Parameters parameters()
const {
return Parameters();}
116 virtual void configure(
const Parameters& parameters,
const Registry& registry) {}
144 virtual DataVectorPtr calculate_fitnesses(
const TraitValueMap& trait_values,
145 size_t generation_index,
146 size_t population_index)
const
148 if (!trait_values.count(qtid_))
149 throw std::runtime_error(
"[FitnessFunction_Identity] Quantitative trait id not found.");
150 return trait_values.at(qtid_);
155 virtual std::string class_name()
const {
return "FitnessFunction_Identity";}
156 virtual Parameters parameters()
const;
157 virtual void configure(
const Parameters& parameters,
const Registry& registry);
187 const FitnessFunctionPtrs& ffs = FitnessFunctionPtrs());
189 virtual DataVectorPtr calculate_fitnesses(
const TraitValueMap& trait_values,
190 size_t generation_index,
191 size_t population_index)
const;
195 virtual std::string class_name()
const {
return "FitnessFunction_PopulationComposite";}
196 virtual Parameters parameters()
const;
197 virtual void configure(
const Parameters& parameters,
const Registry& registry);
199 virtual void write_child_configurations(std::ostream& os, std::set<std::string>& ids_written)
const;
203 FitnessFunctionPtrs ffs_;
226 typedef std::map<size_t, FitnessFunctionPtr> GenerationFFMap;
229 const GenerationFFMap& ffs = GenerationFFMap());
231 virtual DataVectorPtr calculate_fitnesses(
const TraitValueMap& trait_values,
232 size_t generation_index,
233 size_t population_index)
const;
237 virtual std::string class_name()
const {
return "FitnessFunction_GenerationComposite";}
238 virtual Parameters parameters()
const;
239 virtual void configure(
const Parameters& parameters,
const Registry& registry);
240 virtual void write_child_configurations(std::ostream& os, std::set<std::string>& ids_written)
const;
244 GenerationFFMap ffs_;
275 double optimum = 0,
double radius = 0,
double power = 0);
277 virtual DataVectorPtr calculate_fitnesses(
const TraitValueMap& trait_values,
278 size_t generation_index,
279 size_t population_index)
const;
282 virtual std::string class_name()
const {
return "FitnessFunction_Optimum";}
283 virtual Parameters parameters()
const;
284 virtual void configure(
const Parameters& parameters,
const Registry& registry);
319 const std::string& quantitative_trait_id =
"",
320 double proportion_selected = 0);
322 virtual DataVectorPtr calculate_fitnesses(
const TraitValueMap& trait_values,
323 size_t generation_index,
324 size_t population_index)
const;
327 virtual std::string class_name()
const {
return "FitnessFunction_TruncationSelection";}
328 virtual Parameters parameters()
const;
329 virtual void configure(
const Parameters& parameters,
const Registry& registry);
334 double proportion_selected_;
338 #endif // _FITNESSFUNCTION_HPP_