静かなる名辞

pythonとプログラミングのこと



【python】一定の確率で違う選択をする

 ※注意!

 この記事の内容も間違ってはいませんが、もっと良さそうな方法を後から見つけました。

 こちらの記事も参照してください。

【python】複数の選択肢から確率で選ぶ - 静かなる名辞

本文

 タイトル通りのものが強化学習の実装で必要になった。

  • \epsilonの確率で処理Aを行う
  • 1-\epsilonの確率で処理Bを行う

 理想としては、\epsilonを引数として与えてやれば、True or Falseを返すような関数が標準ライブラリにあれば良かったのだが、なかった。見落としてるかもしれないが。

 どう書いたらええんかいな、と若干迷ったが、冷静に考えたら簡単だった。

from random import random

def p_select(epsilon):
    if epsilon > random():
        return True
    else:
        return False

 確認のために10000回回し、TrueとFalseの数をカウントする。

>>> lst = [p_select(0.2) for x in range(10000)]
>>> lst.count(True)
7986
>>> lst.count(False)
2014

 問題なさそう。ただし、この実装は遅いはずなので、速度がほしければnumpyとか使って上手く書く必要がある。今回はとりあえず必要ないので、そこまではやっていない。