評価計算プログラムのスレッド化
片浦 哲平
2002年1月27日

1.研究報告
 今週行ったこと

 先週,近似解を得るアルゴリズムを考え,それを実装することができたので,今週は近似解を得た場合に実際に評価を行って正しい適合度を求める方法を考えた.考えた方法は,スレッドで評価関数を呼ぶことで,GAの実行と評価をまったく別プロセスで非同期に行うものである.

実装したモデルを示す.



実装した方法では,GAオペレータ処理の後,データベースに検索をかける.その際にデータベースから遺伝子情報が見つからなかった場合には,1つの個体評価に対して1つのスレッドを立ち上げるようにしている.したがって,n個体で実行した場合に,データベースにまったくヒットしなければ,n+1のプロセスが立ち上がることになる.

1.1 これまでのGAとデータベースGAの性能比較

データベースを用いたGAとこれまでのGAの性能比較を行った.

設定パラメータをしめす.

個体数
20
設計変数
5
遺伝子長
50
交叉率
1.0
交叉方法
一点交叉
突然変異率
1/L
エリート保存
1
対象問題
Rastrigin
試行回数
10

実行結果とDBGAのヒット率を示す.



DBGAの性能が悪い理由は,格納されている遺伝子よりも適合度の高い遺伝子の組み合わせがたとえできたとしても,データベースに格納されてしないため,近似値を返してしまう点にある.近似値を返された優秀な個体は次の世代の選択で選ばれない確率が高く,そのため,解探索が悪くなっている.このため,初期段階ではDBにデータを格納しないようにして,ある程度解が収束してしまった後に格納を始めるほうがメモリの節約にもなってよいのではないかと考えられる.
 
2.現在の問題点と,今後の課題
 
・ 検索はビット情報のみで行うため,適合度順にevaluate関数を呼ぶことができない.
・ メモリの使用率が多すぎて,実行世代数を大きくできない.

・ 登録数に制限をつける.
   一定期間参照されなかった情報は削除するなどしてメモリ確保に努める.
・ ThreadをJoinするタイミングによってどのように解が変化するか
   その際に,evaluateで呼ばれたうち何割が実際にDBに格納されたのかを確認する.