バイナリを生物として扱うことで、進化的にバイナリを生成するシステムです。
詳しくは以下の同人誌『バイナリ生成環境「daisy-tools」実験報告』をご覧ください。こちらで、コンセプトとアーキテクチャ、使い方、daisy-toolsを用いた実験とその結果を紹介しています。
なお、daisy-toolsは作者独自の「バイナリ生物学」という考え方と基本設計に基づいて作られています。これについては同人誌「バイナリ生物学入門」で紹介していますので、こちらも良ければご覧ください。
作者の同人誌や制作物は以下のウェブサイトにまとめていますので、もし興味があればこちらからどうぞ。
諸々の説明は飛ばして、以下の手順で「何もせず正常終了(ステータス0でexit)するだけのELFバイナリ」を生成する実験が行えます。
$ sudo apt install build-essential libc6 bash jq strace
$ git clone https://github.com/cupnes/daisy-tools.git
$ cd daisy-tools
$ make setup
諸々のファイルを配置した作業ディレクトリを~/dsy-workに作成する
$ cd ~/dsy-work
$ samples/setup-sample exit
実験用の諸々のファイルを配置する
$ bin/run
実行完了を待つ
$ ls out.cell
out.cell # 目的の振る舞いをするように進化した細胞ファイル
$ cp out.cell cell/
$ bin/dsy-cell2elf out.cell out.elf # 細胞ファイルをELFバイナリへ変換
$ chmod +x out.elf
$ strace ./out.elf
何もせず正常終了(ステータス0でexit)している事がわかる
ビルド環境・実行環境を説明します。なお、いずれもUnix/Linux環境を想定しています。ディストリビューションに依らない想定ですが、参考として、作者はDebianで開発しています。
daisy-toolsをビルドするために必要なソフトウェアは以下の通りです。
- make
- gcc
Debian系ディストリビューションであればbuild-essential
というパッケージにこれらが含まれていますので、これをインストールしておけばOKです。
$ sudo apt install build-essential
実行する際に必要なソフトウェア/ライブラリは以下の通りです。
- GNU Cライブラリ(libc)
- bash
- jq
Debian系のディストリビューションであれば、以下のようなパッケージ指定でインストール可能です。
$ sudo apt install libc6 bash jq
なお、実行に必須というわけではありませんが、詳細なログはsyslog
に出力していますので、実行時の詳細なログを見たい場合はsyslog
が使用できる環境が良いです。ただ、おおよその実行ログは標準出力/標準エラー出力へ出力していますし、「詳細なログが見れない」というだけなので、syslog
が使えない環境でも実行自体に問題はありません。
詳しくは前述の同人誌の通りですが、ここに簡単に使い方をまとめておきます。
このディレクトリ直下で以下を実行すると、実行したユーザーのホームディレクトリ直下にdsy-work
というディレクトリを作成し、そこへdaisy-tools
の実行に必要なディレクトリ構造とプログラム/スクリプトを配置します。
$ make setup
なお、ここで生成されるdsy-work
ディレクトリをZIPアーカイブにしたものが、リリースページで公開しているdsy-work_YYYYMMDD.zip
です。
daisy-tools
を実行するに際し、初期設定として「細胞ファイル」・「コード化合物ファイル」という独自のファイルをcell
・code
ディレクトリへ配置しておく必要があります。
また、実行時に自動生成されるファイルの名前付けに使われるdsy-name
と、code
ディレクトリに生成された細胞ファイルの評価に使われるdsy-eval
も、実験内容や好みに応じて作成しbin
ディレクトリへ配置しておく必要があります。
これらに関しては、サンプルがsamples
ディレクトリにあります。詳しくは同人誌『バイナリ生成環境「daisy-tools」実験報告』を参照してください。
daisy-tools
のシステムを開始するには、dsy-work
ディレクトリ直下で以下を実行します。
$ bin/dsy-sysenv
なお、開始するとフォアグラウンドで実行し続けプロンプトは返ってこないので、screenやtmuxなどのターミナルマルチプレクサ上で実行してデタッチしておくとか、何らかの方法で放置しておけるようにするのがおすすめです。
適応度100の細胞ファイルが生まれるとdaisy-tools
は自動的に停止し、その細胞ファイルをdsy-work
ディレクトリ直下にout.cell
という名前で保存します。この辺りについても詳しくは同人誌『バイナリ生成環境「daisy-tools」実験報告』を参照してください。
daisy-tools
の実行中はdsy-work
ディレクトリ直下にrunning
という名前のファイルが生成されます。停止させる際はこのファイルを削除してください。(するとdaisy-tools
は動作を停止します。)
$ rm running
再開させる際は再度dsy-sysenv
を実行すればOKです。
$ bin/dsy-sysenv
標準出力に========== XX 周期目 ==========
と出力される周期カウンタの値だけは1から始まりますが、細胞や化合物の状態など、周期カウンタ以外はすべて停止した状態から引き継がれています。