FRsūtil̲s
A fuzzy-rough reasoning utilities library
 
Loading...
Searching...
No Matches
frsutils.core.owa_weights Namespace Reference

Functions

 _owa_suprimum_weights_linear (int n)
 
 _owa_infimum_weights_linear (int n)
 

Function Documentation

◆ _owa_infimum_weights_linear()

frsutils.core.owa_weights._owa_infimum_weights_linear ( int n)
protected
Generates OWA weights for infimum operators:
n: length of the weights array
used for infimum operator smoothing
{1, 2, 3, . . ., n} : wi = 2i/n(n + 1)

Definition at line 24 of file owa_weights.py.

24def _owa_infimum_weights_linear(n: int):
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

◆ _owa_suprimum_weights_linear()

frsutils.core.owa_weights._owa_suprimum_weights_linear ( int n)
protected
Generates linear OWA weights (normalized):
n: length of the weights array
used for suprimum operator smoothing
{1, 2, 3, . . ., n} : wi = 2(n − i + 1)/n(n + 1)

Definition at line 3 of file owa_weights.py.

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 # 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