Powershell(オセロ010_ロジック_4:途中まで最少数)

■石を置くロジックについて考えてみる(その4)。
オセロのロジックの4回目。今回は、途中まで最も少なく相手の石を裏返すようにするもの。後で裏返す石が多くあった方が最終的な勝率では有利にはたらくのではと思い、あえて前半で裏返す石を少なくする。

コードは下の通り($logic_num -eq 4)。
基本的なロジックは最多数と同じ。空欄(_)の位置を取得して順番をランダムにした後、一覧の頭から実際に置くことができるか試し、石を置いた際の盤上の変化を確認する。すべての石を確認し、最も変化の数が少ないもの(0以外)の中で一番初めの位置を採用する。ただ、すべての手順でこのロジックを採用した場合は当然負けるだろうから、途中まで使用し、後はランダムのロジックを使う。空欄(_)の数($blankArray.count)で大体何手目となっているかを把握する。ゲームは、最少数(xx回まで)vsランダムで行う。

            elseif ($logic_num -eq 4){

               $min_diff_num = 32
               $tempposition ="00"
               $inputArray = get-random -input $blankArray -count ([int]::MaxValue)
           
               if($blankArray.count -le 43) {
               } else{
                  foreach ($position in $inputArray) {
                     $tempBoard = [Utility]::copyBoard($boardData)
                     $tempClass = [Player]::new($this.playercolor, $this.logic)
                     $tempClass.reverseStones($position, $tempBoard)
                  
                     $diff_num = [Utility]::compareBoardDiffNum($tempBoard, $boardData)
                     if ($diff_num -ne 0) {
                        if ($diff_num -lt $min_diff_num) {
                           $min_diff_num = $diff_num
                           $tempposition = $position
                        }
                     }
                  }
               $inputArray[0] = $tempposition
               }

まず、黒(最少数)vs白(ランダム)のゲームですべての手順で最少数のロジックを行うと、次のようになった。
黒 1005 vs 白 3864 vs 引き分け 131(勝率20%)
やはり最少数のロジックを使用した黒の勝率は低い。

次に、30回まで、20回まで、10回まで、5回までで最少数のロジックを使用した場合、次のようになった。
(30回まで) 黒 2346 vs 白 2456 vs 引き分け 198(勝率47%)
(20回まで) 黒 2433 vs 白 2372 vs 引き分け 195(勝率49%)
(10回まで) 黒 2508 vs 白 2309 vs 引き分け 183(勝率50%)
( 5回まで) 黒 2558 vs 白 2247 vs 引き分け 195(勝率51%)
回数が少なくなるほどランダムvsランダムに近くなるので、勝率は50%に近づくと思う。そうなる前に、どこかで勝率が高くなるときがあるかと思ったけど、そうはならなかったよう。5回までの勝率51%が、ランダムvsランダムで考えられる勝率50%と有意に差があるのかどうかはよくわからない。統計的に判定することはできると思うけど。
実行速度は、最多数と同じぐらい(5000ゲームで13分程度)。これは、最多数と同じく、置くことができる位置をすべて検証しているからだろう。実際、最少数のロジックの使用を少なくすると時間は短縮される。

あえて前半で裏返す石を少なくすると有利にゲームが進められるイメージがあったけど、あまり関係ないみたい。