最近、ハブに
投稿が送られました。これは、数年前に初めて目にしたBoxCar2D(
オリジナル 、
投稿からのバージョン )のような、おもしろくて面白いことを思い出させてくれました。 それに、
致命的な欠陥が1つあることに気づきました(要するに、私が作ったのではないのです)が、その時点で私の手は修正されていません。 そして今、私はそれを修正することにしました。
そこで、Visual Studioを発見し、ビジネスに取りかかりました。
まず、BoxCar2Dの機能を繰り返しました。つまり、固定された人口サイズで、その寿命を生き、次世代を生成します。 時間の経過とともにトラックがどのように複雑になるのか、ゲノムに何が含まれているのか、車がどのように交差して変異するのかをいじることができます。
私はこのオプションに決めました。各マシンには独自のゲノムがあり、8つの頂点と4つの潜在的なホイールのそれぞれに関する情報が含まれています。 また、別の遺伝子は、潜在的なホイールがマシン上で実際に成長する原因となります。
交配する場合、各遺伝子は親の1つからランダムに取得され、特定の範囲でランダムな値を取得して、特定の確率で変異することもできます。 この点で特別な唯一の遺伝子は、どの車輪が成長し、どの車輪が成長しないかを決定するものです。 その中で、ホイールの1つの状態がランダムに変化する(増加する-成長しない)か、ホイールに関する情報が左右に少し移動する可能性があります。
何が起こったかを観察した後、私はこれが少し退屈だという結論に達しました。 ここでの自然選択はかなり、人工的な駄洒落で申し訳ありません。
そして、ここでの記憶は、リチャード・ドーキンスによる深みのある
広い範囲から本
「The Blind Watchmaker」を必然的に引き出しました。
要するに、自然selectionのモデル化の方法は次のように説明できます。生物の集団があり、それぞれの定義された期間の後、それらのうち3つがランダムに選択されます。 これら3つのうち、2つの適者が3つ目を殺して子孫を生み出し、その後新しい3つが人口に戻ります。
もちろん、私は即座にそのようなアルゴリズムを実装する物理的な必要性を感じました。
それの由来
したがって、車輪のない車をランダムに作成し、世界に進出し、ポップコーンを買いだめします。
主要なプロトカーは完全に車輪なしにします。
彼らは人生の旅を始め、ある時点で凍りつき、高速道路に沿ってさらに前進することはできません。 最初の車とその近い子孫の場合、これは非常に迅速に行われます。 すべての冷凍機について、「適合性」を確実に把握し、上記の方法で定期的に「自然選択」を生み出します。
強い影響は、選択する頻度です。 ランダムサンプリングに使用できる車が多いほど、正直になりますが、全体としての進化は遅くなります。 科学的な突きの方法で、私は人口の1/6で国境を選びました。 人生の旅を終えた車の数がこの値よりも少ない場合、選択は行われません。
だから、いくつかの結果。 スクリーンショットの上のグラフは、絶対距離記録と母集団の平均値を示しています。 そして一番下は、車輪の数が異なる車の数です。
車輪の数のグラフでは、通常、「時代」間の急速な移行を見ることができます。 ある時点でのホイールレス車は、一輪車に取って代わります。 これらは、二輪車に取って代わられています。 しかし、3つ以上のホイールが2つよりも必ずしも効率的ではないため、さらなる開発はそれほど予測できません。
そのため、たとえば、このスクリーンショットでは、ある時点で三輪車の数が急速に増加し始め、二輪車を置き換えようとしているように見えます。 実際、3番目の車輪は非常に陰湿な1つの丘を克服するのに役立ちましたが、すぐに、これが可能な2輪の機械が登場しました。 そのため、将来的には、2つの種の競合に似た、順応の仕方が異なるものの、ほぼ同じように観察できるようになります。
他に修正/追加できるもの(難易度の高い順)
- プログラムインターフェイスを介してより多くのパラメータを変更可能にします。 現在、多くの興味深いものがハードコーディングされています。
- 一人の子孫の数を制限します。 今では、すべての品種の中で最も遠い場所を去り、その記録が破られるまで子孫を生産する機械。 彼女の人生を複雑にする必要があります。
- さらに遺伝情報を追加します。 より多くの遺伝子! さらに!
- よりスマートな遺伝子交差メカニズムを作成します。 たとえば、前述のJavaScriptシミュレーターのように、最初のk個の遺伝子はdadからのもので、次のnk個はmomからのものです。
- ゲノムが非常に異なる個体が交配する能力を失うように、ゲノム間の重要な距離を決定しようとすることも興味深いでしょう。 これにより、いくつかの異なる種を並行して進化させることができます。
- 同様に遺伝子によって決定される車の「行動」を紹介します。 たとえば、急な棚などで速度を下げます。
これをどこで入手できますか?
興味がある人のために、コンパイルされたバージョンとソースコードを(Visual Studio 2012のソリューションと共に)投稿します
4共有:
ダウンロードして実行(Win32) 1032 KB
ダウンロードして実行(Linux) 1052 KB
https://github.com/shtras/BlindAM.git古いソース 1868 KB
Linuxの古いソース 1362 KB
Dropbox:
ダウンロードして実行(Win32) 1032 KB
私のリリースビルドは、300人以上の個人の人口を引き出します。 最初にすべてが地面に落ちるまで減速し、その後すべてが滑らかになります。
カメラはマウスの右ボタンで移動し、ホイールがズームを担当します。
スペースバーは一時停止のオン/オフを切り替えます。 一時停止シミュレーションが開始されます。
「a」ボタンと「d」ボタンは、それぞれシミュレーション速度を増減できます。 最初に興味深い個人が登場するまで、最初は役に立ちます。
使用されるテクノロジー:
C ++、Box2D、OpenGL、SDL
Update1: resフォルダーにsettings.txtファイルがあります。 その中で、ゲームウィンドウのサイズを調整できます。
Update2: Linux用のバージョンが追加されました。 アプリケーションを終了せずに再起動するとシードがリセットされなかったバグを修正しました
Update3:メニューに多くの多くの設定を行いました。 トラックの外観を変更しました。 レンダリングを変更しました。