34 #ifndef MC2LIB_CODEGEN_RIT_HPP_ 35 #define MC2LIB_CODEGEN_RIT_HPP_ 41 #include "../sets.hpp" 42 #include "../simplega.hpp" 43 #include "../types.hpp" 48 template <
class URNG,
class OperationFactory>
52 typedef typename OperationFactory::ResultType
Operation;
60 for (
auto& op_ptr : this->
genome_) {
61 op_ptr = (*factory)(urng);
67 std::vector<typename Operation::Ptr> g)
68 : simplega::
Genome<typename Operation::Ptr>(std::move(g)),
74 std::uniform_int_distribution<std::size_t> dist_idx(
76 std::unordered_set<std::size_t> used;
77 std::size_t selection_count =
static_cast<std::size_t
>(
78 static_cast<float>(this->
genome_.size()) * rate);
80 while (selection_count) {
81 auto idx = dist_idx(
urng_);
82 if (used.find(idx) != used.end()) {
103 typename Operation::Ptr
MakeRandom(
const AddrSet& subset_addrs,
104 std::size_t max_tries = 1000)
const {
113 return ExtractThreads(this->
get_ptr());
float Fitness() const override
Fitness accessor.
Definition: rit.hpp:93
RandInstTest(URNG &urng, const OperationFactory *factory, std::size_t len)
Definition: rit.hpp:55
RandInstTest(const RandInstTest &parent1, const RandInstTest &parent2, std::vector< typename Operation::Ptr > g)
Definition: rit.hpp:65
Container genome_
Raw genome of individual genes of T.
Definition: simplega.hpp:216
void Mutate(float rate) override
Mutate this Genome.
Definition: rit.hpp:73
Simple Genome interface.
Definition: simplega.hpp:129
const OperationFactory * factory_
Definition: rit.hpp:118
Container * get_ptr()
Modifiable genome accessor.
Definition: simplega.hpp:161
AddrSet fitaddrs_
Definition: rit.hpp:121
OperationFactory::ResultType Operation
Definition: rit.hpp:52
bool Contains(const Element &e) const
Definition: sets.hpp:158
Abstracts over container library's set implementation.
Definition: sets.hpp:85
Operation::Threads threads()
Definition: rit.hpp:112
Genome()
Default constructor.
Definition: simplega.hpp:138
URNG & urng_
Definition: rit.hpp:117
Types< true >::Addr Addr
Address type.
Definition: types.hpp:66
sets::Set< sets::Types< types::Addr, std::hash< types::Addr > > > AddrSet
Definition: rit.hpp:53
const AddrSet & fitaddrs() const
Definition: rit.hpp:97
AddrSet * fitaddrsptr()
Definition: rit.hpp:99
float fitness_
Definition: rit.hpp:120
Operation::Ptr MakeRandom() const
Definition: rit.hpp:101
void set_fitness(float fitness)
Definition: rit.hpp:95
Operation::Ptr MakeRandom(const AddrSet &subset_addrs, std::size_t max_tries=1000) const
Definition: rit.hpp:103