123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201 |
- #!/bin/bash
- # cd into the directory containing this script (from the bash faq 028)
- if [[ $BASH_SOURCE = */* ]]; then
- cd -- "${BASH_SOURCE%/*}/" || exit 1
- fi
- # Check for the python dependencies we need at the end
- ./scripts/check-dependencies.py
- if [ $? != 0 ]; then
- echo "Please make sure all dependencies are installed before running this script."
- exit 1
- fi
- # Number of simulation runs to do in parallel
- parallel=""
- # Number of simulation runs in each configuration
- n=""
- # Number of configurations in experiment 1
- exp1=""
- # Experiment 1 beginning
- e1b=1
- # Experiment 1 end
- e1e=33
- # Number of configurations in experiment 2
- exp2=""
- # Experiment 2 beginning
- e2b=1
- # Experiment 2 end
- e2e=8
- # Max observed memory use for 1 trial
- mem_use=688
- # Proceed without confirmation
- noninteractive=false
- # By default, run experiments and process results
- run_experiments=true
- process_results=true
- # Get parameters
- while getopts ":p:n:1:2:yer" opt; do
- case ${opt} in
- p)
- parallel="${OPTARG}"
- ;;
- n)
- n="${OPTARG}"
- ;;
- 1)
- exp1="${OPTARG}"
- if [ "$exp1" != "" ]; then
- # If the user specified a range, use that range
- if [[ "$exp1" == *"-"* ]]; then
- e1b="${exp1%%-*}"
- e1e="${exp1##*-}"
- exp1=$((e1e - e1b + 1))
- else
- e1b=1
- e1e="$exp1"
- fi
- fi
- ;;
- 2)
- exp2="${OPTARG}"
- if [ "$exp2" != "" ]; then
- # If the user specified a range, use that range
- if [[ "$exp2" == *"-"* ]]; then
- e2b="${exp2%%-*}"
- e2e="${exp2##*-}"
- exp2=$((e2e - e2b + 1))
- else
- e2b=1
- e2e="$exp2"
- fi
- fi
- ;;
- y)
- noninteractive=true
- ;;
- e)
- run_experiments=true
- process_results=false
- ;;
- r)
- run_experiments=false
- process_results=true
- ;;
- esac
- done
- # Run experiments unless -r flag was used
- if [ "$run_experiments" == true ]; then
- # Ask user for values they didn't already specify
- if [ "$parallel" == "" ]; then
- read -e -p "How many simulation runs should we perform in parallel? (We suggest the number of CPU cores you have.) " parallel
- echo ""
- fi
- if [ "$n" == "" ]; then
- read -e -p "How many trials should we do in each configuration? [5] " n
- # Default to 5
- if [ "$n" == "" ]; then
- n=5
- fi
- echo ""
- fi
- if [ "$exp1" == "" ]; then
- read -e -p "How many configurations should we use in the first experiment? [33] " exp1
- # Default to 33 and max at 33
- if [[ "$exp1" == "" || "$exp1" -gt 33 ]]; then
- exp1=33
- # Min 0
- elif [[ "$exp1" -lt 0 ]]; then
- exp1=0
- fi
- echo ""
- # Begining and end
- e1b=1
- e1e="$exp1"
- fi
- if [ "$exp2" == "" ]; then
- read -e -p "How many configurations should we use in the second experiment? [8] " exp2
- # Default to 10 and max at 10
- if [[ "$exp2" == "" || "$exp2" -gt 8 ]]; then
- exp2=8
- # Min 0
- elif [[ "$exp2" -lt 0 ]]; then
- exp2=0
- fi
- echo ""
- # Beginning and end
- e2b=1
- e2e="$exp2"
- fi
- num_configs=$((exp1 + exp2))
- num_trials=$((num_configs * n))
- batches=$(( (num_trials + parallel - 1) / parallel))
- if [[ "$parallel" -gt "$num_trials" ]]; then
- parallel=$num_trials
- fi
- echo "We will test Troll Patrol in ${num_configs} configurations."
- echo "We will run the simulation ${n} times in each configuration."
- echo "This results in a total of ${num_trials} simulation runs."
- echo "We will do ${parallel} runs in parallel, so this is ${batches} batches."
- echo "It is recommended that you have at least ${parallel} CPU cores and $((parallel * mem_use)) MB of RAM."
- echo "If you don't have enough cores or RAM, try reducing the number of parallel simulation runs."
- echo "It is anticipated that this will take from $((batches + batches / 2)) to $((batches * 2)) days to complete."
- if [ "$noninteractive" == false ]; then
- read -e -p "Is this okay? (y/N) " res
- if [[ "$res" != "Y" && "$res" != "y" ]]; then
- exit 1
- fi
- fi
- ./scripts/run-experiments.sh "$parallel" "$n" "$e1b" "$e1e" "$e2b" "$e2e"
- fi
- # Process results unless -e flag was used
- if [ "$process_results" == true ]; then
- # Parse out bridge info we want to plot
- for i in results/*/*-simulation; do
- sed -n '/^Full stats per bridge:$/,/^End full stats per bridge$/{//!p;}' \
- "$i" > "${i%-simulation}-bridges.csv"
- sim_begin=$(grep -Po '(?<=Simulation began on day )(.*)(?=$)' "$i")
- censor_begin=$(grep -Po '(?<=Censor began on day )(.*)(?=$)' "$i")
- echo "$sim_begin,$censor_begin" > "${i%-simulation}-start.csv"
- done
- if [ "$n" == "" ]; then
- read -e -p "How many trials did we do in each configuration? [5] " n
- # Default to 5
- if [ "$n" == "" ]; then
- n=5
- fi
- echo ""
- fi
- ./scripts/plot-results.py 1 $n results/1/*-bridges.csv
- ./scripts/plot-results.py 2 $n results/2/*-bridges.csv
- fi
- echo "Done. See the results directory for the output."
|