Ruby/GPとは =========== Ruby/GPは ruby で書かれた遺伝的プログラミング・ライブラリーである。 変更履歴 ======= 0.3.1 GPSystem#random_seed関数によって乱数種の設定が可能となる string_of_report関数をto_s関数に改名 gpconf.rbにおいて site_ruby ディレクトリー設定を自動化 0.3 RAAに登録 動作条件 ======== 本ライブラリーは Debian GNU/Linux(potato) 上で Ruby version 1.6.1 を用いて開発された。 これ以外の環境での動作確認は行なっていない。 インストール ============ 1. gp-(version).tar.gz を適当なディレクトリーで解凍し、解凍先に移動する tar xzvf gp-(version).tar.gz cd gp-(version) 2. Makefileを作成する ruby ./gpconf.rb 3. インストールする(おそらくルート権限を要する) make install アンインストール =============== 1. インストールした際のgp-(version)ディレクトリーに移動する cd gp-(version) 2. アンインストールする(おそらくルート権限を要する) make uninstall 使い方 ====== 1. 問題固有のファイルを書く ここで設定すべき内容は主に次の事項である。 * GPパラメーターの設定 集団の個体数や最大世代数などのGPパラメーターをGPSystemのクラスメソッドを利用して設定する。 * ノードの定義ならびに登録 ノードが非終端記号の場合は GPSystem#table.add_function もしくは GPSystem#table.add_macroで登録し、 終端記号の場合は GPSystem#table.add_variable もしくは GPSystem#table.add_procedure でこれを行なう。 このとき add_function,add_function, add_procedure についてはノードを評価する際のアルゴリズムを 手続きメソッドを用いて定義する必要がある。 * 早期終了条件の設定 GPSystem#terminate_early関数をオーバーロードすることでこれを行なう。 * 事例 fitness cases の定義ならびに登録 GPCasesのインスタンスを用いてこれを行なう。 なおノードに変数を用いる場合には、 GPSystem#table.add_variableで指定したのと同じ変数名を GPCases#set_inputs関数において登録する必要がある。 ただし GPCases を用いた事例の設定は入出力が数値で表現される場合に必要となる作業であり、人工蟻の 問題のように数値で表現できない場合にはデータを直接スクリプトに書き込み、適合度算出関数である GPIndividual#evaluate_standardized_fitness内でこのデータを操作することになる。 サンプルの ant.rb を参照して欲しい。 * 適合度を算出する関数を定義する GPIndividual#evaluate_standardized_fitness関数をオーバーロードすることでこれを行なう。 2. ドライバーコードを書く 以下のコードをGPを起動したいスクリプト中に埋め込む。 require 'gp/gpsystem' gpMAIN = GPSystem.new() gpMAIN.startup("userfile") # ここでuserfileには 1.で作成された問題固有のファイル名が入る gpMAIN.run() 3. GPを起動する ドライバーコードが書かれたスクリプトを実行する。 本ライブラリーは伊庭斉志著「遺伝的プログラミング」(東京電機大学出版局)とそこで紹介されている sgpc を参考にして制作された(ただしまだ実現されていない機能も多々ある)。ドキュメントが完備される まで、GPの用語や本ライブラリーの詳しい書式については同書ならびにsampleディレクトリー以下のサンプ ルコードを参照して欲しい。 sample ディレクトリーには記号当てはめ symbolic regression や人工蟻の問題など、遺伝的プログラミング の代表的な例題が用意されている。ここにある demo.rb をスクリプト内のコメントにしたがって編集すれ ばそれらを実行することができる。 TO DO ===== 下に行くほど優先順位が低くなる。 * オブジェクトのセーブおよびロード機能 実行時の遺伝子オブジェクトをファイルに保存することで、中途からの実行や初期世代の準備を可能にする。 * 様々な選択方法の実装 現在実装されている truncation に加えて伝統的なGPシステムで採用されているいくつかの選択方法を実装する。 * ドキュメントの整備 * 複数の集団の実装 複数の集団の実行を可能にし、加えてこれらをスレッドによって並列実行させる。 * C言語による速度向上 ライセンスおよび免責条項 ======================== GPLにしたがう限り本ライブラリーの改変・再配布は自由である。 また作者である立川察理は本ライブラリーの使用によって生じた結果についてその責任を負わない。 謝辞、その他 ============ インストールのスクリプトは Toshiro Kuwabara 氏の rdconf.rb を参考にさせていただきました。 ライブラリーの設計については sgpc とこれを解説した「遺伝的プログラミング」(東京電機大学出版局)に その多くを負っています。 Rubyでのプログラミングはほとんどこれが初めてですが、Rubyの持つ柔軟なオブジェクト指向と簡潔な記述 力のおかげでCで開発するよりもずっと快適にプログラミングをすることができました。 sgpc の作者である Walter Alden Tackett, Aviram Carmi 両氏ならびに「遺伝的プログラミング」の筆者 である伊庭斉志氏、そして Ruby という珠玉の言語を創造したまつもとゆきひろ氏に謝意を表します。 ----------------------------------------------------------------------------------------------- Name: 立川察理 Akimichi Tatsukawa Email: akimichi@mbox.co.jp Home Page: http://www.d3.dion.ne.jp/~xmari