スコアの計算方法が人によって異ならず,他の人と同様にスコア計算することは,公平な競技では重要である.ここでは,公平なスコア計算を行うために,以下のことを考える.

  • プレーヤー(n本腕バンディットを解く人)は,解くプログラムを以下のように関数化する
    • void init_player();
      • なんか初期化するのに使う.
    • void set_arm_num(int arm_num);
      • バンディットの腕の数(n)を知るための関数
    • 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 ....を行わない方がよい.