ランダムリングの修正とDGAのデバッグ
2001年 10月19日
片浦哲平
1.先週からの課題
先週からの課題として,
・ 移住トポロジー(ランダムリング)の修正
・ データ比較によるプログラムテスト
などがあった.
2.研究報告
今週行ったこと
移住トポロジー(ランダムリング)の修正
先週,ランダムリングの解釈が誤っていたでの,ランダムリングの修正を行った.プログラムの修正部分に
についてはメールで添付したソースを見てもらいたい.
そして,今週はそのプログラムが正常に動作しているのかを確認するデバッグの作業を中心に行った.
その結果,バグであろうと思われる点が1箇所か見つかった.
バグは遺伝子のビット長が32を超えた場合に生成された初期個体がすべて-5.1〜5.2となるというものであった.
原因は簡単でint型の扱える範囲である32bitを超えたこによるものだった.これは,型をlong longにすることで
解決できた.しかしこの場合でも,64bitを超える遺伝子長にした場合は正しく計算できなかった.
初期個体の比較
前回の結果から自分のプログラムと佐野さんのプログラムで初期の段階での解の精度があまりにも違っていたので,
プログラムが正しく動作しているかのチェックを行うことにした.
チェック方法は,設計変数を2として初期個体を100個発生させ,発生初期,1〜3世代目までの個体の情報を
プロットすることで行った.初期値を表1に示し実行結果を図1〜9に示す.
表1 初期値
| 世代数 | 1000 |
| 個体数 | 10×10=100 |
| 交叉率 | 1.0 |
| 遺伝子長 | 20 |
| 突然変異率 | 0.02 |
| 設計変数 | 2 |
| エリート保存 |
1×10=10 |
| 移住個体数 | 5 |
| 移住間隔 | 1 |
| 島数 | 10 |
| 試行回数 | 10 |
図1 TeppeiGA generation=0 図2 SanoGA generation=0
図3 TeppeiGA generation=1 図4 SanoGA generation=1
図5 TeppeiGA generation=2 図6 SanoGA generation=2
図7 TeppeiGA generation=3 図8 SanoGA generation=3
また,第3世代までの全個体の適合度の平均値を示す.
図9 TeppeiGA vs SanoGA
この結果から見たところ,ほとんど結果のずれはランダム要素からの誤差であるように思える.若干自分の結果のほうが解のばらつきが
あるように思える(適合度のそのとおりに自分の結果のほうが悪い).したがって,前回の結果も単なる誤差範囲内なのではないだろうか.
また,上記の結果を受けて,前回の結果の測定ミス恐れがあったので,データを取り直してみた.
初期値は表1のとおりである.
実行結果を以下に示す.
図10 設計変数2の場合の実行結果
また,この場合で,解が得られた世代は表2のとおりになった.
表2 解の得られた世代
| TeppeiGA | SanoGA | |
| 最速 | 12 | 9 |
| 最遅 | 35 | 30 |
この結果から,前回のものは測定を失敗したものだと思われる.
3.今後の課題
今後の課題は,
・ 目的関数を外部から取り込めるように改良する
・ 環境分散GAの作成
・ ほかの目的関数で比較を行いプログラムのデバッグを行う
あとは,今回のデータ収集にとても時間を要したので,今後のことを考えて,perlの学習をしてデータの収集などで無駄な時間をとらない
ようにしたいと思っている.