1. ホーム
  2. java

[解決済み] Connect 4の評価機能はどのように設計すればよいのでしょうか?

2022-02-16 23:22:45

質問内容

コネクト4ゲームをJavaで実装しています。 列と行の数が可変の場合 ) .

この実装では、(ユーザーの選択により)Mini-maxアルゴリズムとAlpha-betaプルーニングを使用し、探索の最大深さを maxDepth

今問題になっているのは ボードの状態に対する優れた評価関数 (これはmaxDepthで返される値です)。

の間の値です。 -100(最悪の選択、負けを意味する) 100(ベストチョイス、勝ちの状況に相当する) ここで 0 は、本来は ドロー状況 .

実は2つの関数を実装しています(コードが長いので擬似コードで報告します)。

1)

  • ノー・ウィン/ノー・ロス

--テーブルが一杯の場合==> 引き分け(0)

--> テーブルが一杯でない場合 ==> よくわからない状況 (50)

  • 勝つ

-->私の勝利の場合。100

--> 相手の勝利時:-100

2)

Of me:
- InARow[0] = maximum number of pieces in a HORIZONTAL in a row
- InARow[1] = maximum number of pieces in a VERTICAL in a row
- InARow[2] = maximum number of pieces in a DIAGONAL (ascending) in a row
- InARow[3] = maximum number of pieces in a DIAGONAL (descending) in a row
Of the opponent
- InARow2[0] = maximum number of pieces in a HORIZONTAL in a row
- InARow2[1] = maximum number of pieces in a VERTICAL in a row
- InARow2[2] = maximum number of pieces in a DIAGONAL (ascending) in a row
- InARow2[3] = maximum number of pieces in a DIAGONAL (descending) in a row

value = (100* (InARow[0] + InARow[1] + InARow[2] + InARow[3]) )/16 - (100* (InARow2[0] + InARow2[1] + InARow2[2] + InARow2[3]) )/16  

をデザインする必要があります。 第三の(可能であればより優れた) 機能です。何か提案はありますか?

よろしくお願いします。

どのように解決するのですか?

各プレイヤーがまだ作ることのできる4の列の数を数え、それを互いに引き算すればよいのです。

例えば、両者ともスコアが 7*4 (horizontal) + 4*7 (vertical) + 4*4 (diagonal up) + 4*4 (diagonal down) . 赤が左下隅に1点入れたら、黄の失点は 1 + 1 + 1 + 0 = 3 . しかし、赤が真ん中に置くと、黄色は以下のスコアを失います。 4 + 1 + 1 + 1 = 7 .

もちろん、どのプレーヤーが勝っても、他のプレーヤーのスコアは -infinity は、上記のシステムとは関係なく