質問

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

- 目標は 24 x 8 で、左下隅に座標 (0,0) があります。

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

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

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

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

  • ゴールキーパーの戦略は、座標と +Width および +Height の値です。ゴールキーパーカバレッジ領域は、左下隅が(x、y)位置であり、右上隅は(x+幅、y+height)の長方形です。たとえば、(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%を超えないと仮定するなど。

OK、それはシミュレータープログラムでした

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

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

入力:-人口 (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]. クロスオーバーと突然変異をバイナリとして表現する方が簡単だと思います。

アイデアを集めているところなので、始めるところはあります。

前もって感謝します

役に立ちましたか?

解決

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

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

お役に立てば幸いです!

他のヒント

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

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

染色体の構造に関して言えば、プレーヤーとキーパーのペアを選択する場合は、毛深い領域に向かう可能性があると思います。フィットネスは、チーム全体を見た場合にのみ意味を持ちます。たとえ素晴らしいペアを見つけたとしても、プレイヤー全員が同じように行動すれば、チームはかなり貧弱なものになってしまいます。フィットネス関数では、プレーヤーのダイナミクスを考慮する必要があります。

お役に立てば幸いです...

まず第一に、何を探していますか?キッカーにとって良い戦略ですか、それともキーパーにとって良い戦略ですか?

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

すべてをバイナリとしてエンコードすることに賛成です。そうする正当な理由が見つからなくても、生活を複雑にする必要はありません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top