【发布时间】:2014-05-07 18:44:15
【问题描述】:
我正在为强化学习任务 (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。
有没有更有效的方法?
【问题讨论】:
-
nActions的大小是Q[state]吗?你有numpy吗? -
是的,nActions 是可能动作的数量,因此是每个 Q[state] 的大小。我确实有 numpy
标签: python-2.7 if-statement random reinforcement-learning softmax