contents memorandum はてな

目次とメモを置いとく場

『Java将棋のアルゴリズム――アルゴリズムの強化手法を探る[I・O BOOKS]』(池泰弘 工学社 2016//2007)

著者:池 泰弘[いけ・やすひろ](1971-) プログラマー。ITコンサルタント
シリーズ名:I/O BOOKS
備考:以下個人的なメモ。
  本書に至る改訂の履歴と、使用するプログラミング言語
 C++ 『コンピュータ将棋のアルゴリズムーー最強アルゴリズムの探求とプログラミング』(2005年)
 JavaJava将棋のアルゴリズムーーアルゴリズムの強化手法を探る』(2007年)
 JavaJava将棋のアルゴリズムーーアルゴリズムの強化手法を探る[改訂版]』(2016年)


���Ҿ�����Java������ ���르�ꥺ��[������]

 2012年、コンピュータとプロ棋士が対戦する「電王戦」がはじまりました。 そして2015年10月、情報処理学会がコンピュータ将棋の実力はトッププロ棋士に追い付いている(統計的に勝ち越す可能性が高い)という分析結果を出し、「コンピュータ将棋プロジェクト」の終了を宣言しました。 しかし、「コンピュータ将棋」の強さがプロ棋士を越えたからと言って、開発を辞めてしまう開発者はどれくらいいるのでしょうか。その程度のことで開発を辞める開発者は、おそらく誰もいないでしょう。
  *   
 このように、大きな動きの中にある今、「コンピュータ将棋」ですが、本書はそんな「コンピュータ将棋」のアルゴリズムを、一から解説しています。 本書では、使用言語としてJavaを使っていますが、アルゴリズムに絞って解説しているので、「C」や「C++」など他の言語にも応用することが可能です。 また、「将棋」のルールや駒の動かし方から説明しているので、「将棋」がよく分からない人でも手軽に読むことができます。 本書掲載の「将棋プログラム」もダウンロードできるので、プログラム制作の参考になるのはもちろん、「将棋プログラム」の実際の動きを見ながらアルゴリズムを学ぶことができます。
 ※本書は好評だった「Java将棋のアルゴリズム」に最新の情報を加筆し、現状に合わせてプログラムを一新しました。

【目次】
はじめに/改訂版にあたって [002-003]
CONTENTS [004-005]
ファイルのダウンロードについて [005]


1章 将棋のルール
1-1 将棋のルール 008
  将棋の基本ルール
  盤上の位置を表わす符号
  駒の名称と動き方
  禁手
  棋譜の表記法


2章 将棋のルールの実装
2-1 基本的な定数の定義 020
2-2 「局面」の表現方法 023
2-3 「位置」の表現方法 027
2-4 「手」の表現方法 028
2-5 局面での合法手の生成 029


3章 簡単なユーザー・インターフェイスと思考ルーチンの実装
3-1 インターフェイスと思考ルーチンの実装 054


4章 「局面の評価」の実装と「思考ルーチン」の改造 「将棋」のルールの実装
4-1 評価関数 064
4-2 駒の価値 065


5章 MinMaxとαβ法
5-1 先読みをする 072
5-2 MinMax法 073
5-3 αβ法とは 079
5-4 「MinMax」と「NegaMax」、「αβ」と「Negaαβ」 085


6章 実装の高速化
6-1 高速化の実際 090
    盤面の一次元配列化
    盤面を一手戻す関数の追加
    持ち駒の表現の配列化
    評価関数の差分計算
    玉の位置の保持
    局面の中で利きを管理する
    『ピン』の概念を導入する


7章 序盤定跡
7-1 定跡とは 110
7-2 定跡データの保持の方法 111
7-3 定跡通りに指すためのプログラム 112
7-4 定跡データを用意する方法 116
  PLC形式のデータ
  棋泉形式のデータ


8章 序盤の駒組み
8-1 序盤の考察 126
  実際のプログラミング


9章 中終盤の駒の価値の評価
9-1 中終盤での駒の評価 142
9-2 実際のプログラム 143


10章 指し手の評価と前向き枝刈り
10-1 指し手の評価 158
10-2 αβ法と組み合わせる 172
10-3 手法の評価 173


11章 ハッシュ法とハッシュ法を用いた高速化
11-1 ハッシュ法とは 178
11-2 将棋におけるハッシュの方法 179
11-3 乱数を用いたハッシュ表の生成 180
11-4 ハッシュ法を用いた高速化 185


12章 通信の実装
12-1 CSAプロトコル 196
12-2 CSAプロトコルの実装 196


13章 相手思考時間の利用
13-1 スレッドとは 208
13-2 通信や相手の入力などを待ちながら思考する 208


14章 「複数スレッド」での探索
14-1 並列化 214
14-2 変更を加えたプログラム 215


最終章 これからの課題とヒント
15-1 課題とヒント 230
15-2 展望 ~未来に向けて~ 234


索引 [237-239]






【抜き書き】
・ピンの処理高速化にまつわる複雑さ(p.108)。
 前著(※『コンピュータ将棋のアルゴリズム――最強アルゴリズムの探求とプログラミング』(2005年)の方を指す)と本書との内容の異動の理由を説明している。(本書にはサンプルコードがサイト上で公開されているとは書いていなかったので、)読者が、その処理を高速に動かすためのアルゴリズムを知るには、前著を古書で探し、C++言語を(すこし)学ぶ必要がある……ということになる。

 これを実装するには、利きを管理する必要がある。

 ・自分の玉に利きがある(王手をかけられている)場合には、王手を防ぐ手のみを生成する。
 ・自分の玉を動かす際には、敵の利きのないところにのみ動くようにする。

 これらの処理は、かなり複雑になるため、読者への課題としたい。なお、前著「コンピュータ将棋のアルゴリズム」では、最初から『ピン』や『利き』を意識したデータ構造となっており、高速ではあるが非常に分かりにくいものになっていたことを追記しておきたい。

棋書:実戦集

■小型

永瀬流 負けない将棋

永瀬流 負けない将棋

実戦の振り飛車破り

実戦の振り飛車破り

■大型

永世竜王への軌跡

永世竜王への軌跡

広瀬流四間飛車穴熊勝局集

広瀬流四間飛車穴熊勝局集

升田幸三名局集

升田幸三名局集

将棋戦型別名局集1 穴熊名局集

将棋戦型別名局集1 穴熊名局集

羽生VS森内百番指し

羽生VS森内百番指し

森下の対振り飛車熱戦譜

森下の対振り飛車熱戦譜

小池重明実戦集―実録・伝説の真剣師

小池重明実戦集―実録・伝説の真剣師

棋書:終盤関連

 詰将棋,必至,手筋,囲い崩し,など.

■囲い・その他

佐藤康光の実戦で使える囲いの急所 (NHK将棋シリーズ)

佐藤康光の実戦で使える囲いの急所 (NHK将棋シリーズ)

美濃崩し200 (最強将棋レクチャーブックス)

美濃崩し200 (最強将棋レクチャーブックス)

広瀬流穴熊 終盤の極意

広瀬流穴熊 終盤の極意

羽生善治の終盤術(1) 攻めをつなぐ本 (最強将棋21)

羽生善治の終盤術(1) 攻めをつなぐ本 (最強将棋21)

羽生善治の終盤術〈3〉堅さをくずす本 (最強将棋21)

羽生善治の終盤術〈3〉堅さをくずす本 (最強将棋21)

逆転のメカニズム (マイナビ将棋BOOKS)

逆転のメカニズム (マイナビ将棋BOOKS)

……『逆転のメカニズム』欲しい。

■必至、次の一手

寄せの手筋168 (塚田泰明の速攻将棋)

寄せの手筋168 (塚田泰明の速攻将棋)

寄せの手筋200 (最強将棋レクチャーブックス)

寄せの手筋200 (最強将棋レクチャーブックス)

森信雄の強くなる将棋 終盤の鬼

森信雄の強くなる将棋 終盤の鬼

詰将棋

3手詰ハンドブック

3手詰ハンドブック

3手詰ハンドブック〈2〉

3手詰ハンドブック〈2〉

5手詰ハンドブック

5手詰ハンドブック

5手詰ハンドブック〈2〉

5手詰ハンドブック〈2〉

7手詰ハンドブック

7手詰ハンドブック

7手詰ハンドブック〈2〉

7手詰ハンドブック〈2〉

マイコミ将棋文庫SP 詰将棋道場 挑戦編

マイコミ将棋文庫SP 詰将棋道場 挑戦編

羽生流で上達! 新しい詰将棋初段150題

羽生流で上達! 新しい詰将棋初段150題

もっと羽生流! 初段+プラスの詰将棋150題

もっと羽生流! 初段+プラスの詰将棋150題

脳トレ5手詰

脳トレ5手詰

全問実戦型!脳トレ7手9手詰 (将棋連盟文庫)

全問実戦型!脳トレ7手9手詰 (将棋連盟文庫)

解いて役立つ5手詰200問 (将棋連盟文庫)

解いて役立つ5手詰200問 (将棋連盟文庫)

読みを鍛える7手詰200問 (将棋連盟文庫)

読みを鍛える7手詰200問 (将棋連盟文庫)

榛名図式―桑原辰雄詰将棋作品集

榛名図式―桑原辰雄詰将棋作品集

棋書:対抗型

 前回のついでに,対抗型をざっと片付ける.
 区分は〔中飛車三間飛車四間飛車,角交換振り飛車,総合〕

中飛車

マイコミ将棋BOOKS 遠山流中飛車持久戦ガイド

マイコミ将棋BOOKS 遠山流中飛車持久戦ガイド

三間飛車

対居飛穴最終兵器 矢倉流中飛車の極意 (マイナビ将棋BOOKS)

対居飛穴最終兵器 矢倉流中飛車の極意 (マイナビ将棋BOOKS)

四間飛車

四間飛車を指しこなす本〈1〉 (最強将棋塾)

四間飛車を指しこなす本〈1〉 (最強将棋塾)

四間飛車を指しこなす本〈3〉 (最強将棋塾)

四間飛車を指しこなす本〈3〉 (最強将棋塾)

四間飛車の急所〈1〉 (最強将棋21)

四間飛車の急所〈1〉 (最強将棋21)

四間飛車の急所〈2〉急戦大全(上) (最強将棋21)

四間飛車の急所〈2〉急戦大全(上) (最強将棋21)

四間飛車の急所〈3〉 急戦大全(下) (最強将棋21)

四間飛車の急所〈3〉 急戦大全(下) (最強将棋21)

四間飛車の急所 (4) 最強の4一金型 (最強将棋21)

四間飛車の急所 (4) 最強の4一金型 (最強将棋21)

四間飛車激減の理由 (マイナビ将棋BOOKS)

四間飛車激減の理由 (マイナビ将棋BOOKS)

……Amazonでは、【居飛車穴熊編】と【急戦編】が同一視されている。

振り飛車穴熊

マイコミ将棋BOOKS よくわかる振り飛車穴熊

マイコミ将棋BOOKS よくわかる振り飛車穴熊

四間飛車穴熊の急所 (最強将棋21)

四間飛車穴熊の急所 (最強将棋21)

四間飛車穴熊の急所〈2〉相穴熊編 (最強将棋21)

四間飛車穴熊の急所〈2〉相穴熊編 (最強将棋21)

解明!相穴熊の最先端 (マイナビ将棋BOOKS)

解明!相穴熊の最先端 (マイナビ将棋BOOKS)

とっておきの穴熊退治 (マイナビ将棋BOOKS)

とっておきの穴熊退治 (マイナビ将棋BOOKS)

振り飛車総合
玉頭位取り戦法  対振飛車必勝戦法

玉頭位取り戦法 対振飛車必勝戦法

渡辺明の居飛車対振り飛車 I 中飛車・三間飛車・向かい飛車編 (NHK将棋シリーズ)

渡辺明の居飛車対振り飛車 I 中飛車・三間飛車・向かい飛車編 (NHK将棋シリーズ)


■角交換振り飛車

角交換四間飛車 徹底ガイド (マイナビ将棋BOOKS)

角交換四間飛車 徹底ガイド (マイナビ将棋BOOKS)

■奇襲・マイナー

米長
ネット将棋で勝つ米長の奇襲 (マイナビ将棋文庫)

ネット将棋で勝つ米長の奇襲 (マイナビ将棋文庫)

棋書:相居飛車

 慣用の区分が細かいので、今回は大雑把な戦型ごとにまとめる。


□相掛かり

よくわかる相掛かり (マイナビ将棋BOOKS)

よくわかる相掛かり (マイナビ将棋BOOKS)

□矢倉
森下卓の矢倉をマスター (NHK将棋シリーズ)

森下卓の矢倉をマスター (NHK将棋シリーズ)

マイコミ将棋BOOKS 対急戦矢倉必勝ガイド

マイコミ将棋BOOKS 対急戦矢倉必勝ガイド

変わりゆく現代将棋 下

変わりゆく現代将棋 下

□角換わり
マイコミ将棋BOOKS よくわかる角換わり

マイコミ将棋BOOKS よくわかる角換わり

とっておきの右玉 (マイコミ将棋BOOKS)

とっておきの右玉 (マイコミ将棋BOOKS)


 他にも数冊あるが、人に貸し出している。また私が読んだ棋書も借りものが多かった。
 とにかく、現在手元にある棋書はこれがすべて。