我在Q学习中使用Boltzman探索,在每个状态中至少有10个动作。我知道,只有两个动作,玻尔兹曼探索就可以非常简单地应用如下:
使用Boltzman探索方程计算两个动作的pr1和pr2。
产生一个随机数r
假设pr1> pr2。如果r pr1,则采取对应于pr2的措施。
但是,我该如何执行10个动作?在每个决策步骤,我都会更新所有动作的概率。这给了我最佳行动可能性最高的所有行动的概率分布。在这种情况下,如何使用Boltzman探索选择动作?
最佳答案
这是加权随机抽样的绝佳讨论:Darts, Dice, and Coins。
这是我对Vose的Alias方法的实现:
class WeightedRandom
{
private alias : array[int];
private prob : array[double];
private random : Random;
public this(p : array[double], random : Random)
{
this.random = random;
def n = p.Length;
alias = array(n);
prob = array(n);
def small = Queue(n);
def large = Queue(n);
def p = p.Map(_ * n : double);
foreach (x in p with i)
(if (x < 1.0) small else large).Enqueue(i);
while (!small.IsEmpty && !large.IsEmpty)
{
def s = small.Dequeue();
def l = large.Dequeue();
prob[s] = p[s];
alias[s] = l;
p[l] = p[l] + p[s] - 1;
(if (p[l] < 1.0) small else large).Enqueue(l);
}
while (!large.IsEmpty)
prob[large.Dequeue()] = 1.0;
while (!small.IsEmpty)
prob[small.Dequeue()] = 1.0;
}
public NextIndex() : int
{
def i = random.Next(prob.Length);
if (random.NextDouble() < prob[i])
i;
else
alias[i];
}
}
关于machine-learning - 在Q学习中进行两个以上 Action 的Boltzmann探索,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11846387/