Resumo - ICEI

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