ラベル PSO の投稿を表示しています。 すべての投稿を表示
ラベル PSO の投稿を表示しています。 すべての投稿を表示

2009年5月18日月曜日

MATLABで並列計算(PSO)

素のMATLABは並列計算に弱いようで,最近のデュアルコアのPCだと,プロセッサ使用量が50%で頭打ちします.

ただ,最近学校の MATLAB ライセンスに Parallel Computing Toolbox が加わって一部関数が置き換えられたためか,単にバージョンアップの恩恵なのかは知りませんが,一部の計算ルーチンがマルチコア用にコンパイルされているらしく,計算によっては50%を超えるプロセッサ使用率を見ることもできるようになりました.

でも依然として,大半の処理は片方のコアのみで処理されるようです.
本来は並列計算できる部分は処理系が自動的に判別して最適に処理してくれるのが理想なんですが,なかなか実現されないですね.また,最近はコア1つ当たりの性能向上は収束気味で,今後はコアの数が増える方向にPCは進化するようなので,今後MATLABでPCの進化の恩恵を享受するためには,並列計算のスキルを身につけておく必要がありそうです.

MATLAB で Parallel Computing Toolbox が使える場合,単一マシンで並列処理をするのはとても簡単で
matlabpool 2 %デュアルコアの場合
parfor idx=1:100
   % 並列化する処理
end
matlabpool close

とやれば並列に処理されます.matlabpool の後の数字は生成されるスレッド数です.

結構並列化のオーバーヘッドがあるようで,単位処理の計算量があまりに小さい場合,かえって遅くなることもあるようです.結果が芳しくないときはプロファイラでチェックしてみるべきですね.

Particle Swarm Optimization (PSO) なんかは並列計算の恩恵を最大限に受けられるアルゴリズムなので,目的関数の評価に時間がかかる問題であれば,処理速度がほぼコア数倍になります.(といってもまだデュアルコアでしか試してませんが・・・)

もうちょっと手間をかけると複数のマシンをつないでクラスタリングとかもできるようなので,人がいない夜中とかに実験室のマシンを束ねて試してみようかな〜

・・・・と思ったらクラスタリングには MATLAB Distributed Computing Server っていう別製品が必要なようですね.
また,Parallel Computing Toolbox ではスレッドの数も4つまでに制限されてるようです.
つまり現状ではクアッドコアのXeon W3570以上のCPUを使っても性能向上は期待できないということかな?
値段を考えると2.66GHzのXeon W3520か,近々更新される見込みなCore i7あたりが計算用マシンのCPUとしてはベストになるのだろうか・・・

2008年9月21日日曜日

MATLAB用PSOクラス

(English version is HERE.)
MATLABの2008aからオブジェクトの新しい書き方が導入されました.
あんまりオブジェクト指向なプログラミングの経験はないのですが,新しい書き方はだいぶ簡単で使いやすいと思います.

というわけで,とりあえず PSO のルーチンを2008a仕様に書き換えてみました.

pso.m -- PSOクラス
psotest.m --- pso.mの使用例,ベンチマーク問題を解きます.
psotest2.m --- pso.mの使用例,簡単な制約付き最適化問題を解きます.

使い方はpsotest2.mを見ればだいたいわかるはず‥

PSOによる固定構造補償器設計

韓国のIFACではPSO(Particle Swarm Optimization)という最適化アルゴリズムを使った固定構造補償器設計について発表してきました.

発表のメインは,制御系設計で必要となる拘束条件(閉ループの安定性とか)を簡単に扱う方法の提案で,これによってPSOのお手軽さを損なわずに制御系設計をすることが出来ます.

PID制御器のチューニングみたいな,設計変数が少なくて,それでいてパラメータの増減と性能との因果関係がそこそこ強い問題に関しては,PSOは強くてお手軽です.

あまりにもお手軽なので,解析解があるような場合にもPSOで設計しちゃっていいんじゃないかと思うほどです.
理論を研究する立場としては,おもしろくないことこの上ないですが(笑).

しかし,前提となっているのはしっかりしたプラントのモデルで,実用上はこっちの方がネックになるでしょうから,次は連続時間のシステム同定と制御系設計を同時に行えるような理論の構築を目指したいなーとか思っています.
Campi先生のVRFTとかはすごく良いと思うのだけど,やっぱり離散時間システムのいやらしさというか,サンプリング間隔を短く取ることが必ずしも結果に寄与しないというのが単に腹が立つだけでなく,実用上も問題だと思うので.

一応,興味を持たれた方のために発表の参照情報を置いておきます.
Automaticaに投稿した段階では,制約条件の扱いをALPSOという方法で行っていましたが,これは複雑な上に性能が優れているわけではないので,IFACで提案した方法の方が優れていると思います.
I. Maruta, T.H. Kim, T. Sugie:
Synthesis of fixed-structure H-infinity controllers via Constrained Particle Swarm Optimization,
Proceedings of the 17th IFAC World Congress, Seoul, Korea, pp. 7843-7848  (2008. 7)
発表スライド(PDF)
ちなみに発表ではH∞ノルムに基づいた設計仕様を扱っていますが,応答とかに関する仕様を与えても,十分実用的に動くはずです.
そういう場合だと解析解が存在するケースや,もっと効率的な方法がある場合も少なくないでしょうが,PSOよりお手軽な方法はそうないでしょうから,PSOで失敗してから検討してみても良いと思います(笑)

PSOの実装については(自分でやっても大した手間ではないのですが‥)後日また書く予定です.