我正在为强化学习任务(http://www.incompleteideas.net/book/ebook/node17.html)实施 Softmax 动作选择策略。
我提出了这个解决方案,但我认为还有改进的余地。
1-在这里我评估概率
prob_t = [0]*3
denominator = 0
for a in range(nActions):
denominator += exp(Q[state][a] / temperature)
for a in range(nActions):
prob_t[a] = (exp(Q[state][a]/temperature))/denominator
2-在这里,我将 ]0,1[ 范围内的随机生成数与动作的概率值进行比较:
rand_action = random.random()
if rand_action < prob_t[0]:
action = 0
elif rand_action >= prob_t[0] and rand_action < prob_t[1]+prob_t[0]:
action = 1
else: #if rand_action >= prob_t[1]+prob_t[0]
action = 2
编辑:
示例:rand_action 为 0.78,prob_t[0] 为 0.25,prob_t[1] 为 0.35,prob_t[2] 为 0.4。概率总和为 1。0.78 大于动作 0 和 1 (prob_t[0] + prob_t[1]) 的概率之和,因此选择动作 2。
有没有更有效的方法来做到这一点?