目次
Java将棋のアルゴリズム
コンピュータ将棋ゲームを作りたいと思って「Java将棋のアルゴリズム」を買ったことがあるのですが、実装する前に新しい版が出ていました。「Java将棋のアルゴリズム―アルゴリズムの強化手法を探る (I・O BOOKS) 」です。最新のJava SDKに対応したそうで、「複数のスレッドで探索」もできるようになったそうです。
読み物
最近はプロ棋士がコンピュータに勝てなくなりつつあり、人工知能や機械学習の成果が適用されているからなんだろうな、と考えています。コンピュータ将棋の話は、下記のように書籍がたくさん出ているので、そちらを読んでみるとわかるのだと思います。ボナンザの出現がターニングポイントになっているという話は聞いたことがあります。コンピュータの序盤での戦い方に革命を起こしたのが凄いですね。
- ボナンザVS勝負脳―最強将棋ソフトは人間を超えるか (角川oneテーマ21)
- アマ4段を超える―コンピュータ将棋の進歩〈4〉
- アマトップクラスに迫る―コンピュータ将棋の進歩〈5〉
- 人間に勝つコンピュータ将棋の作り方
リバーシ
ということで、最近は人工知能や深層学習や機械学習まわりが俄然注目を浴びているわけですが、従来の総当り系のアルゴリズムは中盤から終盤にかけては威力を発揮するわけで、知らないよりは知っていたほうが良いでしょう。
総当りのアルゴリズムでコンピュータが勝てるゲームとしてはリバーシがあったりするので、実はそちらを先に勉強すると良いのかもしれません。基礎を知りたいなら「ゲーム計算メカニズム」もいいかもしれません。
ちなみに、デザインパターン本で珍しく五目並べやオセロを取り上げている書籍もあるので紹介しておきます。こういうデザインパターンの応用例を知っているとゲーム実装時に楽ができるはず。
Deep Learning
深層学習の方もしっかり使いたいということなら、Deep LearningのJava用参考資料がありますね。個人的には、このあたりの分野ではPython実装が流行っているようなので、Javaで実装しなければならない、ということでないなら、Pythonで学んだほうが良いような気もしています。とはいえ、Pythonの学習に対してのハードルをどれくらい感じるかで、そのあたりは変わってきますから、人それぞれですかね。
その他
他にも下記の書籍が参考になりそうです。人工知能というと関数型プログラミング言語が得意というイメージがあるのですが、現在だと基本機能を提供するフレームワークやライブラリがあるかどうかの方が重要なので、使用するプログラミング言語については、それほど重要ではなくなっている気がします。新しいアルゴリズムを開発したいのであれば、言語にはこだわっる必要があるのですが、そうでなければ、理論を理解することの方が重要で、実装は選択肢が多いということですね。
- Java人工知能プログラミング -オブジェクト指向と関数スタイルによるAIの実装-
- 関数型オブジェクト指向AI プログラミング―Scala による人工知能の実装
- ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装
この分野に対しては、ずっと興味があって、周期的に勉強をしようという気分が盛り上がるのですが、なかなかじっくりと時間をかけて理解をするという時間をとることができなくて、なかなか深いところまではできないのですが、こうやって流行するたびにチェックはして最低限の知識は持てるようにしておきたいと考えています。
ということで、紹介した書籍を全部読んでいるわけではないのですが、調べてみたので記事にしてみました。実際にいくつかは手元にあるので、時間をとって身につけたいですね。