6

私はかつて、テトリスを非常に上手にプレイするテトリスAIを作成しました。私が使用したアルゴリズム(このホワイトペーパーで説明)は、2段階のプロセスです。

最初のステップで、プログラマーは問題に「関心がある」入力を追跡することを決定します。テトリスでは、ギャップを最小限に抑えると将来のピースをより簡単に配置できるため、連続していくつのギャップがあるかを追跡することに関心があるかもしれません。もう1つは、平均的な列の高さです。これは、負けそうになった場合にリスクを冒すことは悪い考えである可能性があるためです。

2番目のステップは、各入力に関連付けられた重みを決定することです。これは私が遺伝的アルゴリズムを使用した部分です。結果に基づいて重みが時間の経過とともに調整される限り、任意の学習アルゴリズムがここで実行されます。アイデアは、入力がソリューションにどのように関連するかをコンピューターに決定させることです。

これらの入力とその重みを使用して、アクションを実行することの価値を判断できます。たとえば、直線の形を右の列に完全に配置すると、4つの異なる行のギャップがなくなる場合、このアクションは、その重みが高い場合に非常に高いスコアを取得する可能性があります。同様に、それを上に平らに置くと、実際にはギャップが生じ、アクションのスコアが低くなる可能性があります。

「興味深い」潜在的な入力を見つける最初のステップに学習アルゴリズムを適用する方法があるかどうか、私はいつも疑問に思っていました。コンピュータが最初にどの入力が有用であるかを学習し、次に学習を適用してそれらの入力を重み付けするアルゴリズムを作成することは可能であるように思われます。以前にこのようなことをしたことがありますか?すでにAIアプリケーションで使用されていますか?

4

3 に答える 3

1

ニューラル ネットワークでは、トレーニング対象の分類と正または負の相関が最も強いものを見つけることで、「興味深い」潜在的な入力を選択できます。他のコンテキストでも同様にできると思います。

于 2009-10-28T18:04:55.177 に答える
0

より原始的なデータを学習アルゴリズムに与えることで、あなたが説明している問題にアプローチできると思います。たとえば、テトリス ゲームの状態は、占有セルのリストによって記述されます。この情報を記述する一連のビットは、学習アルゴリズムのその段階への適切な入力になります。実際にトレーニングすることはまだ難しいです。それらが有用な結果であるかどうかをどうやって知ることができますか。アルゴリズム全体を 1 つのブロブにまとめることができると思います。このブロックでは、アルゴリズムに連続するプレイ状態が与えられ、出力は単にブロックの配置になり、将来の世代のために選択されたより高いスコアリング アルゴリズムが使用されます。

もう 1 つの選択肢は、他の情報源からの演劇の大規模なコーパスを使用することです。人間のプレーヤーや手作りの AI からの記録されたプレーなど、次の 10 の動きで獲得したスコアなど、将来のプレーからの興味深い事実または別の興味深い事実と強い相関関係を持つアルゴリズムを選択します。

于 2009-10-28T18:33:18.010 に答える
0

はい、方法はあります。

M個の選択された機能を選択すると、2^M 個のサブセットがあるため、見るべきものがたくさんあります。私は次のようにします:

For each subset S
   run your code to optimize the weights W
   save S and the corresponding W

次に、ペア SW ごとに、ペアごとに G ゲームを実行し、それぞれのスコア L を保存できます。これで、次のようなテーブルができました。

feature1    feature2    feature3    featureM   subset_code game_number    scoreL
1           0           1           1           S1         1              10500
1           0           1           1           S1         2              6230
...
0           1           1           0           S2         G + 1          30120
0           1           1           0           S2         G + 2          25900

これで、コンポーネント選択アルゴリズム (PCA など) を実行して、scoreL を説明する価値のある機能を決定できます。

ヒント: コードを実行して W を最適化するときは、乱数ジェネレーターをシードして、それぞれの異なる「進化する脳」が同じピース シーケンスに対してテストされるようにします。

何かの役に立てば幸いです!

于 2013-02-24T16:55:54.727 に答える