lox-simulation/scripts/run-experiments.sh

76 lines
1.7 KiB
Bash
Executable File

#!/bin/bash
# Number to run in parallel
parallel="$1"
# Number of runs in each configuration
n="$2"
# First and last configuration of experiment 1
e1b="$3"
e1e="$4"
# First and last configuration of experiment 2
e2b="$5"
e2e="$6"
# Build docker container
docker build -t troll-patrol .
# Parameters should be:
# $1: experiment number (1 or 2)
# $2: censor secrecy (Overt or Flooding)
# $3: harshness (0-4)
# $4: probability of users submitting reports (0.0-1.0)
run_docker() {
# Get a UUID so each simulation run stores its output in a different file
uuid=$(cat /proc/sys/kernel/random/uuid)
./scripts/gen-configs.sh $1 $2 $3 $4
./scripts/run-container.sh $1 $uuid
# If harshness = 2, probability of users submitting reports=0.25,
# experiment number = 1, then copy the results to experiment 2
# directory.
if [[ "$3" == 2 && "$4" == 0.25 && "$1" == 1 ]]; then
mkdir -p results/2
cp results/1/${uuid}-* results/2/
fi
}
# Make list of all configurations to use
configs=()
# Experiment 1
for i in $(seq $e1b $e1e); do
line=$(sed -n "${i}p" configs/experiment-1)
for j in $(seq $n); do
configs+=( "1 $line" )
done
done
# Experiment 2
for i in $(seq $e2b $e2e); do
line=$(sed -n "${i}p" configs/experiment-2)
for j in $(seq $n); do
configs+=( "2 $line" )
done
done
# Go through configs in batches of $n
index=0
while [[ $index -lt ${#configs[@]} ]]; do
# Note: Elements contain multiple tokens. Don't put this in quotes.
run_docker ${configs[$index]} &
index=$((index + 1))
if [[ $(($index % parallel)) == 0 ]]; then
# Finish this batch before starting the next one
wait
fi
done
# Finish the final batch
wait