Meta-heurísticas são ferramentas poderosas para a solução de problemas de otimização, mas a eficiência desse tipo de algoritmo está diretamente ligada à correta afinação de seus parâmetros. O esforço computacional necessário para realizar esta tarefa, no entanto, tem levado pesquisadores a desenvolver ferramentas heurísticas de afinação, reduzindo consideravelmente o número de experimentos necessários para obter-se uma configuração eficiente. Dentre os diversos afinadores existentes, neste workshop detalharemos o Iterated F-Race (irace). Na primeira parte, serão utilizados exemplos práticos para explicar o funcionamento dessa ferramenta. Na segunda parte, os participantes que apresentarem casos de uso poderão testar o irace diretamente nos seus algoritmos.
O workshop seguirá o seguinte cronograma:
| 09:00 - 09:20 | Introdução à afinação automática de algoritmos |
| 09:20 - 09:45 | Exemplo #1 - Aprendendo a usar o irace |
| 09:45 - 10:25 | Exemplo #2 - Aplicando o irace ao seu problema |
| 10:25 - 10:35 | Encerramento |
Para instalar o irace, é necessário que você tenha o interpretador da linguagem R para computação estatística funcionando.
A instalação do irace é bastante simples. Basta iniciar o interpretador R em um terminal e solicitar a instalação do pacote, disponível através dos servidores CRAN:
$ R
> install.packages("irace")
Escolha um servidor próximo e a instalação deve continuar normalmente. Ao final do processo, teste a instalação com
> library(irace)
Caso haja algum problema com o download ou a instalação do irace, avise imediatamente.
Uma vez que o irace tenha sido instalado, o último passo é configurar as variáveis de ambiente UNIX para que o seu sistema possa encontrar o wrapper do irace.
O wrapper do irace ativa o interpretador R em modo linha de comando e executa o irace no diretório atual.
A primeira variável de ambiente a ser configurada é a variável IRACE_HOME, que deverá conter o diretório onde o irace foi instalado.
Para localizar a instalação do irace, use o comando system.file(package="irace") do R:
$ R
> system.file(package="irace")
> [1] "/diretorio/onde/esta/o/irace"
Uma vez localizada a instalação do R, adicione as linhas abaixo ao arquivo ~/.bash_profile para configurar a variável IRACE_HOME
e adicioná-la à variável PATH.
export IRACE_HOME=/diretorio/onde/esta/o/irace
export PATH=${IRACE_HOME}/bin/:$PATH
Agora é só carregar as alterações efetuadas, abrindo uma nova aba/janela do terminal ou usando o comando source:
$ source ~/.bash_profile
Para testar, execute o irace
$ irace
Para baixar o material necessário para executar este exercício, clique aqui.
Após descompactar o arquivo acotsp-example.tar.gz, acesse o diretório ACOTSP-1.04-tuning e compile o ACOTSP usando o comando make:
$ tar xzvf acotsp-example.tar.gz
$ cd acotsp-example
$ cd ACOTSP-1.04-tuning
$ make
Retorne ao diretório onde o arquivo acotsp-example.tar.gz foi descompactado e execute o irace.
$ cd ..
$ irace --parallel 4
A opção --parallel faz com que o irace utilize múltiplos processadores. Caso seu computador seja dual core, use --parallel 2.
Para baixar o material necessário para executar este exercício, clique aqui.
Após descompactar o arquivo nsga2-example.tar.gz, acesse o diretório nsga2-gnuplot-v1.1.6 e compile o NSGA-II usando o comando make:
$ tar xzvf nsga2-example.tar.gz
$ cd nsga2-example
$ cd nsga2-gnuplot-v1.1.6
$ make
Retorne ao diretório onde o arquivo nsga2-example.tar.gz foi descompactado. Agora será necessário compilar as ferramentas de avaliação multiobjetivo para o cálculo do hipervolume. Primeiro, compile a ferramenta nondominated, usada para normalizar e filtrar conjuntos de aproximação.
$ cd ..
$ cd mo-tools-1.0svn100-src
$ make nondominated march=x86-64
A opção march adequa a compilação à sua arquitetura. Se seu computador não for 64-bits, use march=native.
A segunda ferramenta que deve ser compilada é o hipervolume:
$ cd ..
$ cd hv-2.0rc1-src
$ make march=x86-64
A opção march adequa a compilação à sua arquitetura. Se seu computador não for 64-bits, use march=native.
Retorne ao diretório onde o arquivo nsga2-example.tar.gz foi descompactado e execute o irace.
$ cd ..
$ irace --parallel 4
A opção --parallel faz com que o irace utilize múltiplos processadores. Caso seu computador seja dual core, use --parallel 2.
Acompanhe a execução do irace analisando as configurações selecionadas a cada iteração. Ao término da execução, compare as melhores configurações selecionadas e tente entender sua lógica.
Agora que você já testou o irace usando o hipervolume com normalização, o próximo passo é testá-lo sem normalização. Abra o arquivo tune-conf no diretório onde você descompactou o arquivo nsga2-example.tar.gz e edite as duas linhas abaixo:
#hookRun <- "./hook-run2" # descomente esta linha
hookEvaluate <- "./hook-evaluate" # comente esta linha
Execute o irace novamente e compare os resultados.