#!/bin/bash # SETUP TIME_LIMIT=300 # In seconds, per query NUM_PROBLEMS=1350 # First n problems from models path (e.g. MCC2022/) STRATEGIES=( "RDFS --seed-offset 5760351" "BestFS" "DFS" "BFS" ) # DO NOT CHANGE THIS BELOW THIS POINT PIPELINE_PATH=$(dirname "$0") main() { if [ $# -eq 0 ]; then help; exit 1 fi case "$1" in -h|--help) help exit ;; *) BINARY="$1" MODELS_PATH="$2" OUTPUT_PATH="$3" ;; esac if [[ ! -d "$MODELS_PATH" ]]; then echo "error: invalid models path" exit 1 fi OUTPUT_PATH="$OUTPUT_PATH/$(date -u +"%d-%m-%YT%H.%M.%S")" mkdir -p "$OUTPUT_PATH/pipeline" cp $PIPELINE_PATH/{start,run-model} "$OUTPUT_PATH/pipeline" details > "$OUTPUT_PATH/pipeline/details" start_jobs } start_jobs() { STRAT_LEN=${#STRATEGIES[@]} serialize_array STRATEGIES STRAT_STR "|" TOTAL_TIME_LIMIT=$(echo "($TIME_LIMIT * $STRAT_LEN * 16) / 60 + 1" | bc) for MODEL in $(ls "$MODELS_PATH" | head -n "$NUM_PROBLEMS"); do sbatch --time "$TOTAL_TIME_LIMIT" "$PIPELINE_PATH/run-model" "$BINARY" "$TIME_LIMIT" "$STRAT_STR" "$MODELS_PATH/$MODEL" "$OUTPUT_PATH/$MODEL.csv" # timeout "${TOTAL_TIME_LIMIT}m" "$PIPELINE_PATH/run-model" "$BINARY" "$TIME_LIMIT" "$STRAT_STR" "$MODELS_PATH/$MODEL" "$OUTPUT_PATH/$MODEL.csv" done } details() { echo -e "BINARY:\t\t$BINARY" echo -e "MODELS_PATH:\t$MODELS_PATH" echo -e "OUTPUT_PATH:\t$OUTPUT_PATH" echo -e "TIME_LIMIT:\t$TIME_LIMIT" echo -e "NUM_PROBLEMS:\t$NUM_PROBLEMS" echo echo "STRATEGIES:" printf ' %s\n' "${STRATEGIES[@]}" echo date } serialize_array() { declare -n _array="${1}" _str="${2}" # _array, _str => local reference vars local IFS="${3:-$'\x01'}" # shellcheck disable=SC2034 # Reference vars assumed used by caller _str="${_array[*]}" # * => join on IFS } help() { cat << EOF Usage: $0 BINARY MODELS-PATH OUTPUT-PATH Run TAPAAL heuristic search experiment. Number of models to run, time limit and search strategies can be configured in the top of this script. EOF } main "$@"