Bandit¶
- 詳細な仕様は IDL 定義 を参照してください。
Configuration¶
設定は単体の JSON で与えられる。 JSON の各フィールドは以下のとおりである。
-
method バンディットに使用するアルゴリズムを指定する。 以下のアルゴリズムを指定できる。
設定値 手法 "epsilon_greedy"epsilon-greedy法を利用する。 "epsilon_decdeasing"`Greedy Mix法を利用する "ucb1"UCB1法を利用する。 "softmax"softmax法を利用する。 "exp3"exp3法を利用する。 "ts"Thompson samplingを利用する [1] [1] Thompson Samplingを利用する場合、register_reward APIで登録する報酬が0または1に限られる点に注意。
-
parameter アルゴリズムに渡すパラメータを指定する。
methodに応じて渡すパラメータは異なる。- 共通
assume_unrewarded: 報酬がゼロの場合に register_rewardの呼び出しを省略できるか否かを指定する。 True の場合、select_armによって選択された腕から得られた報酬がゼロの場合にはregister_rewardの呼び出しを省略できる。ただし、register_rewardの呼び出しはselect_armの結果に対応していなければならない。 False の場合、報酬がゼロであっても必ずregister_rewardを呼び出す必要があるが、register_rewardの呼び出しをselect_armの呼び出しとは無関係に行う事ができる。 (Boolean)- epsilon_greedy
epsilon: 腕の選択をランダムに行う確率を指定する。 確率
epsilonで一様分布からランダムに腕を選択し、確率 1 -epsilonで現在最も期待値の高い腕を選択する。 (Float)- 値域: 0.0 <=
epsilon<= 1.0
seed(optional): 乱数の生成に使用するシードを指定する。 省略した場合はシステムクロックがシードとして与えられる。そのため実験の再現性は保証されない。 (Integer)
- 値域: 0 <=
seed<= \(2^{32} - 1\)
- 値域: 0.0 <=
- epsilon_decreasing
腕をランダムに選択する確率を減衰させる割合を指定する。 大きいほど、減衰の進み方は小さくなる。 (Float)
- 値域: 0 <
decreasing_rate< 1
seed(optional): 乱数の生成に使用するシードを指定する。 省略した場合はシステムクロックがシードとして与えられる。そのため実験の再現性は保証されない。 (Integer)
- 値域: 0 <=
seed<= \(2^{32} - 1\)
- 値域: 0 <
- ucb1
- なし
- softmax
tau: 温度パラメータを指定する。 大きくするほどランダムに腕の選択を行い、小さくするほど期待値の高い腕が選ばれやすくなる。 (Float)
- 値域: 0.0 <
tau
seed(optional): 乱数の生成に使用するシードを指定する。 省略した場合はシステムクロックがシードとして与えられる。そのため実験の再現性は保証されない。 (Integer)
- 値域: 0 <=
seed<= \(2^{32} - 1\)
- 値域: 0.0 <
- exp3
gamma: 腕の重みの混合比率を指定する。 gammaを大きくするほど全腕共通の重みの比率が高くなり、小さくするほど各腕固有の重みの比率が高くなる。 (Float)
- 値域: 0.0 <
gamma<= 1.0
seed(optional): 乱数の生成に使用するシードを指定する。 省略した場合はシステムクロックがシードとして与えられる。そのため実験の再現性は保証されない。 (Integer)
- 値域: 0 <=
seed<= \(2^{32} - 1\)
- 値域: 0.0 <
- ts
seed(optional): 乱数の生成に使用するシードを指定する。 省略した場合はシステムクロックがシードとして与えられる。そのため実験の再現性は保証されない。 (Integer)
- 値域: 0 <=
seed<= \(2^{32} - 1\)
- 値域: 0 <=
- 例:
{ "method" : "epsilon_greedy", "parameter" : { "assume_unrewarded" : false, "epsilon" : 0.1 } }
Data Structures¶
Methods¶
-
service
bandit -
bool
register_arm(0: string arm_id)¶ パラメータ: - arm_id -- 新たに登録する腕のID
戻り値: 腕の登録に成功した場合True, 失敗した場合にFalse
arm_idで指定された腕を新たに登録する。
-
bool
delete_arm(0: string arm_id)¶ パラメータ: - arm_id -- 削除する腕のID
戻り値: 腕の削除に成功した場合True, 失敗した場合にFalse
arm_idで指定された腕を削除する。
-
string
select_arm(0: string player_id)¶ パラメータ: - player_id -- 腕を選択されるプレイヤーのID
戻り値: 選択された腕のID
player_idで指定されたプレイヤーの腕を選択する。
-
bool
register_reward(0: string player_id, 1: string arm_id, 2: double reward)¶ パラメータ: - player_id -- 報酬を登録するプレイヤー
- arm_id -- 報酬を登録する腕
- reward -- 報酬の値
戻り値: 報酬の登録に成功した場合 True 失敗した場合 False
player_idで指定されたプレイヤーのarm_idで指定された腕に報酬を登録する。
-
map<string, arm_info>
get_arm_info(0: string player_id)¶ パラメータ: - player_id -- 腕の情報を取得するプレイヤー
戻り値: 指定されたプレイヤーの腕の情報
player_idで指定されたプレイヤーの腕の情報を返却する。
-
bool
reset(0: string player_id)¶ パラメータ: - player_id -- 腕の情報をリセットするプレイヤー
戻り値: 情報のリセットに成功した場合 True 失敗した場合 False
player_idで指定されたプレイヤーの腕の情報を全てリセットする。
-
bool