Sessões Práticas Lino Costa Departamento de Produção e Sistemas, Escola de Engenharia Universidade do Minho, Braga, PORTUGAL [email protected] 6a Escola Luso-Brasileira de Computação Evolutiva Guimarães, Portugal 12 - 14 setembro, 2016 Sessão 1 Plataformas para otimização com algoritmos evolutivos • jMetal - http://jmetal.sourceforge.net/index.html [1] • MOEA Framework - http://www.moeaframework.org [2] • HeuristicLab - http://dev.heuristiclab.com [3] • PISA - http://www.tik.ee.ethz.ch/pisa/ [4] • ParadisEO - http://paradiseo.gforge.inria.fr [5] [1] J.J. Durillo, A.J. Nebro jMetal: a Java Framework for Multi-Objective Optimization. Advances in Engineering Software 42, 760-771, 2011. [2] D. Hadka: MOEA Framework - A Free and Open Source Java Framework for Multiobjective Optimization. Version 2.11, 2005. [3] S. Wagner, M. Affenzeller. HeuristicLab: A Generic and Extensible Optimization Environment. Adaptive and Natural Computing Algorithms, Springer, 538?541. 2005. [4] S. Bleuler, M. Laumanns, L. Thiele, E. Zitzler: PISA - A Platform and Programming Language Independent Interface for Search Algorithms. EMO 2003, Springer, 494 - 508, 2003. [5] M. Lukasiewycz, M. Glass, F. Reimann, J. Teich: Opt4J - A Modular Framework for Meta-heuristic Optimization. GECCO 2011, 1723–1730, 2011. Sessão 1 jMetal - Metaheuristic Algorithms in Java Plataforma em linguagem Java (http://www.java.com) para o desenvolvimento, experimentação e estudo de algoritmos evolutivos para a resolução de problemas multiobjetivo. • simplicidade e facilidade de utilização • flexibilidade • portabilidade • extensibilidade Licença jMetal é licenciado de acordo com Creative Commons GNU Lesser General Public License. Sessão 1 Algoritmos jMetal implementa várias metaheurı́sticas para otimização: • uniobjetivo • algoritmos genéticos • estratégias evolutivas • evolução diferencial . . . • multiobjetivo • • • • • • • NSGA-II SPEA2 PAES OMOPSO MOEA/D GDE3 IBEA . . . Sessão 1 Problemas jMetal inclui diversos conjuntos de problemas teste: • problemas sem restriçoes • • • • • • Zitzler-Deb-Thiele (ZDT) Deb-Thiele-Laumanns-Zitzler (DTLZ) Walking-Fish-Group (WFG) CEC2009 (unconstrained problems) Li-Zhang benchmark Kursawe, Fonseca, Schaffer . . . • problemas com restriçoes • • • • • • Srinivas Tanaka Osyczka2 Constr Ex Golinski Water . . . Sessão 1 Avaliação de desempenho dos algoritmos jMetal inclui diversos indicadores de desempenho: • hipervolume • espaçamento • distância geracional • distância geracional invertida • epsilon . . . Representação das variáveis jMetal suporta representação: • binária • real • inteira • permutação Sessão 1 Estudos experimentais jMetal suporta: • geração automática de tabelas LATEX(https://www.latex-project.org) com resultados da aplicação dos indicadores de desempenho • geração automática detabelas LATEXcom resultados da aplicação de testes estatı́sticos • geração de código R (http://www.r-project.org/) para gerar boxplots • interface gráfico com o utilizador (GUI) para resolução de problemas e realização de estudos experimentais • frentes de Pareto de referência para o conjunto de problemas teste multiobjetivo Sessão 1 Instalação • instalar Java SE Development Kit (http://www.oracle.com/technetwork/java/javase/downloads/index.html) • usar uma bash shell - no windows, poderá ser instalado o Cygwin (https://www.cygwin.com) • descompactar o aula_jmetal.zip • executar a bash shell • compilar os ficheiros fonte de Java: 1. compilar os problemas javac jmetal/problems/*.java javac jmetal/problems/ZDT/*.java javac jmetal/problems/DTLZ/*.java 2. compilar os algoritmos javac jmetal/metaheuristics/nsgaII/*.java javac jmetal/metaheuristics/paes/*.java javac jmetal/metaheuristics/spea2/*.java (pode ser executada a script ./build.sh para compilar todos os ficheiros) Sessão 1 Estrutura • base • variables - codificação das variáveis • operators - comparadores de soluções e operadores • comparator - comparadores de soluções • crossover - operadores de recombinação • localsearch - procura local • mutation - operadores de mutação • selection - operadores de seleção • problems - conjuntos de problemas teste • metaheuristics - algoritmos de otimização • util - utilidades (e.g., geradores de números aleatórios, . . .) • qualityIndicators - indicadores de desempenho para algoritmos multiobjetivo • gui - interface gráfico • experiments - rotinas de suporte à experimentação Sessão 1 Algoritmos uniobjetivo Os algoritmos uniobjetivo encontram-se na pasta jmetal/metaheuristics/singleObjective. Por exemplo, para executar algoritmos evolutivos de otimização uniobjetivo para resolver o seguinte problema: f (x1 · · · xn ) = 1 + n n 1 X 2 Y xi xi − cos( √ ) 4000 i=1 i i=1 A solução ótima é f (0, · · · , 0) = 0 s.a. − 600 ≤ xi ≤ 600 Sessão 1 Executar um algoritmo Os algoritmos uniobjetivo encontram-se na pasta jmetal/metaheuristics/singleObjective. Por exemplo, para executar algoritmos evolutivos de otimização uniobjetivo: • Algoritmo Genético java jmetal.metaheuristics.singleObjective.geneticAlgorithm.GA_main • Estratégia Evolutiva java jmetal.metaheuristics.singleObjective.evolutionStrategy.ES_main • Evolução Diferencial java jmetal.metaheuristics.singleObjective.differentialEvolution.DE_main A aproximação ao minimizante e mı́nimo são gravados nos ficheiros VAR e FUN. Alterar os parâmetros dos algoritmos Os parâmetros de um algoritmo evolutivo uniobjetivo podem ser alterados editando os ficheiros fonte na pasta jmetal/metaheuristics/singleObjective/. Por exemplo, para mudar o tamanho da população do algoritmo genético, deve-se editar o ficheiro GA_main.java e alterar algorithm.setInputParameter("populationSize",100); Após a edição, deve-se recompilar o ficheiro GA_main.java. Sessão 1 Definir um problema Os novos problemas devem criados na pasta jmetal/problems/. Por exemplo, para codificar o seguinte problema: f (x, y) = xy cos(x) sin(y) s.a. − 15 ≤ x, y ≤ 15 Sessão 1 public class Prob1 extends Problem { public Prob1(String solutionType) numberOfVariables_ = 2 ; numberOfObjectives_ = 1; numberOfConstraints_ = 0; problemName_ = "Prob1"; throws ClassNotFoundException { upperLimit_ = new double[numberOfVariables_]; lowerLimit_ = new double[numberOfVariables_]; for (int var = 0; var < numberOfVariables_; var++){ lowerLimit_[var] = -15; upperLimit_[var] = 15; } // for if (solutionType.compareTo("BinaryReal") == 0) solutionType_ = new BinaryRealSolutionType(this) ; else if (solutionType.compareTo("Real") == 0) solutionType_ = new RealSolutionType(this) ; else { System.out.println("Error: solution type " + solutionType + " invalid") ; System.exit(-1) ; } } // Prob1 Sessão 1 /* * Evaluates a solution * @param solution The solution to evaluate * @throws JMException */ public void evaluate(Solution solution) throws JMException { Variable[] decisionVariables = solution.getDecisionVariables(); double res = 0.0; res=decisionVariables[0].getValue()*decisionVariables[1].getValue()* Math.cos(decisionVariables[0].getValue())* Math.sin(decisionVariables[1].getValue()); solution.setObjective(0, res); } // evaluate } // Prob1 Sessão 2 Algoritmos Multiobjetivo Os algoritmos multiobjetivo encontram-se na pasta jmetal/methaheuristics. Por exemplo, pode-se invocar a execução do NSGA-II de uma das seguintes formas: • java jmetal.metaheuristics.nsgaII.NSGAII_main - se for invocado sem argumentos, o problema definido por omissão é executado. • java jmetal.metaheuristics.nsgaII.NSGAII_main probName - se se indicar o nome de um problema a resolver (e.g, Kursawe, ZDT4, DTLZ5, WFG1, . . .). • java jmetal.metaheuristics.nsgaII.NSGAII_main probName parFrontFile - se se indicar também um ficheiro contendo a frente de Pareto de referência para o problema, serão calculados os indicadores de desempenho. A aproximação ao conjunto ótimo de Pareto e a frente de Pareto são gravadas nos ficheiros VAR e FUN, respetivamente. Sessão 2 Interface gráfico É possı́vel utilizar o interface gráfico de duas formas: • java jmetal.gui.SimpleExecutionSupportGUI para configurar, executar um algoritmo na resolução de um problema (apenas com dois objetivos) e desenhar a aproximação à frente de Parto obtida. • java jmetal.gui.ExperimentsSupportGUI para realizar experiência com múltiplas execuções independentes de vários algoritmos em vários problemas de teste, com diferentes parâmetros e analisar resultados. Sessão 2 Experimentação Para comparar o desempenho de algoritmos pode-se definir quais os problemas, indicadores de desempenho e o número de execuções independentes. É criada uma pasta com todas as aproximações às soluções ótimas de Pareto e indicadores de desempenho. Para além disso, é possı́vel gerar: • ficheiro LATEXcom tabelas das médias e medianas dos indicadores de desempenho. • código R para desenhar boxplots dos resultados. • código R para gerar tabelas LATEXcom os resultados de testes estatı́sticos. Para configurar um estudo comparativo é preciso seguir os seguintes passos: 1. configurar os algoritmos, modificando o correspondente ficheiro _main.java ou alterando a configuração na pasta jmetal/experiments/settings o ficheiro _Settings.java 2. se necessário, configurar os problemas a resolver (e.g., alterar número de objetivos do problema) na pasta jmetal/problems 3. executar a experiência 4. analisar os reultados e compilar código LATEX e R para obter mais informação Exemplo da definição de estudos experimentais: • java jmetal.experiments.NSGAIIStudy • java jmetal.experiments.ConstrainedProblemsStudy