評価関数
![]() |
評価関数(ひょうかかんすう、英: evaluation function)とは、コンピュータにゲームをプレーさせるソフトウェアを開発する際に使われるプログラミング技術のひとつで、ゲームの局面の状態を静的に評価し数値に変換する関数のこと。
概要
[編集]評価関数を用いるプログラムは、局面の良し悪しを数値化し、それをもとにして着手を決定する。将棋やチェスでは駒の損得、リバーシでは打つことができる場所の多さ、囲碁では陣地の大きさで評価関数を作る。しかし、現実のゲームでは、単純なアルゴリズムでは測れない要素が複雑に関係し合うため、正確な局面の評価はできない。そのため、着手ごとに枝分かれしていくゲーム木を作り、数手先の局面で評価関数を使用すること(探索)により、着手を決定する方法が用いられる。
原理的には、ゲーム開始から終了までの完全なゲーム木を再現できれば最善手を見つけることができる。しかし、完全なゲーム木は巨大であり、実際には扱うことはできない。そこでミニマックス法を使って探索を途中で終了したり、アルファ・ベータ法を使って枝数を減らし(枝刈り)探索の深さを伸ばす、といったアルゴリズム上の工夫が行われる。
素朴な評価関数の設計において、その精度はプログラマのゲームの理解力に依存する。ゲームのどの要素を重視するか、取捨選択がプログラマに委ねられているためである。近年ではプログラマのゲームの理解だけに頼らない、大量のゲーム履歴データを用いた評価関数の設計の試みにより、精度が大幅に高まった。
将棋のソフトウェアであるBonanzaは、6万局の棋譜から評価関数を自動生成した。2006年5月に行われた第16回世界コンピュータ将棋選手権においてBonanzaが優勝した。これを機に、他の将棋ソフトウェアも大量の棋譜から評価関数を生成する手法を用いるようになった。囲碁では 2006年、モンテカルロ法を応用しランダムに終局までをシミュレートし勝率の高かった着手を選択する手法を使ったソフトウェアCrazy Stoneが登場し、棋力が向上した。