#!/bin/bash ############################################################################### # This script is the command that is executed every run. # Check the examples in examples/ # # This script is run in the execution directory (execDir, --exec-dir). # # PARAMETERS: # $1 is the candidate configuration number # $2 is the instance ID # $3 is the seed # $4 is the instance name # The rest ($* after `shift 4') are parameters to the run # # RETURN VALUE: # This script should print one numerical value: the cost that must be minimized. # Exit with 0 if no error, with 1 in case of error ############################################################################### error() { echo "`TZ=UTC date`: $0: error: $@" exit 1 } EXE="/home/aaziz-alaoui/Documents/GitHub/paradiseo/eo/contrib/irace/irace-algo-search/bin/fastga" FIXED_PARAMS="" CONFIG_ID=$1 INSTANCE_ID=$2 SEED=$3 INSTANCE=$4 CROSSOVER_RATE=$5 CROSSOVER_SELECTOR=$6 CROSSOVER=$7 MUTATION_RATE=$8 MUT_SELECTOR=$9 MUTATION=${10} REPLACEMENT=${11} shift 11 || error "Not enough parameters" CONFIG_PARAMS=$* STDOUT=c${CONFIG_ID}-${INSTANCE_ID}-${SEED}.stdout STDERR=c${CONFIG_ID}-${INSTANCE_ID}-${SEED}.stderr if [ ! -x "${EXE}" ]; then error "${EXE}: not found or not executable (pwd: $(pwd))" fi # If the program just prints a number, we can use 'exec' to avoid # creating another process, but there can be no other commands after exec. #exec $EXE ${FIXED_PARAMS} -i $INSTANCE ${CONFIG_PARAMS} # exit 1 # # Otherwise, save the output to a file, and parse the result from it. # (If you wish to ignore segmentation faults you can use '{}' around # the command.) $EXE ${FIXED_PARAMS} --instance=$INSTANCE --seed=${SEED} --crossover-rate=${CROSSOVER_RATE} --cross-selector=${CROSSOVER_SELECTOR} --crossover=${CROSSOVER} --mutation-rate=${MUTATION_RATE} --mut-selector=${MUT_SELECTOR} --mutation=${MUTATION} --replacement=${REPLACEMENT} 1> ${STDOUT} 2> ${STDERR} #echo ${cmd} # --instance=$INSTANCE --seed=$SEED # remplacer config param par la même config que seed et instance id # This may be used to introduce a delay if there are filesystem # issues. #SLEEPTIME=1 #while [ ! -s "${STDOUT}" ]; do # sleep $SLEEPTIME # let "SLEEPTIME += 1" #done # This is an example of reading a number from the output. # It assumes that the objective value is the first number in # the first column of the last line of the output. if [ -s "${STDOUT}" ]; then COST=$(tail -n 1 ${STDOUT} | grep -e '^[[:space:]]*[+-]\?[0-9]' | cut -f1) echo "$COST" rm -f "${STDOUT}" "${STDERR}" exit 0 else error "${STDOUT}: No such file or directory" fi