void mutate(sequence_type& sequence) { static TGenomeBase base; int32_t offsets[2]; assert(base.len(sequence) > 1); _rnd->get_unique_int32_seq(0, base.len(sequence) - 1, offsets, 2); auto seq = base.get(sequence, offsets[0]); base.set(sequence, offsets[0], base.get(sequence, offsets[1])); base.set(sequence, offsets[1], seq); }
sequence_type create_child(const sequence_type& a, const sequence_type& b , const sequence_len_t separator) { sequence_len_t i; sequence_type individual; individual = _base.create(_base.len(a)); for(i = 0; i < separator; ++i) { _base.set(individual, i, _base.get(a, i)); } for(i = separator; i < _base.len(b); ++i) { _base.set(individual, i, _base.get(b, i)); } return individual; }
sequence_type create_child(const sequence_type& a, const sequence_type& b , const sequence_len_t offset1, const sequence_len_t offset2) const { sequence_len_t i; sequence_type individual; individual = _base.create(_base.len(a)); for(i = 0; i < offset1; ++i) { _base.set(individual, i, _base.get(a, i)); } for(i = offset1; i < offset2; ++i) { _base.set(individual, i, _base.get(b, i)); } for(i = offset2; i < _base.len(a); ++i) { _base.set(individual, i, _base.get(a, i)); } return individual; }