Sessão prática - Departamento de Engenharia de Polímeros

Propaganda
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
Download