|
評価計算プログラムのスレッド化 実装した方法では,GAオペレータ処理の後,データベースに検索をかける.その際にデータベースから遺伝子情報が見つからなかった場合には,1つの個体評価に対して1つのスレッドを立ち上げるようにしている.したがって,n個体で実行した場合に,データベースにまったくヒットしなければ,n+1のプロセスが立ち上がることになる. 1.1 これまでのGAとデータベースGAの性能比較 データベースを用いたGAとこれまでのGAの性能比較を行った. 設定パラメータをしめす.
実行結果とDBGAのヒット率を示す. DBGAの性能が悪い理由は,格納されている遺伝子よりも適合度の高い遺伝子の組み合わせがたとえできたとしても,データベースに格納されてしないため,近似値を返してしまう点にある.近似値を返された優秀な個体は次の世代の選択で選ばれない確率が高く,そのため,解探索が悪くなっている.このため,初期段階ではDBにデータを格納しないようにして,ある程度解が収束してしまった後に格納を始めるほうがメモリの節約にもなってよいのではないかと考えられる. 2.現在の問題点と,今後の課題 ・ 検索はビット情報のみで行うため,適合度順にevaluate関数を呼ぶことができない. ・ メモリの使用率が多すぎて,実行世代数を大きくできない. ・ 登録数に制限をつける. 一定期間参照されなかった情報は削除するなどしてメモリ確保に努める. ・ ThreadをJoinするタイミングによってどのように解が変化するか その際に,evaluateで呼ばれたうち何割が実際にDBに格納されたのかを確認する. |