Skip to content

Commit 3fe0648

Browse files
committed
add Null and Divide all by norm Normalizations
1 parent 640a7c3 commit 3fe0648

File tree

3 files changed

+65
-1
lines changed

3 files changed

+65
-1
lines changed

src/main/scala/normalization.scala

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ import org.expr.mcdm.Mat
44
import org.expr.mcdm.Vec
55
import org.expr.mcdm.Direction
66

7+
import scala.math
8+
79
object Normalization:
810

911
def VectorNormNormalization(
@@ -52,3 +54,31 @@ object Normalization:
5254
then decmat(i)(j) / columnmaxs(j)
5355
else columnmins(j) / decmat(i)(j)
5456
)
57+
58+
def NullNormalization(
59+
decmat: Mat,
60+
weights: Vec,
61+
directions: Array[Direction]
62+
): Mat =
63+
decmat
64+
65+
def DivideByAllNormNormalization(
66+
decmat: Mat,
67+
weights: Vec,
68+
directions: Array[Direction]
69+
): Mat =
70+
71+
// return mat ./ sqrt(sum(mat .* mat))
72+
val (n, m) = Matrix.size(decmat)
73+
74+
val matmat = Array.tabulate(n, m)((i, j) => decmat(i)(j) * decmat(i)(j))
75+
76+
val sumofall = matmat.flatten.sum
77+
78+
val sqrtsum = math.sqrt(sumofall)
79+
80+
Array.tabulate(n, m)((i, j) => decmat(i)(j) / sqrtsum)
81+
82+
83+
84+

src/main/scala/saw.scala

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package org.expr.mcdm
22

3-
import org.expr.mcdm.Direction
3+
import org.expr.mcdm._
4+
45

56
case class SawResult(
67
normalizedDecisionMat: Mat,

src/test/scala/testnormalization.scala

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,5 +80,38 @@ class TestNormalizations extends munit.FunSuite {
8080

8181
A.assert(Matrix.elementwise_equal(result, expected, 1e-5))
8282
}
83+
84+
test("Divide By All Norm Normalization"){
85+
val mat = Array(
86+
Array(0.0264859, 0.0565293, 0.960557, 0.765195, 0.135447),
87+
Array(0.31746 , 0.631628 , 0.142819, 0.94584 , 0.553917),
88+
Array(0.166361 , 0.197306 , 0.725104, 0.334121, 0.202895))
89+
90+
val directions = Array(Maximize, Minimize, Maximize, Minimize, Maximize)
91+
92+
val result = Normalization.DivideByAllNormNormalization(mat, Array.emptyDoubleArray, directions)
93+
94+
val expected = Array(
95+
Array(0.0132476, 0.0282746, 0.480447 , 0.382732, 0.0677471),
96+
Array(0.158786 , 0.315925 , 0.0714348, 0.473086, 0.277056),
97+
Array(0.0832097, 0.0986878, 0.36268 , 0.167119, 0.101483))
98+
99+
A.assert(Matrix.elementwise_equal(result, expected, 1e-5))
100+
}
101+
102+
test("Null Normalization"){
103+
val mat = Array(
104+
Array(0.0264859, 0.0565293, 0.960557, 0.765195, 0.135447),
105+
Array(0.31746 , 0.631628 , 0.142819, 0.94584 , 0.553917),
106+
Array(0.166361 , 0.197306 , 0.725104, 0.334121, 0.202895))
107+
108+
val directions = Array(Maximize, Minimize, Maximize, Minimize, Maximize)
109+
110+
val result = Normalization.NullNormalization(mat, Array.emptyDoubleArray, directions)
111+
112+
val expected = mat
113+
114+
A.assert(Matrix.elementwise_equal(result, expected, 1e-5))
115+
}
83116

84117
}

0 commit comments

Comments
 (0)