AI-COMの実装である評価関数について説明する. AI-COMとは?で記述したTestAIクラスは,これ単体で動作するものではありません.周辺のクラス群で構成された,AI-COMフレームワークの一部になります.周辺のクラスとして,表示機能や思考によく使う関数類が用意されているため, TestAIクラスはシンプルな実装になっています. このフレームワークの持つ機能(積み込みの決定)について,言葉での説明を試みます.
評価関数とはある局面においてツモ1組が与えられたとき,置きうる場所は,
の計22通りあります.(X=0〜5というのは,フィールドの横幅が6であることによります)
![]()
![]()
![]()
![]() 積むということは,この22通りから最善の1手を選択することに他なりません. どの手が最善かを判断する方法ですが,22手それぞれに,あるルールに従った得点を付けます.そして,得点が最も高い手が最善であるとみなすという方法を採ります. すると,このルールをどのように決めるかが,思考ロジックを作ることになります.このルールは,コンピュータ将棋などの分野では「評価関数」と呼ばれています. たとえば仮に,「即消し一辺倒」のCOM用に評価関数を作るとすれば,下の例の場合
![]()
![]() 左の手よりも,右の手の方に高い得点を与えることになります.右の手では,赤を消すことができるからです.
評価関数の具体例上述の「即消し一辺倒」の評価関数を考えてみます.基本はこれです.
たとえば左の手の場合は, ![]()
![]() の計2個です.→ 評価得点=2点 しかし右の手の場合は, ![]()
![]() ということで計6個.→ 評価得点=6点 この結果,得点の高い右側の手が選ばれることになり,「即消し」の動きが実現できます. が,しかし...フィールドをよく見ると,同じ即消しならさらに良い手があります. この手です.
![]() 同じ消すならば,高い位置にあるのを消す方が,勝負を考えたときには望ましいです. 高い位置にあるものを優先的に消さないと,上段に詰まってきてピンチになったときに, 上が詰まって死にそうなのに下の関係ないのを消すという間抜けな事態が起こり得ます. これを取り入れて,最終的な評価関数は,
となります. |