本文整理汇总了C++中PriorityQueue::saveOrderedQueueAsVector方法的典型用法代码示例。如果您正苦于以下问题:C++ PriorityQueue::saveOrderedQueueAsVector方法的具体用法?C++ PriorityQueue::saveOrderedQueueAsVector怎么用?C++ PriorityQueue::saveOrderedQueueAsVector使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类PriorityQueue
的用法示例。
在下文中一共展示了PriorityQueue::saveOrderedQueueAsVector方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: selectAction
//function is fed with a priority queue of action-values
//generates Boltzmann distribution of these action-values
//and selects an action based on probabilities
float selectAction(PriorityQueue<float, double>& a_queue, unsigned long iterations)
{
typedef std::vector<std::pair<float, double>> VecPair ;
//turn priority queue into a vector of pairs
VecPair vec = a_queue.saveOrderedQueueAsVector();
//sum for partition function
double sum = 0;
// calculate partition function by iterating over action-values
for (VecPair::iterator iter = vec.begin(), end = vec.end(); iter < end; ++iter)
{
sum += std::exp((iter->second) / temperature(iterations));
}
//compute Boltzmann factors for action-values and enqueue to vec
for (VecPair::iterator iter = vec.begin(); iter < vec.end(); ++iter)
{
iter->second = std::exp(iter->second / temperature(iterations)) / sum;
}
//calculate cumulative probability distribution
for (VecPair::iterator iter = vec.begin()++, end = vec.end(); iter < end; ++iter)
{
//second member of pair becomes addition of its current value
//and that of the index before it
iter->second += (iter-1)->second;
}
//generate RN between 0 and 1
double rand_num = static_cast<double>(rand()) / RAND_MAX;
// choose action based on random number relation to priorities within action queue
for (VecPair::iterator iter = vec.begin(), end = vec.end(); iter < end; ++iter)
{
if (rand_num < iter->second)return iter->first;
}
return -10; //note that this line should never be reached
}