summaryrefslogtreecommitdiff
path: root/simulations/results/paper.sh
blob: f2c12af2464005926ddcd0b81f0345396b858cd9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
#!/usr/bin/env bash

set -e

wai=$(dirname $(readlink -f "$0"))
scenarios="${wai}/../scenarios"
inputs="${wai}/../inputs.json"
simulator="make -C ${wai}/../ run"
sched="${wai}/analysis/scheduler/analysis.sh"
parser="${wai}/../parser.awk"
results="${wai}/results.csv"
aheaders="simkey,wireless,wakeupfor,energy_constraint,coverage_constraint,model"
avalues="none,none,none,none,none,none"
log_file="${wai}/logs/$(date +%s).org" && mkdir -p "${wai}/logs/"
gen_log=0 # Should we generate logs ?

run-simulation () {
    # Generate inputs
    $scenarios $seed $simtime $wakeupevery $wakeupfor $n_nodes $extended $hint $poff $pon $prx $ptx $datasize $bitrate $hintsize $latency > "$inputs"

    # Init logs
    [ $gen_log -eq 1 ] && echo -e "* seed=$seed simtime=$simtime wakeupevery=$wakeupevery wakeupfor=$wakeupfor n_nodes=$n_nodes extended=$extended hint=$hint poff=$poff pon=$pon prx=$prx ptx=$ptx datasize=$datasize bitrate=$bitrate \n" >> "${log_file}"

    # Run simulations
    tmp=$(mktemp)
    $simulator &> $tmp
    [ $gen_log -eq 1 ] && cp $tmp "${log_file}"

    # Gen csv
    if [ ! -e "$results" ]
    then
        cat $tmp | $parser | sed "1 s/$/,${aheaders}/g" | sed "2,\$s/$/,${avalues}/" > "$results"
    else
        cat $tmp | $parser | sed 1d | sed "s/$/,${avalues}/" >> "$results"
    fi

    # Clear tmp
    rm $tmp
}

# Default Parameters
seed=0
simtime=86400 # One day
wakeupevery=3600
wakeupfor=60
n_nodes=13
extended="false"
hint="false"
poff=0
pon=0.4
prx=0.16
ptx=0.16
datasize=1000000 # 1Mb
hintsize=8 # Integer
latency=0 # in Seconds
bitrate="100kbps"


for input_suffix in "NoHintIsFALSE" "NoHintIsTRUE"
do
    results="${wai}/results_${input_suffix}.csv"

    # Clean previous runs
    [ -e "${results}" ] && rm "${results}"

    # Inputs
    parameters=$(cat ../../inputs_${input_suffix}.csv |tail -n +2)
    nseed=200

    while read -r parameter
    do
        wireless=$(echo "$parameter" |tail -n1|cut -d ',' -f1)
        wakeupfor=$(echo "$parameter" |tail -n1|cut -d ',' -f2)
        econstraint=$(echo "$parameter" |tail -n1|cut -d ',' -f3)
        cconstraint=$(echo "$parameter" |tail -n1|cut -d ',' -f4)
        simkey=$(echo "$parameter" |tail -n1|cut -d ',' -f5)
        model=$(echo "$parameter" |tail -n1|cut -d ',' -f6)
        if [ "$wireless" == "lora" ]
        then
            # Lora
            bitrate="50kbps"
            pon=0.4
            prx=0.16
            ptx=0.16
            latency=0
        else
            # NbIot
            bitrate="200kbps"
            pon=0.4
            prx=0.65
            ptx=0.65
            latency=0
        fi

        # Configure simulation parameters
        extended="false"
        hint="false"
        if [ $simkey == "extended" ] || [ $simkey == "hintandextended" ]
        then
            extended="true"
        fi
        if [ $simkey == "extended" ] || [ $simkey == "hintandextended" ]
        then
            hint="true"
        fi

        # Run experiment
        echo "---------- wireless=${wireless} wakeupfor=${wakeupfor} simkey=${simkey} ----------"
        avalues="$simkey,$wireless,$wakeupfor,$econstraint,$cconstraint,$model"
        for seed in $(seq 1 $nseed)
        do
            printf "\rSeed run ${seed}/${nseed}"
            run-simulation
        done
        echo
    done < <(printf '%s\n' "$parameters")
done