FPGA開発日記

FPGAというより、コンピュータアーキテクチャかもね! カテゴリ別記事インデックス https://sites.google.com/site/fpgadevelopindex/

「機械学習と深層学習」をやってみる(4. 蟻コロニー最適化法)

機械学習と深層学習」の書籍を引き続きやってみる。

機械学習と深層学習 ―C言語によるシミュレーション―

機械学習と深層学習 ―C言語によるシミュレーション―

今回は3.1章の蟻コロニー最適化法をやってみる。蟻のフェロモンに従って距離を最適化していく手法で、ランダム性と群知能により徐々に最適解を見つけていく手法だ。 これは遺伝的アルゴリズムとかそういうのに雰囲気が似ている。

これ、作っていて気がついたのだが、初期値に左右されすぎる。書籍のサンプルコードをそのまま実行しても、書籍に書いてある通りにはならなかった。

github.com

*mstep
1 0 0 0 0 0 1 1 0 0
0 0 0 0 0 0 0 1 0 0
0 0 0 0 0 0 0 1 0 0
0 0 0 0 1 0 0 1 0 0
0 0 0 0 0 0 0 1 0 0
1 0 0 0 0 1 0 1 0 0
0 0 0 0 0 0 0 1 1 0
0 0 0 1 0 0 0 1 0 0
0 0 0 0 0 1 0 1 0 0
0 0 0 0 0 0 0 1 0 0
17.200000
50:
8.77 9.05 8.87 8.99 9.09 8.86 8.92 1.10 8.92 9.25
0.78 0.50 0.68 0.55 0.45 0.69 0.63 8.45 0.62 0.29

縦方向が蟻の種類、横方向が各蟻がどのような選択をしたのかを示しているが、この場合理想的な回答はすべて0側選ぶのが正しい。 そうすると評価値は最小で10.0になる。

しかしここでは7ステップ目がすべて1になり、悪い方向の結果が伝搬してしまっている。群知能は人間の多数決と同じで、間違っていたとしてもそれが多数であるとそれが答えになってしまうという特徴があるらしい。

f:id:msyksphinz:20170612235109p:plain