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;
}
Exemplo n.º 2
0
	//
	//	SUMMARY: 取得系メソッド
	//
	KTL_INLINE RandomResult NativeVariateRandom::random() {
		return generator_();
	}
Exemplo n.º 3
0
 /// Generate a new UUID.
 boost::uuids::uuid make_uuid() { return generator_(); }
Exemplo n.º 4
0
//-- 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_();
}
Exemplo n.º 5
0
 /// 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_();
 }