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