iot-wsn/simulation/pretty.py

138 lines
3.2 KiB
Python

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
import csv
import os
import re
import statistics
### PARAMETERS ###
RESULTSDIR='results/'
### FUNCTIONS ###
def compute_confidence_interval(samples): # 95%
stdev = statistics.stdev(samples)
ci = 1.96 * stdev / np.sqrt(len(samples))
return ci
### GLOBAL VARIABLES ###
all_route_discovery = dict()
### MAIN ###
for filename in os.listdir(RESULTSDIR):
df = pd.read_csv(RESULTSDIR + '/' + filename,
delimiter='\s|\t',
index_col=0,
nrows=4,
engine='python',
header=None).T
kappa = int(df['KAPPA'].to_string().split()[1])
i_min = int(df['I_MIN'].to_string().split()[1])
i_max = int(df['I_MAX'].to_string().split()[1])
key = str(kappa) + ':' + str(i_min) + ':' + str(i_max)
if (not key in all_route_discovery):
all_route_discovery[key] = { 'samples': [], 'k': kappa, 'i_min': i_min }
with open(RESULTSDIR + '/' + filename) as file:
for line in file:
if (re.match('ALL-ROUTE-DISCOVERY', line)):
t = int(line.split()[1]) / (10**6)
all_route_discovery[key]['samples'].append(t)
break
# now, for every k, i_min, i_max
# all_route_discovery contains an array with all samples of the measured value
print('k i_min mean ci')
for simulation in all_route_discovery:
all_route_discovery[simulation]['mean'] = np.mean(all_route_discovery[simulation]['samples'])
all_route_discovery[simulation]['ci'] = compute_confidence_interval(all_route_discovery[simulation]['samples'])
print(
#simulation,
all_route_discovery[simulation]['k'],
all_route_discovery[simulation]['i_min'],
all_route_discovery[simulation]['mean'],
all_route_discovery[simulation]['ci']
)
exit(0)
'''
d = []
f = []
# compute fd in our interval of interest
d = np.arange(0, (M * 2**0.5 / 2))
for i in d:
f.append(fd(i))
# compute integral of fd
integral = []
last = 0
for i in range(0, len(f)):
part = f[i]
last = last + part
integral.append(last)
print("normalization fd: ", np.trapz(f))
# make plots
fig, ax1 = plt.subplots()
color = 'tab:red'
ax1.set_xlabel('d [m]')
ax1.set_ylabel('fD(d)')
ax1.plot(d, f, 'c,', label='fD')
ax2 = ax1.twinx()
color = 'tab:blue'
ax2.set_ylabel('FD(d)')
ax2.plot(d, integral, 'b,', label="FD")
plt.legend()
plt.show()
def fs(s):
if s >= 0 and s <= (T * M**2 ) / 4:
return np.pi / ( T * M**2 )
elif s >= (T * M**2 ) / 4 and s <= (T * M**2) / 2:
return (np.pi / (T * M**2)) - (4 / (T * M**2)) * np.arccos(M/2 * ((T / s)**0.5))
else:
return 0
### Distribution of Service Time
s = T * d**2
f = []
for i in s:
f.append(fs(i))
print("normalization fs: ", np.trapz(f, s))
# compute integral of fs
integral = [ 0 ]
last = 0
for i in range(1, len(f)):
part = f[i] * (s[i] - s[i - 1])
last = last + part
integral.append(last)
# make plots
fig, ax1 = plt.subplots()
color = 'tab:red'
ax1.set_xlabel('s [s]')
ax1.set_ylabel('fS(s)')
ax1.plot(s, f, 'c,', label='fS')
ax2 = ax1.twinx()
color = 'tab:blue'
ax2.set_ylabel('FD(d)')
ax2.plot(s, integral, 'b,', label='FS')
plt.legend()
plt.show()
'''