3def _owa_suprimum_weights_linear(n: int):
4 """Generates linear OWA weights (normalized):
5 n: length of the weights array
6 used for suprimum operator smoothing
7 {1, 2, 3, . . ., n} : wi = 2(n − i + 1)/n(n + 1)"""
8 if n <= 0:
9 raise "n must be an integer number >= 1"
10
11 if n == 1:
12 return np.array([1.0])
13 weights = np.arange(n, 0, -1)
14 denominator = n * (n + 1) / 2.0
15 if denominator == 0 or not np.isfinite(denominator):
16
17
18 raise "divided by 0.0 error or some infinite values in denimonator calculations"
19 val = weights / denominator
20 sum_vals = np.sum(val)
21 assert np.isclose(sum_vals, 1.0)
22 return val
23