Anneal::Path Anneal::GenerateRandomNeighbor(const Path &path_before) const { int size = path_before.size(); // ((size - 1) * (size - 2) / 2) represents the total number of intervals // where only the first city will never be changed. // For example, when size = 3: // // * * * // * * // * // // There are 6 intervals in total int random_index = generator_() % ((size - 1) * (size - 2) / 2); int i; for (i = 1; i < size - 1; i++) { int j = size - 1 - i; if (random_index >= j) random_index -= j; else break; } Path neighbor(path_before); std::reverse(neighbor.begin() + i, neighbor.begin() + i + 2 + random_index); return neighbor; }
// // SUMMARY: 取得系メソッド // KTL_INLINE RandomResult NativeVariateRandom::random() { return generator_(); }
/// Generate a new UUID. boost::uuids::uuid make_uuid() { return generator_(); }
//-- Generate a pseudo random sequence void McGenerator::generate(std::vector<double>& out_randomSequence) { //assert(out_randomSequence.size() > 0); for (size_t i = 0; i < out_randomSequence.size(); ++i) out_randomSequence[i] = generator_(); }
/// fills the buffer using the generator void fill_buffer(buffer_type& buffer) { for (typename buffer_type::iterator it=buffer.begin();it!=buffer.end();++it) *it=generator_(); }