おわりに

ここまで本書をお読みいただきありがとうございました!

本書で前著の設計に「進化」の仕組みを導入して、ついに実行バイナリを生成できるようになりました。その方法は生物学にアイディアを得たオリジナルのものですが、ジャンルとしては「遺伝的アルゴリズム」の一種になるのかなと思います。本来の遺伝的アルゴリズムは、生物の遺伝の仕組みのみを抽出してモデル化したもので、わざわざ生物が生きる振る舞いを模倣したりはしませんが、前著から本書にかけて紹介した「バイナリ生物学」の手法では、最低限「生きていると言い張れる」だけの振る舞いをバイナリにさせた上で、進化の仕組みを入れます。そのため、本家の遺伝的アルゴリズムよりもっと生々しく生物の振る舞いを模倣している手法であると思います。

実験では3つの実験を通して、評価スクリプトを適切に用意すれば実行バイナリを生成できる事を示しました。生成された実行バイナリについては、評価スクリプトの評価は満たしつつも、機械語のコード列としては「想定よりも短いコードで実現可能」だったり、「余計なコードがいくつも付いていた」り、といったものが生成されていた点は興味深いポイントです。些細なことでもありますが、前者は、設計者が想定していた以上の最適化が行われていたとも言えます。後者は、実行上は問題ないですが、余計なゴミがくっついているという意味ではバグ(?)かもしれません。バグに対しては評価方法を改善すれば良いので、「人間の想定以上の解が産まれ得る」という点が「進化」によるバイナリ生成の重要ポイントじゃないかなと思います。

また、このバイナリ生成方法では、エンジニアは評価スクリプトしか書かないため、それをテストコードと捉えるなら、「エンジニアがテストコード書かない問題」を解決しているとも(一応)言えます。加えて評価の仕方はアーキテクチャ非依存にできるので、「一つの評価スクリプトで複数のアーキテクチャ向けの実行バイナリを生成する」といったことも可能です。

課題は、「実用的な実行バイナリは生成できるのか」、あるいは「そういうものではない」としても「何に使えるのか?」という所ですね。実用的な実行バイナリは今回実験したようなバイナリよりももっと規模が大きく多機能であるため、例えば「別々の環境で単機能毎に進化した細胞を組み合わせて多細胞生物にする」といったような新しい進化の仕組みが必要そうです。なお、daisy-toolsは、「バイナリ」であれば生成対象は「実行バイナリ」以外も可能な方法であるため、現状の実装でも何か解決できる問題はあるかもしれません。

なお、「daisy-tools」という名前の元ネタはガイア理論の「デイジーワールド」です。「バイナリを生きている様に産み出す」という発想元には実は小さい頃に遊んだ「シムアース」があったりします。