#!/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) # Fetch random target generated by the models (DT and KNN) and the predicted policy (called simkey here) 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) # Predicted policy to use to meet econstraint and cconstraint 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