DSMクラスタリングアルゴリズムの擬似コード
DSM(Design Structure Matrix)のクラスタリングプログラムについて、前回そのアルゴリズムを紹介しましたが、学術論文からアルゴリズムの擬似コードを見つけたので参考として掲載したいと思います。
前回の記事は以下
擬似コード
出典は以下の論文になります。
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
簡単ですが今回はここまでにします。