Slide 1

Slide 1 text

JavaでオセロAI作成 東京理科大学 創域理工学部情報計算科学科3年 宮内翼 2023/04/15 © 2023 RICORA Programming Team 1

Slide 2

Slide 2 text

目次 自己紹介 背景など ビットボード 文字列とビットボードの変換 評価関数 盤位置 確定石 候補数 αβ法 2023/04/15 © 2023 RICORA Programming Team 2

Slide 3

Slide 3 text

自己紹介 東京理科大学 創域理工学部情報計算科学科3年所属 RICORA部長してます RICORA(RIkadai COmputer Research Association)は、東京理科大学野田キャンパスを拠 点として活動している電子計算機好きのためのサークルです。駄弁ったり自由にそれ ぞれの活動をします。 私は機械学習メイン 趣味はゲームしたりアニメ見たり 2023/04/15 © 2023 RICORA Programming Team 3

Slide 4

Slide 4 text

背景など 学校の授業でオセロサーバーと通信するAIクライアントの大会があり、優勝できまし た。 文字列で盤面を受け取り、文字列でコマを置く命令を送る。 10秒以内にコマを置かないと強制負け。 指定言語はJava。 私はオセロ初心者です。 2023/04/15 © 2023 RICORA Programming Team 4

Slide 5

Slide 5 text

ビットボード 盤面を二進数で表現する。自分の駒を1、空のマスと相手のコマを0で表し、両陣営そ れぞれが持つ。とても速い | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |白|黒| | | | | | | |黒|白| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 黒:0000000000000000000000000000100000010000000000000000000000000000 白:0000000000000000000000000001000000001000000000000000000000000000 2023/04/15 © 2023 RICORA Programming Team 5

Slide 6

Slide 6 text

文字列とビットボードの変換 文字列 "BOARD 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 1 0 0 0 0 0 0 1 -1 0 0 0..." ↓ 配列 {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,1,0,0,0,0,0,0,1,-1,0,0,0,0,0,0,0,0,0,0,0...} ↓ ビットボード 黒:0000000000000000000000000000100000010000000000000000000000000000 白:0000000000000000000000000001000000001000000000000000000000000000 2023/04/15 © 2023 RICORA Programming Team 6

Slide 7

Slide 7 text

評価関数 その盤面がどれだけ良いか評価するための関数。 盤位置と確定石と候補数を用いる。 2023/04/15 © 2023 RICORA Programming Team 7

Slide 8

Slide 8 text

盤位置 盤面のマスに価値を持たせ、自分の 駒があるなら足し算し、相手の駒が あるなら引き算する。 引用 https://note.com/nyanyan_cubetech/ n/n17c169271832? magazine_key=m54104c8d2f12 2023/04/15 © 2023 RICORA Programming Team 8

Slide 9

Slide 9 text

確定石 確定石とは、もうひっくり返らない石のこと。 確定石を正確に数えると計算量が多いため、外周の近似値のみを求める 引用 https://note.com/nyanyan_cubetech/n/n17c169271832?magazine_key=m54104c8d2f12 2023/04/15 © 2023 RICORA Programming Team 9

Slide 10

Slide 10 text

候補数 候補数とは、コマを置けるマスの数のこと。 候補数が多い方が良いらしい。 2023/04/15 © 2023 RICORA Programming Team 10

Slide 11

Slide 11 text

重み 評価関数は、(重み)×(盤位置)+(重み)×(確定石)+(重み)×(候補数)とする。 それぞれに重みを掛ける事で、どの数を重要視するかを決められる。最終的に、盤位 置を1倍、確定石を35倍、候補数を5倍で望みました。 2023/04/15 © 2023 RICORA Programming Team 11

Slide 12

Slide 12 text

minimax法 αβ法はminimax法を効率化したものなので、先にこちらを解説。 2手読みの場合、1手目は自分が、2手目は相手が打ちます。なので、自分の番では一番 評価関数の値が高く、相手の番では評価関数の値が低い手を選択します。 これを全てのパターンで試し、一番評価関数の値が高い手を選びます。 2023/04/15 © 2023 RICORA Programming Team 12

Slide 13

Slide 13 text

αβ法 minimax法は非効率なので、無駄な探索をカットする。 自分の手番では、一番高い値を選択するので、すでに計算した手よりも低い手は探索 しない。 相手の手番では、一番低い値を選択するので、すでに計算した手よりも高い手は探索 しない。 という手法をminimax法に取り込んだのがαβ法です。 2023/04/15 © 2023 RICORA Programming Team 13

Slide 14

Slide 14 text

参考にしたサイト等 オセロAIの教科書|にゃにゃん(山名琢翔)|note https://note.com/nyanyan_cubetech/m/m54104c8d2f12 ビットボードによる αβ 法 - interprism's blog https://interprism.hatenablog.com/entry/bitboard リバーシの評価関数について https://www.info.kindai.ac.jp/~takasi-i/thesis/2012_09-1-037-0133_S_Shiota_thesis.pdf 私のgithub https://github.com/tasotaku/OthelloAI 2023/04/15 © 2023 RICORA Programming Team 14