PSOシミュレータ

PSOによる関数最適化のシミュレータです

Particle Swarm Optimization(PSO)とは

このシミュレータはParticle Swarm Optimizationとはどのようなものかを知ろうというソフトです.その概観は以下のとおりです.PSOは1995年にJames Kennedyという人によって提案されたアルゴリズムです.ここでのPSOは3次元空間を数多くの個体が動き回り,それぞれの関数の一番低いところを探すように作られています.それぞれの個体は位置ベクトル,速度ベクトルと,その個体が最良の適合度を獲得した場所だけを記憶しています.そして個体全体の中における最良の適合値の場所の情報もぞれぞれの個体が共有することが出来ます.

すべての個体が世代を経ることにより獲得された最も優れた位置とそれぞれの個体が世代を経ることにより獲得された最も優れた位置の方向へそれぞれの個体が引っ張られると言うと分かりやすいでしょうか.その方法は以下の式によって行われます.

ダウンロード

Particle Swarm Optimization ver1.0 (402KB)
このファイルをダウンロードし解凍すると「EquToDbl.dll」と「EquToDbl.txt」と「PSO.exe」という3つのファイルが出てきます.そして「PSO.exe」をクリックするとPSOを起動することができます.なおこのシミュレータにはやす兵衛さんが作られた数式計算DLLを利用させていただいています.

↑これをクリック!!

PSOの遊び方は簡単です.わからないところがあればこの使い方の説明のあとにある各機能の説明についても読んでみてください.

Setボタン押すと初期集団が生成されます.

これを押すと計算を始めます.

これを押すと計算を中断することができます.途中の個体の動きをじっくり見たいときとかに使ってください.

Stopボタンを押したあとStepボタンは使えるようになります.Stepボタンは世代ごとの動きを逐次見ることができます.

計算が終わったらこれを押してください.もう一度始めることができます.

Parameter

集団サイズのことです.

個体が動くときの最大速度です.これ以上速くは動きません.

反復回数です.

上にある2式のうち下のほうのWの値です.標準では0.9になっています.こうすることによって速度はだんだん弱まっていきます.

Choose Function

これにチェックを入れると自由に関数を定義することができます.変数は小文字の xとy です.大文字の XやYは使えません.他に使える関数は以下のとおりです.ただし,これを使うと非常に重くなってしまいます.原因究明中です….

[定数] 数値
pi
deg
e
g
T0
P0
数値定数(1, 2.0, 3.0E10 等)
円周率(3.1416...)
pi / 180
自然対数の底(2.7182....)
重力加速度(9.80665)
絶対温度(273.15)
大気圧(101325)
[演算子] -
+ - * /
^
!
負の数値
四則演算
ベキ乗
階乗
[関数] abs(x)
|x|
sqrt(x)
exp(x)
log(x)
log10(x)
sin(x)
cos(x)
tan(x)
asin(x)
acos(x)
atan(x)
sinh(x)
cosh(x)
tanh(x)
絶対値
絶対値
平方根
指数
自然対数
常用対数
サイン
コサイン
タンジェント
逆サイン
逆コサイン
逆タンジェント
ハイパボリックサイン
ハイパボリックコサイン
ハイパボリックタンジェント

ここから下に書いてある式はDeJongの標準化関数といわれています.F1〜F5まであり,GAのベンチマークテストや他の手法との定量的評価手段として用いられています.その関数は以下のようなものです.

単峰性の山の形をしているので解くのは簡単.

これも単峰性の山の形をしているので解くのは簡単.

これは階段状になっているので少し難しい.

これはF1にノイズがのったような感じ.一応多峰性関数.すこし難しい.

これは難しい.多峰性関数.とんがっているので一度落ちると抜け出るのも大変.特に適合度が2の場所が曲者.刺さると痛い.

ここに表示されるのは反復回数です.世代数といってもいいも知れません.

それぞれの個体が見つけた一番小さな値です.

個体全体の適合度の平均です.ここにチェックをいれるとグラフにこの適合度も表示させることが出来ます.しかし,Best fitnessとの差があり過ぎるので出来るだけやめた方がよいです.

Best fitnessの場所を表しています.

ちなみにGAとの比較

このPSOシミュレータとGA3Dシミュレータを用いて比較を行いました.下のグラフは20回の試行の平均値です.ただし,ここでのPSOとGAとの比較には問題があります.厳密な比較は出来ていません.なぜでしょうか?考えてみましょう.

GA PSO
世代数 50 50
個体数 200 200
交叉率 0.7
突然変異率 0.01
遺伝子長 13
エリート戦略 5%
交叉方法 一点交叉
コーディング方法 バイナリ
最大速度 1
慣性の重み 0.9

参考文献

さらに詳しく知りたい方は以下の論文などを参考にしてください.とりあえず日本語の本はないです.