システムとモデリング

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

DSM-Design Structure MatrixをMatlabのHeatMapで描画&ネットワーク可視化

 前回の記事ではDSM(Design Structure Matrix)をJavaScriptで描画しましたが、今回はMatlabのHeatMapで描画してみます。Matlabはやはり有料ソフトだけあってかドキュメントが充実しており、HeatMap内のannotationの付け方もすぐにわかりました。  前回の記事は以下です。 otepipi.hatenablog.com

例題

前回と同じく、wikipediaDSM例を描画します。 f:id:Otepipi:20190426224207p:plain

参考にしたMatlabのドキュメントは以下です。

jp.mathworks.com

cdata = [ 0 1 0 0 0 1 0;0 0 0 1 0 0 0;1 0 0 0 0 0 1;0 0 0 0 1 0 0;
    0 1 0 0 0 1 0;0 0 1 0 0 0 0;1 0 0 0 1 0 0];
xvalues = {'ElementA','ElementB','ElementC','ElementD','ElementE','ElementF','ElementG'};
yvalues = {'ElementA','ElementB','ElementC','ElementD','ElementE','ElementF','ElementG'};
h = heatmap(xvalues,yvalues,cdata,'ColorbarVisible','off');

h.Title = 'DSM例題';
h.XLabel = '';
h.YLabel = '';

これで次のように描画されました。

f:id:Otepipi:20190427151955p:plain

ネットワーク可視化

DSMグラフ理論の派生ですので、構造をネットワーク形式で可視化することができます。下記を参考にしました。

jp.mathworks.com

以下のようにdigraphを使用してDSMの行列から有向グラフを作成します。

cdata = [ 0 1 0 0 0 1 0;0 0 0 1 0 0 0;1 0 0 0 0 0 1;0 0 0 0 1 0 0;
    0 1 0 0 0 1 0;0 0 1 0 0 0 0;1 0 0 0 1 0 0];
xvalues = {'ElementA','ElementB','ElementC','ElementD','ElementE','ElementF','ElementG'};
yvalues = {'ElementA','ElementB','ElementC','ElementD','ElementE','ElementF','ElementG'};
h = heatmap(xvalues,yvalues,cdata,'ColorbarVisible','off');

h.Title = 'DSM例題';
h.XLabel = '';
h.YLabel = '';

G = digraph(cdata',xvalues);

plot(G,'Layout','force')

これにより以下のように描画されます。

f:id:Otepipi:20190427155812p:plain

DSMと等価なネットワークが無事吐き出されました。 このようなややこしいネットワークを1つの行列で表現できるDSMは中々強力な手法のように思えます。

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