[BlueLeaf1336]> PROBLEMS> パターン認識への長い道のり>

パターン認識への長い道のり > 遺伝的アルゴリズムで第一歩

historyTOP

2006/05/01:作成

2006/05/01TOP

前回までの結果を踏まえて、単純GA(と呼ばれているらしい一番簡単な遺伝的アルゴリズム)を利用して、「数打ちゃ当たる」を実装してみました。

しかし、遅い。遅すぎてどうしようもないです。

実行結果TOP

元にした画像です。「C:\WINDOWS\system32\xpsp2res.dll」の抱えているアイコンを、ショートカットファイルのプロパティのアイコンの変更のダイアログをキャプチャしてちまちまとペイントを使って連結したモノを原画像とし、その中からひとつのアイコンを取り出して IrfanView を使って10度傾けたモノをテンプレート画像としました。

チョットくらい傾いていようが、うまいこと原画像からその場所を見つけてほしいと。そういうことです。

起動すると、すべてグレースケールに変換します。遺伝的アルゴリズムのための設定としては、画面右下の入力欄にある「50個体」を「300世代」進めてそのときの「交叉率は0.8」「突然変異率は0.01」としてます。正確には「300世代」というのは遺伝的アルゴリズムとは無関係で、図の「Execute」ボタンを押したときに何回ループをまわすか、というだけのものです。

で、起動した時点で青とか黄色の枠が表示されていますが、これが各個体の初期位置となります。気に入らなければ「Reset」ボタンでやり直すことができます。Wizardlyでいうところのキャラクター作成時のさいころ振りのような感じです。太い青の枠は、この時点での最高点をマークしている個体の位置です。

それと、ソースにべた書きの設定として、拡大/縮小は 1.0倍~2.0倍 まで、回転は -15度~+15度 だけで試してます。いろいろやりましたが、あまりに遅いのでイヤになりました。

33世代まで進んだ時点の図です。あまり変わってませんが、最高点が増えているのがわかります。

97世代まで進んだ時点の図です。なにやら枠が数箇所に集まってきているのがわかります。優秀な個体から子供の個体を作ることから徐々に集まってくる動作が理解できます。

202世代まで進んだ時点の図です。青枠しかなくなってますがまあそういうこともあるということで。あまりに点数の低いものが画面にあるとわやくちゃになるだけなので描画を抑制しています。

300世代まで進んだ時点の図です。状況は変わってません。

1000世代まで進んだ時点の図です。やっぱり状況は変わってません。

あくまでも感じですが、うまい初期値をつかんだときは比較的早い段階でそれなりの場所を見つけるけれども、それ以上に点数を上げる(微妙な位置調整や回転角度調整・拡大/縮小調整)にはえらく手間がかかる感じがします。何度も試すとそうともいいきれないんですが、点数が上がらないときは、早めにあきらめて初期個体の作成からやり直ほうがよいのかもしれません。もしくは、遺伝的アルゴリズムの実装を根本的に誤っている可能性もあります、十分に。

もうひとつ。テンプレート画像のサイズが処理速度にかなり大きく影響します。

GaMatching.zip(369,860Bytes) ソースコードと実行ファイルです。いつものとおり画像ファイルをフォームに抱え込んでいるので、えらくサイズがでかくなってますが、中身のほうはサイズに比例してません。

EOFTOP