0.Haskellで遺伝的プログラミング
Haskellで遺伝的プログラミングを組んでみることにしました。
そもそも「論理式は解の個数と判定時間が性質を与えているに違いない!*1」「プログラム的な手法(つまりはアルゴリズム)は多くの場合は限定論理式で書けるのではないか」「ではプログラムは自己組織化するのか?*2」という発想からこのようなプロジェクトを立ち上げてみました。
プログラムが自己組織化可能かどうかを、より単純なモデルから探っていこうという考え方です。
大まかなアルゴリズム
- まず、論理式がたくさん書かれたファイルを読み込みます
- それらを解析します
- 解析した論理式を遺伝子とみなして「交叉」「突然変異」をさせます
- 一定時間ごとに「自然淘汰」を加えます
- 残ったものをファイルに書き出します
- はじめに戻る
設計
本当はプログラムをそのまま読み込んで解析するインタープリターを作れば良いのですがそれは複雑すぎるのでやめました。代わりにPA(ペアノ算術)で扱える範囲の限定論理式のみを解析の対象とします。つまり、四則演算及び(範囲付きの)∃∀のみからなる論理式を解析したいと思います。
発展性
最終的には論理式だけでなくてもう少し一般的な遺伝子(プログラムのようなもの)を解析できるようになれば、もう少し「生命の複雑さを量る」ということができるようになるのかもしれませんね(希望的観測)。