強化学習タスク ( 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 が選択されます。
これを行うより効率的な方法はありますか?