@@ -3,38 +3,31 @@ package org.expr.mcdm
33import org .expr .mcdm .Direction .{Maximize , Minimize }
44
55case class CopelandResult (
6- ranks : Vec ,
6+ ranks : Vec
77)
88
9+ def level_of_dominance (v1 : Array [Int ], v2 : Array [Int ]): Int =
10+ var lod = 0
11+ val n = v1.length
12+ for (i <- 0 until n)
13+ if (v1(i) < v2(i))
14+ lod += 1
915
10- def level_of_dominance (v1 : Array [Int ], v2 : Array [Int ]): Int =
11- var lod = 0
12- val n = v1.length
13- for (i <- 0 until n)
14- if (v1(i) < v2(i))
15- lod += 1
16+ lod
1617
17- lod
18+ def dominance_scores (ordering_mat : Array [Array [Int ]]): Array [Array [Int ]] =
19+ val n = ordering_mat.length
20+ Array .tabulate(n, n)((i, j) =>
21+ level_of_dominance(ordering_mat(i), ordering_mat(j))
22+ )
1823
24+ def winloss_scores (dommat : Array [Array [Int ]]): Array [Array [Int ]] =
25+ val n = dommat.length
26+ Array .tabulate(n, n)((i, j) => (dommat(i)(j) - dommat(j)(i)).sign.toInt)
1927
20- def dominance_scores (ordering_mat : Array [Array [Int ]]): Array [Array [Int ]] =
21- val n = ordering_mat.length
22- Array .tabulate(n, n)((i, j) => level_of_dominance(ordering_mat(i), ordering_mat(j)))
28+ def copeland (rankmatrix : Array [Array [Int ]]): CopelandResult =
2329
24-
25- def winloss_scores (dommat : Array [Array [Int ]]): Array [Array [Int ]] =
26- val n = dommat.length
27- Array .tabulate(n, n)((i, j) => (dommat(i)(j) - dommat(j)(i)).sign.toInt)
28-
29- def copeland (rankmatrix : Array [Array [Int ]]): CopelandResult =
30-
31- /*
32- winlosses = ordering_mat |> dominance_scores |> winloss_scores
33- n, _ = size(winlosses)
34- scores = map(i -> Int(sum(winlosses[i, :])), 1:n)
35- return scores
36- */
37- val winloses = winloss_scores(dominance_scores(rankmatrix))
38- val scores = Array .tabulate(winloses.length)(i => winloses(i).sum)
39- val ranks = ranksfromscores(scores.map(_.toDouble))
40- CopelandResult (ranks)
30+ val winloses = winloss_scores(dominance_scores(rankmatrix))
31+ val scores = Array .tabulate(winloses.length)(i => winloses(i).sum)
32+ val ranks = ranksfromscores(scores.map(_.toDouble))
33+ CopelandResult (ranks)
0 commit comments