diff --git a/eo/contrib/irace/run_elite.sh b/eo/contrib/irace/run_elite.sh new file mode 100755 index 000000000..61a074640 --- /dev/null +++ b/eo/contrib/irace/run_elite.sh @@ -0,0 +1,67 @@ +#!/bin/bash + +# Number of runs (=seeds). +runs=50 + +# You most probably want to run on release builds. +exe="./release/fastga" + +outdir="$(date --iso-8601=minutes)_results_elites" +mkdir ${outdir} + +# FIXME +algos=( +"--crossover-rate=1 --cross-selector=2 --crossover=1 --mutation-rate=2 --mut-selector=2 --mutation=8 --replacement=8" +"--crossover-rate=4 --cross-selector=5 --crossover=2 --mutation-rate=3 --mut-selector=4 --mutation=9 --replacement=9" +"--crossover-rate=1 --cross-selector=3 --crossover=8 --mutation-rate=2 --mut-selector=6 --mutation=3 --replacement=2" +"--crossover-rate=2 --cross-selector=1 --crossover=1 --mutation-rate=2 --mut-selector=6 --mutation=9 --replacement=0" +"--crossover-rate=4 --cross-selector=2 --crossover=2 --mutation-rate=4 --mut-selector=3 --mutation=7 --replacement=0" +"--crossover-rate=0 --cross-selector=3 --crossover=2 --mutation-rate=4 --mut-selector=2 --mutation=6 --replacement=0" +"--crossover-rate=3 --cross-selector=0 --crossover=3 --mutation-rate=4 --mut-selector=3 --mutation=10 --replacement=0" +"--crossover-rate=0 --cross-selector=1 --crossover=0 --mutation-rate=3 --mut-selector=2 --mutation=10 --replacement=0" +"--crossover-rate=2 --cross-selector=2 --crossover=2 --mutation-rate=4 --mut-selector=5 --mutation=10 --replacement=0" +"--crossover-rate=4 --cross-selector=2 --crossover=2 --mutation-rate=4 --mut-selector=5 --mutation=9 --replacement=0" +"--crossover-rate=3 --cross-selector=2 --crossover=10 --mutation-rate=4 --mut-selector=2 --mutation=10 --replacement=0" +"--crossover-rate=2 --cross-selector=2 --crossover=5 --mutation-rate=4 --mut-selector=3 --mutation=9 --replacement=0" +"--crossover-rate=3 --cross-selector=6 --crossover=2 --mutation-rate=4 --mut-selector=1 --mutation=10 --replacement=0" +"--crossover-rate=1 --cross-selector=5 --crossover=9 --mutation-rate=4 --mut-selector=2 --mutation=8 --replacement=0" +"--crossover-rate=2 --cross-selector=5 --crossover=2 --mutation-rate=4 --mut-selector=6 --mutation=8 --replacement=0" +"--crossover-rate=2 --cross-selector=2 --crossover=10 --mutation-rate=4 --mut-selector=6 --mutation=10 --replacement=0" +"--crossover-rate=3 --cross-selector=2 --crossover=2 --mutation-rate=4 --mut-selector=5 --mutation=10 --replacement=0" +"--crossover-rate=4 --cross-selector=2 --crossover=2 --mutation-rate=4 --mut-selector=1 --mutation=8 --replacement=0" +"--crossover-rate=4 --cross-selector=2 --crossover=2 --mutation-rate=4 --mut-selector=6 --mutation=9 --replacement=0" +) + +pb=0 # Loop counter. +for algo in "${algos[@]}" ; do + echo "Problem ${pb}" + echo -n "Runs: " + + for seed in $(seq ${runs}) ; do # Iterates over runs/seeds. + # This is the command to be ran. + cmd="${exe} --full-log=1 --problem=${pb} --seed=${seed} ${algo}" + # echo ${cmd} # Print the command. + + # Forge a directory/log file name + # (remove double dashs and replace spaces with underscore). + name_run="pb=${pb}_seed=${seed}_$(echo "${algo}" | sed 's/--//g' | sed 's/ /_/g')" + # echo $name_run + + # Progress print. + echo -n "${seed} " + + # Actually start the command. + ${cmd} > "${outdir}/${name_run}.dat" 2> "${outdir}/${name_run}.log" + + # Check for the most common problem in the log file. + cat "${outdir}/${name_run}.log" | grep "illogical performance" + done + + echo "" + perc=$(echo "scale=2;${pb}/${#algos[@]}*100" | bc) + echo -e "${perc}%\n" + pb=$((pb+1)) + +done + +echo "Done" diff --git a/eo/contrib/irace/run_irace_all.sh b/eo/contrib/irace/run_irace_all.sh new file mode 100755 index 000000000..eff27d2d6 --- /dev/null +++ b/eo/contrib/irace/run_irace_all.sh @@ -0,0 +1,14 @@ +#!/bin/bash + +date -Iseconds +echo "STARTS" + +for r in $(seq 15); do + echo "Run $r/15"; + date -Iseconds + ./run_irace_parallel-batch.sh + date -Iseconds +done + +echo "DONE" +date -Iseconds diff --git a/eo/contrib/irace/run_irace_parallel-batch.sh b/eo/contrib/irace/run_irace_parallel-batch.sh new file mode 100755 index 000000000..91b73d7c3 --- /dev/null +++ b/eo/contrib/irace/run_irace_parallel-batch.sh @@ -0,0 +1,38 @@ +#!/bin/bash + +outdir="$(date --iso-8601=ns)_results_irace" +mkdir ${outdir} +cd ${outdir} + +run(){ + p="$1" + + echo "Problem ${p}" + res="results_problem_${p}" + mkdir ${res} + cd ${res} + + # Fore some reason, irace absolutely need those files... + cp ../../irace-config/example.scen . + cp ../../irace-config/default.instances . + cp ../../release/fastga . + cat ../../irace-config/target-runner | sed "s/{{PROBLEM}}/${p}/" > ./target-runner + chmod u+x target-runner + + # Generate the parameter list file. + ./fastga -h > fastga.param 2>/dev/null + # /usr/lib/R/site-library/irace/bin/irace --scenario example.scen 2>&1 | tee irace.log + /usr/lib/R/site-library/irace/bin/irace --scenario example.scen &> irace.log + + cd .. + echo "Done problem ${p}" +} + +N=5 # Somehow 5 is the fastest on my 4-cores machine. +( +for pb in $(seq 0 18); do + ((i=i%N)); ((i++==0)) && wait + run "$pb" & +done +wait +)