システムとモデリング

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

DSMクラスタリングアルゴリズムの擬似コード

DSM(Design Structure Matrix)のクラスタリングプログラムについて、前回そのアルゴリズムを紹介しましたが、学術論文からアルゴリズム擬似コードを見つけたので参考として掲載したいと思います。

前回の記事は以下

otepipi.hatenablog.com

擬似コード

出典は以下の論文になります。

Figueiredo Damásio, J., Almeida Bittencourt, R., Dario, D., & Guerrero, S. (n.d.). Recovery of Architecture Module Views using an Optimized Algorithm Based on Design Structure Matrices. Retrieved from https://arxiv.org/ftp/arxiv/papers/1709/1709.07538.pdf

擬似コードは以下のようになります。

クラスタリングプログラム

1. DSMClustering(matrix)
2. 
3. modules = createModules(matrix) 
4. tCCost = calcCoordCost(modules)
5. counter = 0 
6. while isImproving() 
7.  for i = 1 to size(DSM) * times
8.    element = pickRandomElement(matrix)
9.    bestModule = bid(modules, element)
10.  Move(element, bestModule)
11.  newCost = calcCoordCost(modules)
12.  if newCost <= tCCost or RandAccept()
13.    tCC = newCost
14.  else UndoMove() Figure

bidの計算

1. bid(modules, elem) 
2. 
3. bestModule = NIL 
4. bestBid = -1; 
5. for each module mod ∈ modules 
6.  bid = 0
7.  for each Member memb ∈ Members(mod)
8.   bid += DSMelem, memb
9.   bid = bidpowdep /size(mod)powbid
10.   if bid > bestBid
11.     bestBid = bid
12.     bestModule = mod
13.return bestModule

コストの計算

1. calcCoordCost(modules) 
2. 
3. for each member mb1 ∈ DSM 
4.  for each member mb2 ∈ DSM
5.   // get element parent module
6.   Module mod1 = getModule(mb1)
7.   Module mod2 = getModule(mb2)
8.   cost = DSMmb1,mb2 + DSMmb2,mb1
9.   if mod1 = mod2
10.    intraCost += cost*Size(mod1)powcc
11.  else 
12.    extraCost += cost*Size(DSM)powcc
13.    totalCost = intraCost + extraCost 
14. return totalCost

簡単ですが今回はここまでにします。