スコアの計算方法が人によって異ならず,他の人と同様にスコア計算することは,公平な競技では重要である.ここでは,公平なスコア計算を行うために,以下のことを考える.
- プレーヤー(n本腕バンディットを解く人)は,解くプログラムを以下のように関数化する
- void init_player();
- void set_arm_num(int arm_num);
- int decision_making(double previous_reward);
- decision_makingとは,意思決定の意味である.つまり,バンディットのどの腕を選択するかを考える関数である.この関数の返り値は,選択する腕である.
- 引数は,意思決定(次にどの腕を選ぶか)を考え行うために必要と思われる情報とした.
- 引数 previous_rewardは前回選択した腕でいくら報酬がもらえたか,である.試行の第1回目は"前回"がないので,この場合には"0.0"が与えられる.
- void close_player();
- なんか終了処理をする.特にポインタなどを使っている場合、この中でfreeをするのに使う.
- 上記関数を以下のファイルで実装し,オフィシャルに提供する
- player.h
- player.o
- gcc -c player.c で作成
- player.cは関数decision_making(...)の実装を行う.
- オフィシャル(n本腕バンディットを作って提供する人)はプレーヤーから提供された関数を元に,以下のプログラムによってスコア計算を行う.
- gcc -o game collect.c player.c bandit**.o での作成が慣れてきたら,以下を行い,公式スコアに登録してみる
- cp player.c /mnt/public/YakanEnshuB/bandit/******/player.c
- *****は自分の学籍番号.例えば学籍番号100000なら cp player.c /mnt/public/YakanEnshuB/bandit/1000000/player.c
- 中間モニタにて公式スコアを計算し続けているので、自分のスコアを確認
- 注意
- 自分のスコアを計算している時には,cp player.c ....を行わない方がよい.