第23回世界コンピュータ将棋選手権出場記

■はじまりから直前まで プログラムの話

 このホームページ(コンピュータ将棋のページではなくね)は20代の頃から始めているので、なんだかんだで15年近くやっていることになる。それだけ長いことやっているとさすがに職場環境なんかもいろいろ変化が起きるわけで、これまで白砂は2回の異動があって3つの職場を経験した。
 しかし、実はこの数字というのは周りを見渡すと珍しくて、普通の人は同じ年数を勤務していたら6つや7つの職場に行っている。恵まれているのかいないのかよく判らないが、とりあえず環境があまり変わらないというのはプログラミングをする上ではいいことなんだろうと思う。というわけで、年が変わる頃、いい加減ちゃんとやらないとな……と思い、「ちゃゆうううううううううううううううう」とか「ピンポンダッシュ」とか「たぅうううううううううううううううう」とか「鍋を囲んだら」とか「ぴゃゆうううううううううううううううう」とか「生スパ生スパ」とか「しゃゆうううううううううううううううう」とか「ビジネスPONPON」とか「ちゃゆうううううううううううううううう」とか言ってるのを(よい子のみんなは知らなくていい世界のことなので聞き流して下さい)少しだけセーブしてちゃんとやることにした。
 去年も少し書いたのだが、れさぴょんをベースに、Sunfishsimkなどのソースを見て勉強して、PVS、NullMove、FutilityCutなどを導入した。そのあと、調子に乗って「静止探索も入れよう」「指し手のオーダリングももう少し簡素なものにしよう」と考えてやってみたのだが、ここでエラい目に遭ってしまった。
 れさぴょんは静止探索がなく、代わりに簡易的にSEE値を足している。
if (depth==depthMax) {
	int value=k.Evaluate()+k.BestEval(SorE);  ←←←←ここ
	// 自分の手番から見た得点を返す
	if (SorE==SELF) {
		return value;
	} else {
		return -value;
	}
}
 これだとどうしても局面が安定しないように思えて、静止探索を導入すれば少しは「おとなしい」指し方になるのかなと考えたのだ。やったことというのはごく基本的(?)なことで、取る手や成る手のみを生成してそれだけで探索していくだけである。
 また、れさびょんでは指し手のオーダリングはEvaluateTeという関数で行っているのだが、この関数では、手を指す前と手を指した後の2回分「局面評価関数(Evaluate)」を呼び、更に手を指したことにより駒取りが発生したりなくなったりしたことも評価している。とても重たい関数なのだ。ここで得られた値は並べ替えだけではなく悪い手の切り捨てにも利用しているので、それだけの価値があるといえばあるのだが、オーダリングが主目的だと考えた場合は明らかに重過ぎる。候補手はあまり落とさず全幅に近い形にして、オーダリングを軽くすることで探索深さを稼いで、それで指し手の正確さを担保した方がいいのではないか……と考えたのである。
 しかしこれがうまくいかない。
 というか、今振り返ってみると、NullMoveについては「導入した」と書いてはいるがバグっていた(と思われる)わけで、そもそもの検証が不十分だったとしか言いようがない。
 このままじゃ単なる改悪だよなぁ……などとぼやいているうちにどんどん時間ばかりが過ぎて行き、結局ほとんど成果も出せないままに4月の終わりまで来てしまった。で、こりゃいかんなぁ……と気合を入れ直した4月25日、カゼをこじらせてダウン(泣)。
 結局、中途半端なままで5月を迎え、細かい改良を少ししただけで当日を迎えてしまった。

「ちゃゆうううううううううううううううう」とか言ってっからいけないんだなorz

■はじまりから直前まで プログラム以外の話

 今度はプログラム以外の話を。
 今年も当日朝に電車で行くことにした。ノートパソコンでの出場なので、そんなに負担にもならないし。結果的に、前乗りしたくてもできなかったと思うし(ホントに5月2日までカゼで寝てた)。
 当日、朝7時すぎに起きて、九段下経由で早稲田まで行った。途中、コンビニに寄って、朝食とペットボトルを5本ほど買って会場へ。受付後会場外で買ってきた朝食を平らげた。天気がよくてよかった。ここのところずっと天気が悪かった気がする。

 開会式も相変わらずで、これはもう伝統なんだな。

やっぱり黒い先生に……(爆)

 なんだかんだと不安だらけなプログラムではあったが、とにもかくにも、今年も始まった。

 


初版公開:2015年5月16日
copyright © S.Hakusa