Basic Technic #3

Thinking
基本思考ルーチン
ニューロンの考え方を入れる前に、基本の思考ルーチンを構築しておく.何れにしても、学習されていないニューロンは、何も答えを出してくれない訳だから、このルーチンは必須となる訳だ
(Jan.11/2001)

  • 本来の思考ルーチン
    オセロにおいて、本格的な思考ルーチンは、多分パターンの参照までして最善手を割り出すのだろうが、そこまで考えてはいられない.わりと単純な範囲で本来の思考ルーチンを考えると、多分、重み付けをしたマップ(例えば、4角の升は大きい値を入れる)を用意して、打石可能な位置について、ランダムで得た数値をボードの重みと掛け合わせて、最大の値を示した位置に打石する.という方法と、返せる石の数が多い場所を選んで打石する.という方法だろうか?しかしながら、この様な方法は、後々ニューロンの思考を邪魔しかねないので、今回は、以下に示す最も単純と思われる思考ルーチンを採用する. (Jan.11/2001)

  • 今回採用の思考ルーチン
    ここで示す思考ルーチンは、最終的にはニューロンの計算を追加して完成させるので、不完全であるが、少なくとも最初の対戦から2,3回は、このルーチンにて戦う事になる.そのアルゴリズムは、先にPMAP[][]に取得した、打石可能位置の全てにおいて、乱数を取得し、その最大値を示した位置に打石するという方法である.


    void think_initalize(void)
    {
      randomize() ;
    }

    int decide(void)
    {
      int i,j,dpos,v,max_v ;
      max_v=0 ; dpos=-1 ;
      for(i=0 ; i<8 ; i++){
       for(j=0 ; j<8 ; j++){
        if(PMAP[i][j]){
         v=random(200)+100 ;
         /* ここに、ニューロによる計算及び
         ここで出た乱数との比較を追加 */
         if(v>max_v){
          dpos=(i<<3)+j ; max_v=v ;
         }
        }
       }
      }
      return(dpos) ;
    }


    関数decide()が、思考ルーチンである.このルーチンに、後からニューロンの計算結果を加味し、ここで得た乱数と比較する事によって、どちらを採用するかを決定していく.尚、このルーチンが、(x,y)の位置を決定した場合、x*8+yの値を返し、決定しなかった場合は-1を返す.受け取った側は、戻り値が、−1でなければ、8で割った値をxとし、下位3ビットをyとすれば、打石位置が確定する.また、このルーチンで使用しようとしている乱数は、100〜300までの値を採るが、今後の設計変更では、変更される場合も有る.
    (Jan.11/2001)


Since Jan.10/2001 last update Jan.11/2001,

Return