DESENVOLVIMENTO DO GENETIC SOLVER: um programa genético parametrizável, extensível e fácil de usar Eduardo Luiz de Sousa Ferreira Pontifícia Universidade Católica de Minas Gerais Rua Marajó, 442, Amazonas, Contagem, MG [email protected] RESUMO A Programação Genética é uma das áreas importantes da Inteligência Artificial, área esta que busca solucionar problemas complexos diversos, especialmente os que envolvem cálculos matemáticos, sendo deste modo uma área de estudos e experimentação bastante interessante. Entretanto, grande parte dos sistemas existentes são técnicos demais para usuários iniciantes utilizarem, ou ainda fáceis de usar, porém com poucas funcionalidades. Neste trabalho foi realizada uma pesquisa por conceitos, técnicas e sistemas de programação genética. Foi realizado o processo de Engenharia de Software para implementar os artefatos de software e o sistema em si, prezando pelas boas práticas e contemplando boas soluções de programação genética, obtendo ao final um sistema eficaz, parametrizável, extensível e, sobretudo, fácil de usar. O sistema passou por testes de validação funcional e testes de usabilidade por usuários. Ao final dos experimentos os resultados obtidos foram bastante positivos. O sistema foi disponibilizado para todos que possuam interesse em modificá-lo ou utilizá-lo, de forma gratuita e com códigofonte aberto. Este trabalho descreve as ações que foram tomadas para o projeto e a construção desse sistema de programação genética. Palavras-chave do Autor Programação Genética; Algoritmos Genéticos; Inteligência Artificial; Computação Evolutiva; Regressão Simbólica. ABSTRACT Genetic Programming is one of the important areas of Artificial Intelligence, this area try to solve various complex problems, especially those that involve math calculations, being this way an interesting area of study and experiments. However, a great amount of existing systems are extremely technical for beginner users, or easy to use, but with few functionalities. In this work was performed a research for concepts, techniques and genetic programming systems. It was performed the Software Engineering process to develop software artifacts and the system itself regarding to the good practices and contemplating good solutions of genetic programming, reaching at the end an effective system, parameterized, extensible and mainly easy to use. The system has passed by functional validating tests and usability tests by users. At the end of the experiments the results were quite positive. The system was made Saulo Augusto de Paula Pinto Pontifícia Universidade Católica de Minas Gerais Av. Afonso Vaz de Melo, 1200, Barreiro de Baixo, Belo Horizonte, MG [email protected] available for all users who have interest in modify or simply use it, for free and with open source code. This work describes the actions that were taken for design and build that genetic programming system. Author Keywords Genetic Programming; Genetic Algorithms; Artificial Intelligence; Evolutionary Computation; Symbolic Regression. ACM Classification Keywords I.2. INTRODUÇÃO A Inteligência Artificial é a área da Ciência da Computação que visa reproduzir em computadores comportamentos inteligentes. Na década de 1950, o termo “Inteligência Artificial” surge no meio da Computação, proposto e aceito, no assim considerado, primeiro workshop da área, no Dartmouth College, em 1956 (Russell & Norvig, 2003). A área da Computação Evolutiva é relacionada à Inteligência Artificial. Ela é dedicada a utilizar heurísticas que simulam comportamentos encontrados na natureza para a resolução de problemas, tais como otimização em geral, regressão simbólica, predição de valores, aprendizagem de máquina, entre outros. Segundo Ribeiro (2009, p. 16): “[...] A computação evolutiva é composta por um conjunto de técnicas e algoritmos que têm seu funcionamento baseado nos mecanismos encontrados na natureza.”. Entre estes algoritmos destacam-se os algoritmos genéticos. Os algoritmos genéticos surgiram como uma das possíveis implementações na área da Computação Evolutiva. Foram elaborados inspirados no processo da seleção natural sobre um conjunto inicial de propostas de solução, geradas de maneira aleatória, estruturadas em cadeias de bits ou caracteres, para um dado problema. A programação genética é uma importante subdivisão da Computação Evolutiva. Ela foi desenvolvida a partir dos algoritmos genéticos e apresenta uma abordagem de estruturação de problemas mais evoluída. Os indivíduos passam a ser estruturados na forma de programas de computadores, ou expressões matemáticas, ou seja, a solução apresentada pelo método é um programa que deve ser executado ou uma expressão a ser avaliada ou um processo qualquer a ser executado (KOZA, 1992). Essa melhor estruturação os capacita a tentar solucionar problemas de maior complexidade. Este trabalho descreve o projeto e a implementação de um sistema de programação genética, destinado à resolução de problemas em geral, parametrizável, extensível e que seja fácil de usar tanto para usuários programadores de computadores quanto “leigos”. OBJETIVOS Construir um sistema de programação genética, oferecendo ao usuário um menu de parâmetros com diversos ajustes possíveis, sendo também passível de extensão em nível de código para adequar-se a outros problemas específicos. METODOLOGIA O trabalho foi desenvolvido seguindo as etapas: a) Levantamento bibliográfico; b) Pesquisa por sistemas de programação genética disponíveis publicamente; c) Estudo de características da Programação Genética relevantes para serem utilizadas na construção do sistema; d) Elaboração dos casos de uso; e) Elaboração do diagrama de classes; f) Codificação das classes, interfaces e demais componentes do sistema; g) Realização de experimentos para verificar correção e a precisão do sistema; h) Realização de testes de usabilidade por usuários programadores e não programadores; i) Avaliação final do sistema. Figura 1: Representação do código genético de um indivíduo dentro de um vetor A leitura de dados é feita através de arquivos no formato arff da WEKA, facilitando a criação de arquivos de leitura de dados e permitindo futuras comparações com outros métodos de aprendizagem da WEKA. Os parâmetros do sistema permitem ao usuário definir desde o tamanho da população e número de gerações até a seleção dos operadores matemáticos permitidos. A saída de dados é feita na forma de fórmulas do MS Excel, o que torna mais fácil o uso dos resultados para resolver problemas similares. RESULTADOS DESENVOLVIMENTO Sistemas estudados Foram estudadas as características de quatro sistemas de programação genética de código aberto e livre distribuição, principalmente referentes à facilidade de uso, são eles: AForge.NET, Heuristic Lab; SmallGP e JGAP. Os resultados dessa avaliação será exibida em um comparativo entre eles e o Genetic Solver. Foi verificado que dentre os sistemas estudados não existia a combinação entre facilidade de usar e capacidade para resolver problemas mais complexos. Detalhes da implementação do sistema O sistema foi construído na linguagem C#. Foram desenvolvidas interfaces para facilitar expansões de código para nodos (variáveis, constantes e operadores matemáticos), crossover, mutação, métodos de seleção, cálculo de fitness, leitura de dados e exibição de resultados. O código genético dos indivíduos é a implementação mais importante, foi realizada através da representação de uma árvore de operadores matemáticos e números (variáveis e constantes) dentro de um vetor. A imagem abaixo elucida como um vetor pode representar uma árvore: Para verificar a precisão do sistema foi realizado um teste onde ele deveria encontrar a fórmula do MS Excel equivalente à diferença do volume entre dois prismas (dois objetos sólidos), dada pela seguinte expressão: (Comprimento1 X Largura1 X Altura1) – (Comprimento2 X Largura2 X Altura2) Ao final desse experimento o sistema foi capaz de encontrar a solução para o problema proposto. Ele partiu das primeiras gerações com indivíduos completamente inaptos a resolver o problema. Porém, através dos processos genéticos conseguiu evoluir. O ápice do processo foi atingido na geração 45, na qual foi encontrada a solução exata do problema. A seguinte fórmula do MS Excel foi gerada e testada com êxito em uma planilha contendo os dados do problema: =(((A1*B1)*(1*C1))-((D1*E1)*(0+F1))) Para verificar a usabilidade foi feito um questionário, respondido por 10 usuários que testaram o Genetic Solver, 5 programadores e 5 não programadores. As perguntas obtiveram respostas positivas, conforme a tabela abaixo: 2.HEURISTICLAB. HeuristicLab: a paradigmindependent and extensible environment for heuristic optimization. Disponível em: http://dev.heuristiclab.com/trac/hl/core/wiki/WikiStart. Acesso em: 28 set. 2012. Tabela 1: Resultado do teste de usabilidade por usuários Quanto à comparação com os demais sistemas estudados, o Genetic Solver foi o único a atender todos os quesitos. É possível verificar os resultados na tabela abaixo: 3.KOZA, John R. Genetic programming: on the programming of computers by means of natural selection. 6ª edição. MIT Press, Cambridge, MA, EUA, 1992. 4.LUGER, George F. Inteligência artificial: estruturas e estratégias para solução de problemas complexos. 4ª edição. Porto Alegre: Bookman, 2004. 5.MANOEL, Hermelindo Pinheiro. Introdução aos algoritmos genéticos. Disponível em: http://www.obitko.com/tutorials/geneticalgorithms/portuguese/index.php. Acesso em: 23 set. 2012. Tabela 2: Comparativo entre os sistemas CONCLUSÃO Constatou-se que o sistema construído é fácil de usar e possui uma interface clara, que conduz o usuário no caminho certo da utilização. O código-fonte foi elaborado de forma modularizada e contando com várias interfaces, permitindo expandir o código para melhorias futuras de maneira mais fácil. O sistema conta com um menu de parametrização que permite ao usuário explorar diversas combinações de parâmetros melhorando as chances de encontrar o resultado. A saída de dados do sistema é feita através da geração de uma fórmula do MS Excel que representa o melhor indivíduo encontrado. Desse modo o usuário pode utilizar a saída do sistema diretamente na resolução de problemas similares, colando o resultado na célula indicada na planilha do MS Excel que contém o problema. O sistema foi construído com o propósito de ser livre, com o código fonte aberto e distribuído gratuitamente para qualquer pessoa que queira utilizar ou aprimorar o mesmo. REFERENCES 1.AFORGE.NET. AForge.NET framework. Disponível em: http://www.aforgenet.com. Acesso em: 28 set. 2012. 6.MENDES, Myke Nelson Nolasco. Alterações genéticas letais em indivíduos de baixo fitness. Monografia (Sistemas de Informação). Instituto de Informática. PUC Minas. 2008. 7.PLANATSCHER, Hannes. Symbolic regression applet. Disponível em: http://planatscher.net/sr/. Acesso em: 28 set. 2012. 8.POLI, Riccardo. TinyGP: a tiny genetic programming implementation. Disponível em: http://cswww.essex.ac.uk/staff/rpoli/TinyGP/. Acesso em: 28 set. 2012. 9.RIBEIRO, Rodrigo Leonardo Freitas. Projeto e construção de um sistema de programação genética. Monografia (Sistemas de Informação). Instituto de Informática. PUC Minas. 2009. 10.RUSSEL, Stuart; NORVIG, Peter. Inteligência artificial: uma abordagem moderna. 2ª edição. Editora Campus. 2003. 11.SILVA, Ismael Santana. Agrupamento de amostras de dados de expressão gênica utilizando programação genética. Monografia (Sistemas de Informação). Instituto de Informática. PUC Minas. 2008.