Program Listing for File RootMutationConfig.hpp¶
↰ Return to documentation for file (include/dish2/configbyroot/RootMutationConfig.hpp)
#pragma once
#ifndef DISH2_CONFIGBYROOT_ROOTMUTATIONCONFIG_HPP_INCLUDE
#define DISH2_CONFIGBYROOT_ROOTMUTATIONCONFIG_HPP_INCLUDE
#include <cstddef>
#include <map>
#include <string>
#include "../../../third-party/Empirical/include/emp/base/assert.hpp"
#include "../../../third-party/Empirical/include/emp/base/optional.hpp"
#include "../../../third-party/Empirical/include/emp/tools/string_utils.hpp"
#include "../config/cfg.hpp"
namespace dish2 {
struct RootMutationConfig {
double point_mutation_rate_multiplicand{ 1.0 };
double sequence_defect_rate_multiplicand{ 1.0 };
double mutation_occurence_rate_multiplicand{ 1.0 };
emp::optional<size_t> program_max_size_override{};
double CalcPointMutationRate() const {
const double res = dish2::cfg.POINT_MUTATION_RATE()
* point_mutation_rate_multiplicand;
emp_assert( std::clamp( res, 0.0, 1.0 ) == res );
return res;
}
double CalcSequenceDefectRate() const {
const double res = dish2::cfg.SEQUENCE_DEFECT_RATE()
* sequence_defect_rate_multiplicand;
emp_assert( std::clamp( res, 0.0, 1.0 ) == res );
return res;
}
double CalcMutationOccurenceRate(const size_t rep_lev) const {
const double res = dish2::cfg.MUTATION_RATE()[rep_lev]
* mutation_occurence_rate_multiplicand;
emp_assert( std::clamp( res, 0.0, 1.0 ) == res );
return res;
}
size_t GetProgramMaxSize() const {
return program_max_size_override.value_or(
dish2::cfg.PROGRAM_MAX_SIZE()
);
}
std::map<std::string, std::string> MakeSummary() const {
return {
{"Point Mutation Rate Multiplicand",
emp::to_string(point_mutation_rate_multiplicand)},
{"Sequence Defect Rate Multiplicand",
emp::to_string(sequence_defect_rate_multiplicand)},
{"Mutation Occurence Rate Multiplicand",
emp::to_string(mutation_occurence_rate_multiplicand)},
{"Program Max Size Override",
emp::to_string(program_max_size_override)},
};
}
};
} // namespace dish2
#endif // #ifndef DISH2_CONFIGBYROOT_ROOTMUTATIONCONFIG_HPP_INCLUDE