FRsūtil̲s
A fuzzy-rough reasoning utilities library
 
Loading...
Searching...
No Matches
owa_weights.py
Go to the documentation of this file.
1import numpy as np
2
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 # return np.array([])
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 # Fallback for very large n where calculation might overflow/be zero
17 # return np.full(n, 1.0 / n)
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
25 """Generates OWA weights for infimum operators:
26 n: length of the weights array
27 used for infimum operator smoothing
28 {1, 2, 3, . . ., n} : wi = 2i/n(n + 1)"""
29 if n <= 0:
30 raise "n must be an integer number >= 1"
31 # return np.array([])
32 if n == 1:
33 return np.array([1.0])
34 weights = np.arange(1, n+1, 1)
35 denominator = n * (n + 1) / 2.0
36 if denominator == 0 or not np.isfinite(denominator):
37 # Fallback for very large n where calculation might overflow/be zero
38 # return np.full(n, 1.0 / n)
39 raise "divided by 0.0 error or some infinite values in denimonator calculations"
40 val = weights / denominator
41 sum_vals = np.sum(val)
42 assert np.isclose(sum_vals, 1.0)
43 return val