1

2 チーム間のサッカー ペナルティ キックをシミュレートするこのプログラムがあります。

-目標は、左下隅に座標 (0,0) を持つ 24 x 8 です。

-各チームにはキッカーが5人、ゴールキーパーが1人います(便宜上、2チームをチームAとチームBと呼びます)

- チーム A - キッカーには 5 つの戦略 (それぞれに 1 つ) があり、ゴールキーパーには 5 つの戦略があります (チーム B の各キッカーに戦略が必要なため)。

- チーム B - キッカーには 5 つの戦略 (それぞれに 1 つ) があり、ゴールキーパーには 5 つの戦略があります (チーム A の各キッカーに戦略が必要なため)。

  • キッカーの戦略は、座標 (x,y) とパワー値です。座標はキックの位置で、パワーはキックの強さです。( Power 属性については後で詳しく説明します)。たとえば、各キッカー入力戦略は次のようになります: (1,2) 100 または (24,7) 25

  • ゴールキーパーの戦略は、座標と +Width および +Height の値です。ゴールキーパーのカバレッジ領域は、左下隅が (x,y) 位置で、右上隅が (x+幅、y+高さ) の長方形です。たとえば、(3,4) 5 5 彼の左下の座標は (3,4) であり、(3+5,4+5) は長方形 (カバレッジ エリア) の右上隅です。

  • カバレッジエリアの最大範囲は目標エリアの25%です(プログラムはこれをチェックします)

  • パワー: 0-24; キックにはエラーはありません。キック ヒット ゴールキーパーのカバレッジ エリア 100% セーブ パワー: 24-49 キックは 10% のエラー (-/+10% の範囲) を持ちます。90% セーブ パワー: 50-75 キックで 20% のエラーが発生します。80% セーブ パワー: 76-100 キックで 30% のエラーが発生します。50% 割引

入力例: パワーは 0 ~ 100 でなければならず、他のすべての値は 0 ~ (2^7-1) の正の整数でなければなりません チーム A キッカー: (14,3) 25 ゴールキーパー: (2,3) 4 4 (3,5 ) 50 ゴールキーパー: (1,1) 5,5 など ...

チーム B: キッカー: (9,3) 75 ゴールキーパー: (1,2) 5 5 (3,13) 100 ゴールキーパー: (2,3) 6 6 (これがゴール エリアの 25% を超えないと仮定すると、の上 ....

わかりました、それはシミュレータープログラムでした

次に、シミュレーターに最適なチーム戦略を考え出す GA を作成する必要があります。

問題を単純化して、誰もが概念化できるようにしましょう。

入力: -population (n チームのランダムな作成。たとえば、n=5 の場合、5 つのランダムなチームが作成され、各チームの属性には 5 つのキッカーの戦略、5 つのゴールキーパーの戦略が含まれます)

アウトプット: - 最良のチーム戦略 (各チームは互いにプレーし、次の反復のために最良のものが選択されます。各チームには 5 つのキッカーの戦略と 5 つのゴールキーパーの戦略があることに注意してください)

だから私は結局n人口の分野で1つの解決策を探しています

私の問題は、ソリューションのエンコードを開始する方法です。チームとして、またはプレーヤー/ゴールキーパーのペアとしてソリューションをエンコードする必要がありますか?

たとえば、チームとしてエンコードします: 染色体:= [プレーヤー1, プレーヤー2, プレーヤー3, プレーヤー4, プレーヤー5, ゴールキーパー1, ゴールキーパー2, ゴールキーパー3, ゴールキーパー4, ゴールキーパー5]

class Player {
 int
 int
 int
}

class Goalkeeper {
 int
 int
 int
 int
}

または、プレーヤー/ゴールキーパーのペアとしてエンコードします:

 Chromosome:= [player, goalkeeper] = [x,y,power,x,y,weight,height]

このようなエンコーディングの問題は、チームを構成するために最後に 5 人の最高のプレーヤー/ゴールキーパーのペアを取得する必要があることです。

もう 1 つの問題は、バイナリと値のエンコードです。プレーヤー/ゴールキーパーのペアで行くとしましょう。このような値のエンコードは[x,y,power,x,y,weight,height] = [2,3,100,3,3,4,5]、バイナリ表現よりも理にかなっ[0010, 0011, 1100100, 0011, 0011, 0100, 0101] = [0010 0011 1100100 0011 0011 0100 0101].ていますか?クロスオーバーを行う方が簡単であり、突然変異はそれをバイナリとして表現しますね?

アイデアを集めようとしているだけなので、どこかから始めましょう。

前もって感謝します

4

3 に答える 3

0

まず、何をお探しですか?キッカーやキーパーに適した戦略は?

両方の場合、これは共進化の理想的なシナリオのように思えます。

はい、すべてをバイナリとしてエンコードします。そうする正当な理由が見つからない場合でも、人生を複雑にしないでください。

于 2010-12-08T17:18:24.280 に答える
0

完全な回答はできませんが、何かあるかもしれません...

すべてをバイナリとしてエンコードすることに賛成です。実際にビット文字列として保存しない場合は、簡単に変換できるようにする必要があります。ご指摘のように、データがビット文字列としてエンコードされている場合、クロスオーバーと突然変異は簡単です。

染色体の構造に関しては、プレーヤーとキーパーのペアを組む場合、毛むくじゃらの領域に向かう可能性があると思います。フィットネスは、チーム全体を見た場合にのみ意味があります。素晴らしいペアを見つけたとしても、すべてのプレーヤーが同じように振る舞うと、チームはかなり貧弱になります。フィットネス関数は、プレーヤーのダイナミクスを考慮する必要があります。

それが役立つことを願っています...

于 2010-11-21T00:06:02.323 に答える
0

これは学術プロジェクトのためのものであると正しく思いますか? その場合、チーム全体を 1 つの染色体にエンコードし、プレーヤー/キーパーごとにエンコードします。そうすれば、両方のアプローチを調べて、どちらがより良い結果をもたらすかを確認できます。また、チーム全体のエンコーディングはさまざまな (勝利した) プレーヤー/キーパーの範囲になるため、プレーヤーごとのエンコーディングから得られた個人とそれらを比較することもできます。

値の表現に関しては、あなたが提案したように、バイナリ形式でエンコードするのが好きです. もちろん、0 と 1 の代わりに実数を使用する場合は、ランダムな突然変異アプローチを使用することもできます。繰り返しになりますが、これが学術プロジェクトの場合は、両方のアプローチを実行して、分析でそれらを比較できます。

それが役立つことを願っています!

于 2010-11-21T00:17:15.323 に答える