13

私は子供にプログラミングを教えており、現在、いくつかの基本的な人工知能の概念を紹介しています。まず、ゲーム ツリー全体を検索する三目並べゲームを実装して、完全にプレイします。終了したら、同じ概念を、1 つ 1 つを評価するにはポジションが多すぎるゲームに適用したいので、中間ポジションを評価するためのヒューリスティックを実装する必要があります。

私が考えることができる最高のものは、Dots and Boxesでした。ボードのサイズを任意に大きく設定して、彼がツリー全体を検索するのを防ぐことができるという利点があり、非常に基本的なスコア関数を自分のボックスの数から対戦相手のボックスの数を引いたものにすることができます。残念ながら、これは、プレイヤーが実際にボックスを作り始める前にかなりの数の手がかかるため、ゲームの開始のほとんどで、すべてのポジションがスコア 0 で同等に評価されることを意味します。

ゲームについてもっと良いアイデアを持っている人はいますか? (または、ドットとボックスのより優れたスコアリング関数)?

4

12 に答える 12

7

考えられるゲームの 1 つに、Connect Fourがあります。シンプルなルールのシンプルなゲームですが、Tic-Tac-Toe よりも複雑です。

于 2008-09-16T20:03:59.923 に答える
7

別のゲームの選択肢として、オセロとして知られるリバーシがあります。

単純なヒューリスティックは、各有効な動きによって得られるタイルの数を単純に数え、最大のものを選択することです。そこから、ボードの位置を考慮して、対戦相手に対して脆弱に最小化することができます。

于 2008-09-16T20:01:34.937 に答える
3

チェッカーを使用すると、いくつかの方法を教えることができます。単純な先読み、最善のケースと最悪のケースの決定の深層探索、短期的な利益と長期的な利益の違い、そしてあなたが教えたいことを学んだ後に彼らが取り組み続けることができる何か。

個人的には、最後の部分が最も重要だと思います。AI の開発には、立ち止まって、それを打ち負かすことができるかどうかを確認し、より深い AI メカニズムを掘り下げるのに適した自然なポイントがあります。生徒はひどくイライラすることなく興味を持ち続け、プロジェクトを続けたい場合は自分でできることが増えます。

于 2008-09-16T20:08:56.947 に答える
2

Rubik's Infinityはかなり楽しいです。Connect Four に少し似ていますが、微妙に異なります。ポジションの評価は非常に簡単です。

しばらく前に Perl スクリプトを作成して再生しましたが、実際には見た目より先の動きの数を減らす必要がありました。

于 2008-09-17T13:57:54.460 に答える
2

マンカラはどうですか?各ターンに可能な手は 6 つだけで、それぞれの結果のスコアを計算するのは簡単ですが、対戦相手の反応を考慮することが重要であり、ゲーム ツリーはかなり速く大きくなります。

于 2008-09-16T20:05:57.783 に答える
2

五目並べは、AI を作成するのに適したシンプルで楽しいゲームです。

于 2008-09-16T20:08:49.350 に答える
2

リバーシはどうですか?ピースの数、エッジのピースの数、およびコーナーのピースの数に基づいたヒューリスティックスの非常に優れたスペースがあります。

于 2008-09-16T19:59:24.100 に答える
1

コネクト フォーが大好きです。Minimax アルゴリズムを使用してプログラムするのは非常に簡単です。適切な評価関数は次のようになります。

eval_score = 0
for all possible rows/lines/diagonals of length 4 on the board:
    if (#player_pieces = 0) // possible to connect four here?
        if (#computer_pieces = 4)
            eval_score = 10000
            break for loop
        else
            eval_score = eval_score + #computer_pieces
            (less pieces to go -> higher score)
        end if
    else if (#player_pieces = 4)
        eval_score = -10000
        break for loop
    end if
end for

プログラムを改善するには、次を追加できます。

  1. コンピュータが最初に動く場合は、中央の列でプレイします (これが最適であることが証明されています)。
  2. アルファベータ剪定
  3. 移動注文
  4. Zobrist ハッシュ
于 2009-02-01T13:50:18.860 に答える
1

フォー・イン・ア・ライン十分に難しいが、簡単に機能する評価関数を考え出すのに十分簡単です。

于 2008-09-16T20:04:08.177 に答える
0

ゴーを見てください。

  • 非常に小さなボードの子供には十分にシンプルです。
  • 複雑さは無限に拡大します。
  • 尺度または基礎として使用できる論文、アルゴリズム、およびプログラムが多数あります。

更新: Go の簡略版である reversi が言及されました。より良い選択かもしれません。

于 2008-09-16T20:03:50.737 に答える
0

ランダムな線がすでに追加されている状態で、点と箱のゲームを開始してみてはいかがでしょうか。これにより、すぐに行動に移すことができます。ボックスでゲームを開始しないようにする必要があります。

于 2008-09-16T20:00:04.863 に答える
0

ドットとボックスのより良いヒューリスティックに関しては、ゲームのオンライン戦略ガイドを参照することをお勧めします. 「点と箱の戦略」に関する Googleの最初の結果は非常に役に立ちます。

チェーン ルールの使い方を知ることで、OK プレーヤーと良いプレーヤーを区別できます。チェーン ルールがいつ不利になるかを知ることが、最高のプレーヤーと優れたプレーヤーを分けるものです。

于 2008-09-24T20:29:05.577 に答える