PHPerの知らないビットボードの世界 by Qwert

PHPerKaigi 2021
採択
2021/03/27 15:30〜
Track B
レギュラートーク(20分)

PHPerの知らないビットボードの世界

ボードゲーム、お好きですか?

僕が好きなボードゲームのひとつに『モザイク』というゲームがあります。
趣味が高じて『モザイク』のライブラリや、それを用いた対戦Webアプリや機械学習させたAIまで作ってしまったほどです。
(ただし本人の腕前はサッパリ)

ところで、ゲームの盤面を管理するための「ビットボード」という手法をご存じでしょうか?
2進数を用いて盤面を表現し、ビット演算を用いて盤面を計算します。
この手法はとても高速で、将棋やリバーシといったゲームの機械学習分野でも広く使われています。

本トークでは『モザイク』をビットボードで実装した経験を踏まえ、以下の内容をお話しします。
(セッション内で扱うコードはすべてPHPです)

  • ビットボードとは
  • ビットボードって本当に速いの? 比べてみた
  • 『モザイク』をビットボードで表現するには
  • 盤面の計算

以下の内容は時間があればお話しします。

  • セッション内で用いるビット演算の説明
  • 64bitより大きい盤面を扱う方法

以下の内容は扱いません。

  • リバーシや将棋のビットボードについて (『モザイク』しか実装したことがないため)
  • 機械学習やAIについて (そちら方面は素人であるため)