def attack_rmse(attack, num_colluders): num_legit_sensors = total_sensors - num_colluders legitimate_readings = readings_generator.readings(biases[:num_legit_sensors], variances[:num_legit_sensors], num_times, true_value) return rms_error(robust_aggregate.estimate(attack(legitimate_readings, true_value, num_colluders, colluder_bias), reciprocal), [true_value(t) for t in range(num_times)])
def test_iterfilter(num_honest, num_skewing, num_avg, num_times, repetitions, randseed=None): if randseed: random.seed(randseed) num_pre_avg = num_honest + num_skewing recip_rms = [] expo_rms = [] for r in range(repetitions): print(r) honest_data = [[ random.gauss(TRUTH, VARIANCE) for j in range(num_times) ] for i in range(num_honest)] skewed_data = [[ random.gauss(COLLUSION_VALUE, VARIANCE) for j in range(num_times) ] for i in range(num_skewing)] uncolluded_data = honest_data + skewed_data sneaky_data = [[ sum([uncolluded_data[j][i] for j in range(num_pre_avg)]) / num_pre_avg for i in range(num_times) ]] final_data = uncolluded_data + sneaky_data recip_rms += [ rms_error(estimate(final_data, reciprocal), [TRUTH] * num_times) ] expo_rms += [ rms_error(estimate(final_data, exponential), [TRUTH] * num_times) ] recip_rms_bayes = stats.bayes_mvs(recip_rms) expo_rms_bayes = stats.bayes_mvs(expo_rms) return (recip_rms_bayes[0], expo_rms_bayes[0])
if __name__ == '__main__': truth = 0 num_times = 100 num_honest = 20 honest_variance = 1 honest_bias = 0 honest_bias_variance = 0.1 honest_variances = [honest_variance] * num_honest honest_biases = [ random.gauss(honest_bias, honest_bias_variance) for i in range(num_honest) ] honest_readings = readings_generator.readings(honest_biases, honest_variances, num_times, lambda t: truth).tolist() num_influenced = 5 influenced_value = 1000 influenced_readings = num_influenced * [[truth] * (num_times - 1) + [influenced_value]] readings = honest_readings + influenced_readings estimates = robust_aggregate.estimate(readings, robust_aggregate.reciprocal) error = rms_error(estimates, [truth] * len(readings)) / len(readings) print(error)
if __name__ == '__main__': repeats = 1000 variance = 1 bias = 0 truth = 0 times = 10 num_sensors = 10 variances = [variance] * num_sensors biases = [bias] * num_sensors time_errors = [[] for t in range(times)] def truth_fn(t): return truth for i in range(repeats): print ('{}/{}'.format(i, repeats)) readings = readings_generator.readings(biases, variances, times, truth_fn) estimate = robust_aggregate.estimate(readings, exponential) for t in range(times): time_errors[t] += [estimate[t]] mvs = [bayes_mvs(t) for t in time_errors] pp.errorbar(range(times), [m[0][0] for m in mvs], yerr=[m[0][0]-m[0][1][0] for m in mvs]) pp.show()
def estimate(readings): return robust_aggregate.estimate(readings, robust_aggregate.reciprocal)