我正在尝试实施本文中的示例 1:学习加权 OWA 运算符的权重 (https://ieeeexplore.ieee.org/document/343740)
它非常简单明了,表明为了更新权重,我们需要更新 lambda 表达式,为了更新 lambda 表达式,有这个公式:
在 150 次迭代后的文章 lambdas 是: l1=-0.61; l2 = -0.29; l3 = -0.05; lq = 1.51
但是我的代码得到了不同的结果!这是我的代码:
iterations = 150
beta = 0.35
samples = [[0.4, 0.1, 0.3, 0.8, 0.24],
[0.1, 0.7, 0.4, 0.1, 0.16],
[1.0, 0.0, 0.3, 0.5, 0.15],
[0.2, 0.2, 0.1, 0.4, 0.17],
[0.6, 0.3, 0.2, 0.1, 0.18]]
sensors = {0: {'lambda': 0}, 1: {'lambda': 0}, 2: {'lambda': 0}, 3: {'lambda': 0}}
def calculate_lambda(sample, aggregated_value):
sample.sort(reverse=True)
def calculate_sum():
dk = 0
for i in range(4):
dk += math.exp(sensors[i]['lambda'])
return dk
lambda_j = calculate_sum()
def calculate_dkHat():
dk = 0
for i in range(4):
dk += sample[i] * (math.exp(sensors[i]['lambda']) / lambda_j)
return dk
for i in range(4): # calculate lambda for each sensor
a = math.exp(sensors[i]['lambda']) / lambda_j
dkHat = calculate_dkHat()
derivative = a * (sample[i] - dkHat) * (dkHat - aggregated_value)
sensors[i]['lambda'] = sensors[i]['lambda'] - beta * derivative
# main loop
for iteration in range(150):
for sample in samples:
calculate_lambda(sample[:4], sample[4])
print(sensors)
有人知道我错过了什么吗?或者有人以前实施过这篇文章的例子吗?