2011-08-12 13 views
3

テトリスに似たゲームを学ぶ遺伝的アルゴリズムをコーディングしたいと思います。 ゲーム自体は比較的シンプルです。私はそれの完全な振る舞いを以下に書いた。この遺伝的アルゴリズムをどのようにコーディングするのですか?

ゲーム:ベース

  • グリッド、12x16。
  • グリッドからブロックをクリアする必要があります。
  • 新しいブロックの行が5ティックごとに下に追加され、ブロックが上に移動します。
  • 同じタイプブロックのクラスタのみをクリアできます。
  • ブロックの種類の数は、ゲームが進行するにつれて増加します。
  • 3以上のクラスターのみをクリアできます。
  • すべてのクラスタがクリアされると、(CLUSTER_SIZE - 3)^2がBLOCK_SCOREに追加されます。
  • クラスタがグリッドから削除された後、上記のブロックがギャップを埋めるようにスライドし、この後に水平ギャップ(最下行)がある場合、ギャップの左側がそれを埋めるように移動します。
  • このゲームの目標はできるだけ長く生き残ることです。時間は、ティック、またはあなたが作った動きの数で測定されます。
  • スコア(またはフィットネス)は、(TIME_ALIVE * BLOCK_SCORE)によって決定されます。
  • ブロックがグリッドの一番上に到達すると、ゲームは終了します。

このゲームのスコアは、長寿と効率の両方を取り入れています。クリアするクラスタが大きければ大きいほど、適応度は高くなります。

私は現在いくつかのGAをコーディングしていますが、地元の競技、収集目標などのもの、VS他の個人に基づいています。 私の問題は、私がこの問題に近づく方法を知らないということです。この新しいGAの各個人は、現在のグリッドのみを入力として処理する必要があります。 (少なくとも、それは私が必要と考えているものです)

どうすればこのためのGAをコーディングすることができますか?私は私の人生はそれを動作させることはできません。

。すべて、あなたの人口の

ステファン「Ruirize」ジェームズは

+0

あなたの行動から、個々のプレイヤーがゲームをプレイし、他のプレイヤーと比較できるスコアが得られます。問題は何か分かりません。 –

+0

問題はこれをコードで設定しています。どんな種類の形質が必要でしょうか。 –

+0

「動き」とは何ですか?どんな種類のブロックが追加されるのか、ちょうど追加されたブロックを動かすことができるのか、それとも何を選択できるのですか? –

答えて

2

各個人がゲームを表すことになり

おかげで完成に果たしました。各個人の属性は、ブロックを配置するための所定の戦略を定義するのに必要なパラメータである。ブロックを配置するためのヒューリスティックスがいくつかあると仮定しています。戦略の1つの例は、使用可能な戦略からヒューリスティックをランダムに選択することです。そのため、属性は、所与のヒューリスティックが選択される確率の集合になります。あなたが持っているブロックk配置ヒューリスティックについての詳細情報を提供できますか?

+0

ブロックは配置されず、クリアされます。 5つのティックごとに、既存のブロックの下部に新しいランダムな行が追加され、グリッドの内容が上に移動します。 –

+0

ブロックをクリアする必要があるヒューリスティックについての詳細情報を提供できますか?あるいは、GAがヒューリスティックを設計することを期待していますか? – cordialgerm

+0

私はわずかしか持っていない:高さは悪いです。小さなクラスターはかなり悪いです。下のスタックをクリアする前に、より高いスタックを下げることに集中してください。 –

1

代替エンコードが関与する可能性があります

for each possible move 
    set phenotypeBehavior to 0 
    calculate the post-move position 
    foreach block cleared add a perBlockClearedEmphasis value to phenotypeBehavior 
    foreach column add a perColumnHeightEmphasis value to your phenotypeBehavior 
    foreach cluster of size x, add a clusterSizeXEmphasis value to your phenotypeBehavior 
choose the move that produces the highest phenotypeBehavior 

は、遺伝的に多様な_foo_Emphasis値をエンコードし、それらを進化させます。たとえば、perBlockClearedEmphasisは高い値に向かって進み、ヒューリスティックな「高さが悪い」とするとperColumnHeightEmphasisは負になり、clusterSizeXEmphasisは小さいXでは負、大きいXでは正となります。

最も一般的な意味ではこれは、あなたの遺伝的構造が、宣言的だが高度にパラメータ化されたプログラムを記述していることを示唆しています。

+0

私は参照してください。さて、これを試して、あなたに戻ってきます、ありがとう:) –

関連する問題