AI-COMの実装である評価関数について説明する.

AI-COMとは?で記述したTestAIクラスは,これ単体で動作するものではありません.周辺のクラス群で構成された,AI-COMフレームワークの一部になります.周辺のクラスとして,表示機能や思考によく使う関数類が用意されているため, TestAIクラスはシンプルな実装になっています.

このフレームワークの持つ機能(積み込みの決定)について,言葉での説明を試みます.

評価関数とは

ある局面においてツモ1組が与えられたとき,置きうる場所は,
  • 縦積み X=0〜5 ×2(上下入れ替え) = 12
  • 横積み X=0〜4 ×2(左右入れ替え) = 10

の計22通りあります.(X=0〜5というのは,フィールドの横幅が6であることによります)

縦積み (6手)

縦積み・上下逆 (6手)

横積み (5手)

横積み・左右逆 (5手)

積むということは,この22通りから最善の1手を選択することに他なりません.

どの手が最善かを判断する方法ですが,22手それぞれに,あるルールに従った得点を付けます.そして,得点が最も高い手が最善であるとみなすという方法を採ります.

すると,このルールをどのように決めるかが,思考ロジックを作ることになります.このルールは,コンピュータ将棋などの分野では「評価関数」と呼ばれています.

たとえば仮に,「即消し一辺倒」のCOM用に評価関数を作るとすれば,下の例の場合

評価関数-低

評価関数-高

左の手よりも,右の手の方に高い得点を与えることになります.右の手では,赤を消すことができるからです.

評価関数の具体例

上述の「即消し一辺倒」の評価関数を考えてみます.基本はこれです.
  • (1) 着目している積みに対して,隣接している同色の個数

たとえば左の手の場合は,

積み手の2個のうち下を基準にして数えれば1個,

上を基準にして数えれば1個,

の計2個です.→ 評価得点=2点

しかし右の手の場合は,

下を基準にして数えて3個,

上を基準にして数えても3個

ということで計6個.→ 評価得点=6点

この結果,得点の高い右側の手が選ばれることになり,「即消し」の動きが実現できます.

が,しかし...フィールドをよく見ると,同じ即消しならさらに良い手があります. この手です.

同じ消すならば,高い位置にあるのを消す方が,勝負を考えたときには望ましいです. 高い位置にあるものを優先的に消さないと,上段に詰まってきてピンチになったときに, 上が詰まって死にそうなのに下の関係ないのを消すという間抜けな事態が起こり得ます.

これを取り入れて,最終的な評価関数は,

  • (1) 着目している積みに対して,隣接している同色の個数
  • (2) (1)が1以上の場合は,1.に(13-積み手の着地Y座標) を加える

となります.

kamolandをフォローしましょう


© 2021 KMIソフトウェア