aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore1
-rw-r--r--inputs.json1
-rwxr-xr-xresults/paper.sh75
-rw-r--r--results/results.csv41
-rw-r--r--src/Inputs.cc8
-rw-r--r--src/Inputs.hpp2
-rw-r--r--src/scenarios.cc74
-rw-r--r--src/simulator.cc2
8 files changed, 171 insertions, 33 deletions
diff --git a/.gitignore b/.gitignore
index c96c007..952519a 100644
--- a/.gitignore
+++ b/.gitignore
@@ -4,3 +4,4 @@ libs/rapidjson
compile_commands.json
platform.xml
scenarios
+inputs.json
diff --git a/inputs.json b/inputs.json
deleted file mode 100644
index 757cea0..0000000
--- a/inputs.json
+++ /dev/null
@@ -1 +0,0 @@
-{"extended":false,"nodes":{"on0":{"use_hint":false,"power_off":0,"power_on":10,"power_rx":11,"power_tx":12,"is_sender":true,"data_size":50,"wake_ts":[8.0,18.0,28.0,38.0,48.0],"wake_duration":[5.0,5.0,5.0,5.0,5.0]},"on1":{"use_hint":false,"power_off":0,"power_on":10,"power_rx":11,"power_tx":12,"is_sender":false,"data_size":50,"wake_ts":[5.0,15.0,25.0,35.0,45.0],"wake_duration":[5.0,5.0,5.0,5.0,5.0]},"on2":{"use_hint":false,"power_off":0,"power_on":10,"power_rx":11,"power_tx":12,"is_sender":false,"data_size":50,"wake_ts":[0.0,10.0,20.0,30.0,40.0,50.0],"wake_duration":[5.0,5.0,5.0,5.0,5.0,5.0]},"on3":{"use_hint":false,"power_off":0,"power_on":10,"power_rx":11,"power_tx":12,"is_sender":false,"data_size":50,"wake_ts":[1.0,11.0,21.0,31.0,41.0,51.0],"wake_duration":[5.0,5.0,5.0,5.0,5.0,5.0]},"on4":{"use_hint":false,"power_off":0,"power_on":10,"power_rx":11,"power_tx":12,"is_sender":false,"data_size":50,"wake_ts":[2.0,12.0,22.0,32.0,42.0,52.0],"wake_duration":[5.0,5.0,5.0,5.0,5.0,5.0]},"on5":{"use_hint":false,"power_off":0,"power_on":10,"power_rx":11,"power_tx":12,"is_sender":false,"data_size":50,"wake_ts":[4.0,14.0,24.0,34.0,44.0,54.0],"wake_duration":[5.0,5.0,5.0,5.0,5.0,5.0]},"on6":{"use_hint":false,"power_off":0,"power_on":10,"power_rx":11,"power_tx":12,"is_sender":false,"data_size":50,"wake_ts":[0.0,10.0,20.0,30.0,40.0,50.0],"wake_duration":[5.0,5.0,5.0,5.0,5.0,5.0]},"on7":{"use_hint":false,"power_off":0,"power_on":10,"power_rx":11,"power_tx":12,"is_sender":false,"data_size":50,"wake_ts":[0.0,10.0,20.0,30.0,40.0,50.0],"wake_duration":[5.0,5.0,5.0,5.0,5.0,5.0]},"on8":{"use_hint":false,"power_off":0,"power_on":10,"power_rx":11,"power_tx":12,"is_sender":false,"data_size":50,"wake_ts":[3.0,13.0,23.0,33.0,43.0,53.0],"wake_duration":[5.0,5.0,5.0,5.0,5.0,5.0]},"on9":{"use_hint":false,"power_off":0,"power_on":10,"power_rx":11,"power_tx":12,"is_sender":false,"data_size":50,"wake_ts":[4.0,14.0,24.0,34.0,44.0,54.0],"wake_duration":[5.0,5.0,5.0,5.0,5.0,5.0]}}} \ No newline at end of file
diff --git a/results/paper.sh b/results/paper.sh
new file mode 100755
index 0000000..e039283
--- /dev/null
+++ b/results/paper.sh
@@ -0,0 +1,75 @@
+#!/usr/bin/env bash
+
+set -e
+
+wai=$(dirname $(readlink -f "$0"))
+scenarios="${wai}/../scenarios"
+inputs="${wai}/../inputs.json"
+simulator="make -C ${wai}/../ run"
+parser="${wai}/../parser.awk"
+results="${wai}/results.csv"
+nseed=10
+
+run-simulation () {
+ # Generate inputs
+ $scenarios $seed $simtime $maxstartupdelay $wakeupevery $wakeupfor $n_nodes $extended $hint $poff $pon $prx $ptx $datasize $simkey > "$inputs"
+ # Run simulations
+ [ -e "$results" ] && { $simulator 2>&1 | $parser | sed 1d >> "$results"; } || { $simulator 2>&1 | $parser > "$results"; }
+}
+
+# Default Parameters
+seed=0
+simtime=100
+maxstartupdelay=1
+wakeupevery=10
+wakeupfor=10
+n_nodes=1
+extended="false"
+hint="false"
+poff=0
+pon=1
+prx=1
+ptx=5
+datasize=1
+simkey=0
+
+# Baseline
+echo "Baseline..."
+[ -e "${results}" ] && rm "${results}"
+simkey="baseline"
+for seed in $(seq 1 $nseed)
+do
+ run-simulation
+done
+
+# Hint
+echo "Hint..."
+hint="true"
+simkey="hint"
+for seed in $(seq 1 $nseed)
+do
+ run-simulation
+done
+hint="false"
+
+# Extended
+echo "Extended..."
+extended="true"
+simkey="extended"
+for seed in $(seq 1 $nseed)
+do
+ run-simulation
+done
+extended="false"
+
+# Hint+Extended
+echo "Hint + Extended..."
+extended="true"
+hint="true"
+simkey="hintandextended"
+for seed in $(seq 1 $nseed)
+do
+ run-simulation
+done
+extended="false"
+hint="false"
diff --git a/results/results.csv b/results/results.csv
new file mode 100644
index 0000000..03eed33
--- /dev/null
+++ b/results/results.csv
@@ -0,0 +1,41 @@
+node,nWakeUp,nDataRcv,nSendFail,nRcvFail,simkey,seed,energy
+on0,1,0,1,0,baseline,1,450.000000
+on0,1,0,1,0,baseline,2,450.000000
+on0,1,0,1,0,baseline,3,450.000000
+on0,1,0,1,0,baseline,4,450.000000
+on0,1,0,1,0,baseline,5,450.000000
+on0,1,0,1,0,baseline,6,450.000000
+on0,1,0,1,0,baseline,7,450.000000
+on0,1,0,1,0,baseline,8,450.000000
+on0,1,0,1,0,baseline,9,450.000000
+on0,1,0,1,0,baseline,10,450.000000
+on0,1,0,1,0,hint,1,450.000000
+on0,1,0,1,0,hint,2,450.000000
+on0,1,0,1,0,hint,3,450.000000
+on0,1,0,1,0,hint,4,450.000000
+on0,1,0,1,0,hint,5,450.000000
+on0,1,0,1,0,hint,6,450.000000
+on0,1,0,1,0,hint,7,450.000000
+on0,1,0,1,0,hint,8,450.000000
+on0,1,0,1,0,hint,9,450.000000
+on0,1,0,1,0,hint,10,450.000000
+on0,1,0,1,0,extended,1,90.000000
+on0,1,0,1,0,extended,2,90.000000
+on0,1,0,1,0,extended,3,90.000000
+on0,1,0,1,0,extended,4,90.000000
+on0,1,0,1,0,extended,5,90.000000
+on0,1,0,1,0,extended,6,90.000000
+on0,1,0,1,0,extended,7,90.000000
+on0,1,0,1,0,extended,8,90.000000
+on0,1,0,1,0,extended,9,90.000000
+on0,1,0,1,0,extended,10,90.000000
+on0,1,0,1,0,hintandextended,1,90.000000
+on0,1,0,1,0,hintandextended,2,90.000000
+on0,1,0,1,0,hintandextended,3,90.000000
+on0,1,0,1,0,hintandextended,4,90.000000
+on0,1,0,1,0,hintandextended,5,90.000000
+on0,1,0,1,0,hintandextended,6,90.000000
+on0,1,0,1,0,hintandextended,7,90.000000
+on0,1,0,1,0,hintandextended,8,90.000000
+on0,1,0,1,0,hintandextended,9,90.000000
+on0,1,0,1,0,hintandextended,10,90.000000
diff --git a/src/Inputs.cc b/src/Inputs.cc
index 70f3d51..4eeff77 100644
--- a/src/Inputs.cc
+++ b/src/Inputs.cc
@@ -17,7 +17,9 @@ Inputs::Inputs(std::string node_name){
use_hint=d["nodes"][node_name.c_str()]["use_hint"].GetBool();
data_size=d["nodes"][node_name.c_str()]["data_size"].GetInt();
extended=d["extended"].GetBool();
-
+ simkey=d["simkey"].GetString();
+ seed=d["seed"].GetInt();
+
// Instantiate wake_ts
for(auto& v:d["nodes"][node_name.c_str()]["wake_ts"].GetArray()){
wake_ts.push_back(v.GetDouble());
@@ -29,6 +31,10 @@ Inputs::Inputs(std::string node_name){
}
// Identity check
+ if(wake_ts.size()<1){
+ std::cerr << "Invalid node configuration: wake_ts.size() == 0" <<std::endl;
+ exit(1);
+ }
if(wake_ts.size()!=wake_duration.size()){
std::cerr << "Invalid node configuration: wake_ts.size() != wake_duration.size()" <<std::endl;
exit(1);
diff --git a/src/Inputs.hpp b/src/Inputs.hpp
index e709d89..b0b4825 100644
--- a/src/Inputs.hpp
+++ b/src/Inputs.hpp
@@ -77,5 +77,7 @@ public:
bool use_hint;
bool extended;
int data_size;
+ int seed;
+ std::string simkey;
}; \ No newline at end of file
diff --git a/src/scenarios.cc b/src/scenarios.cc
index 7f6185f..c2d1f5f 100644
--- a/src/scenarios.cc
+++ b/src/scenarios.cc
@@ -1,6 +1,8 @@
+#include <cstdlib>
+#include <cstring>
#include <rapidjson/document.h>
#include <rapidjson/filewritestream.h>
-#include <rapidjson/writer.h>
+#include <rapidjson/prettywriter.h>
#include <cstdio>
#include <iostream>
@@ -8,56 +10,68 @@
#include <sstream>
-#define RAND(min,max) (rand()%(max-min)+min)
+#define RAND(min,max) (rand()%(max-min+1)+min)
using namespace std;
using namespace rapidjson;
-#define N_NODE 10
-#define EXTENDED false
-#define SIMULATION_DURATION 60
-#define POWER_OFF 0
-#define POWER_ON 10
-#define POWER_RX 11
-#define POWER_TX 12
-#define DATA_SIZE 50
-#define USE_HINT false
-#define WAKE_UP_EVERY 10
-#define WAKE_UP_FOR 5
-#define MAX_STARTUP_DELAY 10
-
-unsigned int seed = 0;
-
int main(int argc, char **argv){
// Setup seed
- if(argc>1){
- srand( atoi(argv[1]) );
+ if(argc!=15){
+ cerr << "Usage: " << argv[0] <<
+ " <seed> <simtime> <maxstartupdelay> <wakeupevery> <wakeupfor> <n_nodes>" <<
+ " <extended> <hint> <poff> <pon> <prx> <ptx> <datasize> <simkey>" <<
+ endl;
+ exit(1);
}
+ // Init parameters
+ int seed=atoi(argv[1]);
+ double simtime=stod(argv[2]);
+ unsigned int maxstartupdelay=atoi(argv[3]);
+ double wakeupevery=stod(argv[4]);
+ double wakeupfor=stod(argv[5]);
+ unsigned int n_nodes=atoi(argv[6]);
+ bool extended=!strcmp("true",argv[7]);
+ bool hint=!strcmp("true",argv[8]);
+ double poff=stod(argv[9]);
+ double pon=stod(argv[10]);
+ double prx=stod(argv[11]);
+ double ptx=stod(argv[12]);
+ unsigned int datasize=atoi(argv[13]);
+ string simkey(argv[14]);
+
+ // Setup seed
+ srand(seed);
+
// Create document
Document d;
d.SetObject();
- d.AddMember("extended",EXTENDED,d.GetAllocator());
+ Value simkeyValue;
+ simkeyValue.SetString(simkey.c_str(),simkey.size(),d.GetAllocator());
+ d.AddMember("simkey",simkeyValue,d.GetAllocator());
+ d.AddMember("seed",Value().SetInt(seed),d.GetAllocator());
+ d.AddMember("extended",extended,d.GetAllocator());
// Create nodes
Value nodes(kObjectType);
- for(int i=0;i<N_NODE;i++){
+ for(int i=0;i<n_nodes;i++){
Value node(kObjectType);
node.SetObject();
- node.AddMember("use_hint",USE_HINT,d.GetAllocator());
- node.AddMember("power_off",POWER_OFF,d.GetAllocator());
- node.AddMember("power_on",POWER_ON,d.GetAllocator());
- node.AddMember("power_rx",POWER_RX,d.GetAllocator());
- node.AddMember("power_tx",POWER_TX,d.GetAllocator());
+ node.AddMember("use_hint",hint,d.GetAllocator());
+ node.AddMember("power_off",poff,d.GetAllocator());
+ node.AddMember("power_on",pon,d.GetAllocator());
+ node.AddMember("power_rx",prx,d.GetAllocator());
+ node.AddMember("power_tx",ptx,d.GetAllocator());
node.AddMember("is_sender",i==0,d.GetAllocator());
- node.AddMember("data_size",DATA_SIZE,d.GetAllocator());
+ node.AddMember("data_size",datasize,d.GetAllocator());
// Setup ts and durations
Value ts(kArrayType);
Value duration(kArrayType);
- for(unsigned int i=(RAND(0,MAX_STARTUP_DELAY));(i+WAKE_UP_FOR)<SIMULATION_DURATION;i+=WAKE_UP_EVERY){
+ for(unsigned int i=maxstartupdelay;(i+wakeupfor)<simtime;i+=wakeupevery){
ts.PushBack(Value().SetDouble(i),d.GetAllocator());
- duration.PushBack(Value().SetDouble(WAKE_UP_FOR),d.GetAllocator());
+ duration.PushBack(Value().SetDouble(wakeupfor),d.GetAllocator());
}
node.AddMember("wake_ts",ts,d.GetAllocator());
node.AddMember("wake_duration",duration,d.GetAllocator());
@@ -74,7 +88,7 @@ int main(int argc, char **argv){
// Write to stdout
StringBuffer buffer;
- Writer<StringBuffer> writer(buffer);
+ PrettyWriter<StringBuffer> writer(buffer);
d.Accept(writer);
cout << buffer.GetString();
diff --git a/src/simulator.cc b/src/simulator.cc
index 13bc711..b34a95b 100644
--- a/src/simulator.cc
+++ b/src/simulator.cc
@@ -174,5 +174,5 @@ static void obs_node(std::vector<std::string> args) {
}
// Done
MODE_OFF()
- XBT_INFO("Observation node %s finished [LOG2PARSE](node:%s|nWakeUp:%d|nDataRcv:%d|nSendFail:%d|nRcvFail:%d)",selfName.c_str(),selfName.c_str(),nWakeUp,nDataRcv,nSendFail,nRcvFail);
+ XBT_INFO("Observation node %s finished [LOG2PARSE](node:%s|nWakeUp:%d|nDataRcv:%d|nSendFail:%d|nRcvFail:%d|simkey:%s|seed:%d)",selfName.c_str(),selfName.c_str(),nWakeUp,nDataRcv,nSendFail,nRcvFail,i.simkey.c_str(),i.seed);
} \ No newline at end of file