システムとモデリング

modelica, Julia, Design Structure Matrix, SysML, 他モデリング全般について。

MatlabのクラスタリングプログラムでDSMを整理する

今回は以下のサイトで公開されているMatlabクラスタリングプログラムを使用してDSMクラスタリングしてみます。

MATLAB Macro for Clustering DSMsdsmweborg.wordpress.com

またこのプログラムを作った背景や詳しい内容は下記pdfにあります。

http://www.dsmweb.org/uploads/media/MSc_Thebeau.pdf

クラスタリングアルゴリズムの内容

以下のようなアルゴリズムです。

  1. 初期条件として全ての要素を独立したクラスターとする。
  2. この状態のDSMコストを計算する。
  3. 1つの要素をランダムに選択する。
  4. 選択した要素について、DSM中の全クラスターからのbidを計算する。
  5. 1~'rand_bid'(このアルゴリズムのパラメーター)までのランダムな数を選択する。
  6. 選択した要素を、最もbidの大きい(step5でランダムな数がrand_bidと等しかった場合は2番めに大きいbidクラスターのメンバーにする。
  7. 1~rand_accept(このアルゴリズムのパラメーター)までのランダムな数を選択する。
  8. 新しく計算したコストが前回計算したコストよりも小さかった場合、もしくはstep7で選択した数字がrand_acceptと等しかった場合、この変更を永遠にする。
  9. Step3に戻り、設定回数に達するまで繰り返す。

bidは以下の式で計算します。 f:id:Otepipi:20190514212551p:plain

コストは以下の式で計算します。 f:id:Otepipi:20190514212801p:plain

f:id:Otepipi:20190514212839p:plain

f:id:Otepipi:20190514212919p:plain

また、各パラメーターは以下のように設定できます。

f:id:Otepipi:20190514213101p:plain

実行してみる。

資料に載っている例題通りのDSMクラスタリングしてみます。 クラスタリングする前のDSMは以下のようになります。

f:id:Otepipi:20190514214044p:plain

これはMatlabの散布図で表現されています。いつもはheatmapを使用していたので新鮮です。

これを先程のクラスタリングアルゴリズムを使用してクラスタリングします。具体的には、先程掲載したダウンロードしたファイルを解凍して、フォルダの中身のMatlabファイルを全てMatlabのカレントディレクトリにコピーした後で、run_cluster_Aを実行しました。

すると以下のようなクラスタリングされたDSMがプロットされます。

f:id:Otepipi:20190514214415p:plain

また、コストの経時変化も表示されます。

f:id:Otepipi:20190514214609p:plain

以上のように、DSMクラスタリングが実行できました。別の環境でも試してみたいですね。

今回はここまでにします。