興味深いことに、私はあなたが説明しているものをPythonで作成しました。
これが写真です:

緑の点は食べ物で、赤い点は進化して食べ物の塊の食べ方を学ぶ必要のある生物です。
このようなもののインスピレーションとガイダンスの最良のソースは間違いなくPolyworldです:youtube.com/watch ?v=_m97_kL4ox0 。
バックプロパゲーションについて学ぶのに役立ったもう1つの優れた例は、ここにも学ぶ必要があることをお勧めします:arctrix.com/nas/python/bpnn.py。
この質問は単純に曖昧すぎて正しく答えることができませんが、一般的なヒントは、最初にANNの機能をしっかりと理解し、次にこの一般的なアルゴリズムを使用してプログラムを作成することです。
- ユーザー入力を確認します(カメラを動かす必要がありますか?プログラムを終了する必要がありますか?)
- 各生物について:
- 生きているか確認してください。
- 世界から意見を聞く
- ニューラルネットワークを評価する
- 結果を身体に適用します
- 正または負のフィードバックを適用します(後でわかるように、すべてはこれに帰着します)
- 世界を更新します(物理エンジンを使用できます)
- オプションで、世界を描く
たとえば、入力ニューロンは物理的または視覚的な刺激に対応する可能性があります。目の前に何かありますか?次に、ニューロンXを1に設定し、それ以外の場合は0に設定します。
そして、出力ニューロンは力にマッピングされる可能性があります。ニューロンYはアクティブですか?もしそうなら、この世界のサイクルでこの生物に衝動を適用します。
また、ニューラルネットワークの計算に他の人のライブラリを使用しないことをお勧めします。これは、実際にそれらを自分で実装する方法を学ぶための優れた方法だからです。ただし、レンダリングにはPygameを、物理学にはPyBox2Dを使用できます。
さて、他の生物を「見る」ことについて...これらの問題は隔離されたときに最もよく解決されます。問題全体を多くのサブ問題に分割できる優れたソフトウェア設計が必要です。これにより、解決が容易になります。
一般的に、見ることはレイキャスティングによって行うことができます。方向性のある正規化されたベクトル(長さは1単位、つまりsqrt(x*x + y*y) == 1
)を作成し、それをスケーリングします(x *= factor; y *= factor;
)。そうすれば、外側に伸びる線が得られます。スケーリングする前に、世界中のすべての生物をループして(これを最適化する必要があります)、ベクトルがそれらの内部にあるかどうかを確認できます。もしそうなら、その長さを計算してください、そしてあなたの生物はその周囲についてのいくつかの情報を持っています。
もっと簡単な方法はたくさんあります。たとえば、各生物の周りの空間を4つの象限に分割します。4つの象限は目を表します(X-生物の上下左右)。次に、生物から他のすべての生物までの長さを計算します(最適化してください!)。最も近い生物を見つけます。それがどの象限にあるかを調べます。出来上がり、アクティブな目!
お役に立てば幸いですが、実際に問題が発生した場合は、より正確に戻ってくる必要があります。FAQも読んでください。