回答:
「メタヒューリスティックの本質」のセクション4.2には、遺伝的アルゴリズムを介してグラフ構造をエンコードする別の方法に関する豊富な情報があります。
特に進化しているANNに関して、私は個人的にこの種のことを「ゼロから」実装する傾向はありません。
神経進化の分野はしばらく前から存在しており、拡張トポロジーの神経進化(NEAT)などのいくつかの方法の実装には、多くの実際的な経験の結果が組み込まれています。
上記のリンクによると:
また、数百万の接続を持つニューラルネットワークを進化させ、タスクドメインの幾何学的規則性を活用できるHyperNEATと呼ばれるNEATの拡張機能も開発しました。HyperNEATページには、出版物へのリンクとアプローチの一般的な説明が含まれています。
進化的アルゴリズムを使用してニューラルネットワークを進化させることを、神経進化と呼びます。
一部の神経進化アルゴリズムは、固定トポロジのニューラルネットワークの重みのみを最適化します。それはあなたが望むものとは違うように聞こえます。他の神経進化アルゴリズムは、ニューラルネットの重みとトポロジの両方を最適化します。これらの種類のアルゴリズムは、目的により適しているように思われ、TWEANN(トポロジーおよび重み進化ニューラルネットワーク)と呼ばれることもあります。
人気のあるアルゴリズムの1つはNEATと呼ばれ、多数の実装があり、そのうちの1つがあなたの好きな言語で書かれていることが望ましい場合にのみ、おそらく開始するのに適した場所です。それは少なくとも作業するためのベースラインを提供します。
NEATは、グラフ構造としてニューラルネットワークゲノムを直接エンコードします。突然変異は、新しいリンクを追加することにより(以前に接続されていない2つのノードを接続することにより)、または新しいノードを追加することにより(既存の接続を分割することにより)ネットワークの構造に作用するか、グラフのエッジに関連付けられた重みの変更にのみ作用します(突然変異と呼ばれます)重み)。この特定のアルゴリズムが機能するANNのサイズの大きさを知るために、100または200を超えるノードで苦労する可能性があります。
よりスケーラブルなTWEANNがありますが、それらはより複雑であり、生成される構造の種類について仮定を行いますが、実際には必ずしも生産的とは限りません。たとえば、ニューラルネットワークの構造をエンコードする別の方法は、文法(たとえばLシステム)によって繰り返し展開されるシードパターンの積としてです。より大きな構造をより簡単に探索することができますが、それらは文法によって生成されるため、特徴的な自己反復的な感じがあります。HyperNEATは、NEATの一般的な拡張機能であり、異なる種類の仮定(重みのパターンはジオメトリの関数として簡単に表現できる)を行い、その仮定が特定のドメインに適合する場合、数百万の接続を持つANNに拡張できます。
さまざまなテクニックを観察したい場合は、トップリンクにリンクされたいくつかの調査論文があります。