前回の記事で行列を並べ替える置換行列を勉強しましたが、これをDSM(Design Structure Matrix)に応用してみます。
例題
以下のDSMを対角線上に非ゼロ要素が集まるように行列演算で並べ替えます。
また、今回のDSMの隣接行列は以下のような7x7行列になります。
並べ替えるには以下のように各行を置換してやる必要があります。また、列についても同様の置換を行う必要があります。
置換前 | 置換後 |
---|---|
B行 | F行 |
C行 | E行 |
E行 | B行 |
F行 | C行 |
この置換を行うための置換行列Pを作成します。この置換行列Pは7x7の単位行列Iから、表のように該当する行を置換した行列になります。
ここで、対角線上に非ゼロ要素が集まったDSMの隣接行列Bは以下のように求めることができます。
実際、この演算を行った後のDSMは以下のようになります。
グラフ表示
並べ替える前後のDSMをグラフで描画してみます。
並べ替える前
並べ替えた後
……隣接行列を並べ替えただけではグラフの描画は変わらないようです。
今回はここまでにします。
最後に今回使用したJuliaのコードを記載します。
using Seaborn
using LightGraphs
using GraphPlot
A=[ 0 1 0 0 1 1 0; 0 0 0 1 0 0 1; 0 1 0 1 0 0 1; 0 1 1 0 1 0 1; 0 0 0 1 0 1 0; 1 0 0 0 1 0 0; 0 1 1 1 0 0 0];
valuesA = ["A","B","C","D","E","F","G"];
P = zeros(7,7);
P[1,1] =1;
P[2,6] =1;
P[3,5] =1;
P[4,4] =1;
P[5,2] =1;
P[6,3] =1;
P[7,7] =1;
B = P * A * P';
valuesB = ["A","F","E","D","B","C","G"];
heatmap(B,annot=true, cbar=false,square=true,cmap="Blues",linewidths="0.5",linecolor="grey",xticklabels = valuesB, yticklabels = valuesB )
plt.savefig("DSMtest3.png",bbox_inches="tight");
GA = DiGraph(A)
GB = DiGraph(B)
gplot(GA,nodelabel = valuesA,nodelabelc= "black")
gplot(GB,nodelabel = valuesB,nodelabelc= "black")