Program Listing for File make_targeted_mask.hpp¶
↰ Return to documentation for file (include/dish2/utility/make_targeted_mask.hpp)
#pragma once
#ifndef DISH2_UTILITY_MAKE_TARGETED_MASK_HPP_INCLUDE
#define DISH2_UTILITY_MAKE_TARGETED_MASK_HPP_INCLUDE
#include "../../../third-party/Empirical/include/emp/base/assert.hpp"
#include "../../../third-party/Empirical/include/emp/base/vector.hpp"
#include "../../../third-party/Empirical/include/emp/math/Random.hpp"
#include "../../../third-party/Empirical/include/emp/math/random_utils.hpp"
namespace dish2 {
template< typename Program >
emp::vector<char> make_targeted_mask(
const Program& program, const size_t num_to_nop, const size_t seed
) {
emp::vector<size_t> candidate_idxs;
for (size_t idx{}; idx < program.size(); ++idx) {
if ( program[idx].IsOp() ) candidate_idxs.push_back( idx );
}
emp::Random rand( seed );
emp::Shuffle( rand, candidate_idxs );
candidate_idxs.resize(
std::min( candidate_idxs.size(), num_to_nop )
);
emp::vector<char> res( program.size(), false );
for ( const size_t idx : candidate_idxs ) res[idx] = true;
return res;
}
} // namespace dish2
#endif // #ifndef DISH2_UTILITY_MAKE_TARGETED_MASK_HPP_INCLUDE