We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
There was an error while loading. Please reload this page.
1 parent 22cb05e commit 4b03f38Copy full SHA for 4b03f38
index.html
@@ -211,6 +211,11 @@ <h3>Enter your data and go on!</h3>
211
<input type="checkbox" id="check_nds"></input>
212
</td>
213
</tr>
214
+ <tr>
215
+ <td>
216
+ <label for="check_copeland">Copeland</label>
217
+ <input type="checkbox" id="check_copeland"></input>
218
+ </td>
219
</table>
220
221
src/main/scala/Main.scala
@@ -359,6 +359,14 @@ def evaluate(problem: MCDMProblem): Unit =
359
methodsnames = methodsnames.appended("Nds")
360
scores = Matrix.appendcol(scores, ndsresult.scores)
361
ranks = Matrix.appendcol(ranks, ndsresult.scores.reverse.map(_ + 1))
362
+ if check_copeland.checked then
363
+ if scores.length == 0 then
364
+ HtmlUtils.msgbox("At least one method should be selected for perform Copeland.")
365
+ else
366
+ val copelandresult = copeland(ranks)
367
+ methodsnames = methodsnames.appended("Copeland")
368
+ scores = Matrix.appendcol(scores, copelandresult.scores)
369
+ ranks = Matrix.appendcol(ranks, copelandresult.ranks)
370
371
val resultstr = HtmlUtils.scorematrixtohtml(problem, methodsnames, scores)
372
div_output_scores.innerHTML = resultstr
src/main/scala/copeland.scala
@@ -7,7 +7,7 @@ case class CopelandResult(
7
ranks: Vec
8
)
9
10
-def level_of_dominance(v1: Array[Int], v2: Array[Int]): Int =
+def level_of_dominance(v1: Vec, v2: Vec): Int =
11
var lod = 0
12
val n = v1.length
13
for (i <- 0 until n)
@@ -16,20 +16,21 @@ def level_of_dominance(v1: Array[Int], v2: Array[Int]): Int =
16
17
lod
18
19
-def dominance_scores(ordering_mat: Array[Array[Int]]): Array[Array[Int]] =
+def dominance_scores(ordering_mat: Mat): Mat =
20
val n = ordering_mat.length
21
Array.tabulate(n, n)((i, j) =>
22
level_of_dominance(ordering_mat(i), ordering_mat(j))
23
24
25
-def winloss_scores(dommat: Array[Array[Int]]): Array[Array[Int]] =
+def winloss_scores(dommat: Mat): Mat =
26
val n = dommat.length
27
- Array.tabulate(n, n)((i, j) => (dommat(i)(j) - dommat(j)(i)).sign.toInt)
+ Array.tabulate(n, n)((i, j) => (dommat(i)(j) - dommat(j)(i)).sign)
28
29
-def copeland(rankmatrix: Array[Array[Int]]): CopelandResult =
+
30
+def copeland(rankmatrix: Mat): CopelandResult =
31
32
val winloses = winloss_scores(dominance_scores(rankmatrix))
- val scores = Array.tabulate(winloses.length)(i => winloses(i).sum.toDouble)
33
+ val scores = Array.tabulate(winloses.length)(i => winloses(i).sum)
34
val ranks = ranksfromscores(scores)
35
36
CopelandResult(
src/main/scala/gui/domobjects.scala
@@ -131,3 +131,6 @@ object DomObjects:
131
val check_nds = document
132
.getElementById("check_nds")
133
.asInstanceOf[HTMLInputElement]
134
+ val check_copeland = document
135
+ .getElementById("check_copeland")
136
+ .asInstanceOf[HTMLInputElement]
src/test/scala/testcopeland.scala
@@ -8,12 +8,12 @@ import org.expr.mcdm.rov
class TestCopeland extends munit.FunSuite {
test("Copeland Example - 1") {
- val mopa_rank = Array(1, 4, 2, 3).reverse
- val moosra_rank = Array(1, 2, 3, 4).reverse
- val copras_rank = Array(1, 3, 2, 4).reverse
14
- val saw_rank = Array(1, 3, 2, 4).reverse
15
- val wpm_rank = Array(1, 3, 2, 4).reverse
- val rov_rank = Array(4, 1, 2, 3).reverse
+ val mopa_rank = Array(1.0, 4, 2, 3).reverse
+ val moosra_rank = Array(1.0, 2, 3, 4).reverse
+ val copras_rank = Array(1.0, 3, 2, 4).reverse
+ val saw_rank = Array(1.0, 3, 2, 4).reverse
+ val wpm_rank = Array(1.0, 3, 2, 4).reverse
+ val rov_rank = Array(4.0, 1, 2, 3).reverse
val mat = Array(
mopa_rank,
0 commit comments