進化的プログラミングの布石
たぶん基底はこんな感じ。
struct Command { virtual void main(void* pThis) = 0; virtual void kill() = 0; virtual void makeChild(float p) = 0; virtual const string getName() = 0; virtual void outTree(FILE* fp, int n) = 0; };
- main
- 実行時に呼ばれる部分。自分の行う処理を実行した後、子供の処理を実行する(再帰というかChain of Responsibilityというか)
- kill
- 死なす。子供を巻き添えにするので最上位をkillするだけでよろし。
- makeChild
- 子供を作る(なぜか確率p)。子供が子供を作る確率をp*pとかしておけば、適度に収束しそう。
- getName, outTree
- デバッグ用。
まぁひたすらに再帰的。これを継承した接続クラスと分岐クラスがすべての始まりとなる。「遺伝的プログラミング」と書きたかったけど、交叉とか定義するのが面倒っつーか、事実上強化学習のほうがよさげなので進化的にしといた。