Upload
phunglien
View
213
Download
0
Embed Size (px)
Citation preview
UNIVERSIDADE DO ESTADO DE SANTA CATARINA - UDESC
CENTRO DE EDUCAÇÃO SUPERIOR DO ALTO VALE DO ITAJAI - CEAVI
DEPARTAMENTO DE SISTEMAS DE INFORMAÇÃO
RICARDO GRUNITZKI
SIMULADOR WEB PARA O ALGORITMO DE OTIMIZAÇÃO GLOBAL PARTICLE
SWARM OPTIMIZATION COM PESO INERCIAL VARIANDO EM FUNÇÃO DA
DIVERSIDADE
IBIRAMA - SC
2012
RICARDO GRUNITZKI
SIMULADORWEB PARA O ALGORITMO DE OTIMIZAÇÃO GLOBAL PARTICLE
SWARM OPTIMIZATION COM PESO INERCIAL VARIANDO EM FUNÇÃO DA
DIVERSIDADE
Trabalho de Conclusão apresentado ao Curso de
Sistemas de Informação, da Universidade do
Estado de Santa Catarina, como requisito parcial
para obtenção do grau de bacharel em Sistemas de
Informação.
Orientador: Fernando dos Santos
Coorientador: Jarbas Cleber Ferrari
IBIRAMA - SC
2012
RICARDO GRUNITZKI
SIMULADOR WEB PARA O ALGORITMO DE OTIMIZAÇÃO GLOBAL PARTICLE
SWARM OPTIMIZATION COM PESO INERCIAL VARIANDO EM FUNÇÃO DA
DIVERSIDADE
Trabalho de Conclusão de Curso apresentado como requisito parcial para obtenção do grau de
Bacharel em Sistemas de Informação oferecido pelo Centro de Educação Superior do Alto Vale
do Itajaí da UDESC.
Banca Examinadora
Orientador: _______________________________________________________________
MSc. Fernando dos Santos
Universidade do Estado de Santa Catarina UDESC - CEAVI
Membro: ________________________________________________________________
Dr. Milton Roberto Heinen
Universidade do Estado de Santa Catarina UDESC - CCT
Membro: _______________________________________________________________
MSc. Osmar Oliveira Braz Junior
Universidade do Estado de Santa Catarina UDESC - CEAVI
Ibirama, SC - (29/11/2012).
Dedico este trabalho aos meus pais, Marco e
Claudete, e a todos os amigos que compreenderam a
minha ausência neste período.
“Não é o que você faz, mas quanto amor
você dedica ao que faz que realmente importa.”
-Madre Tereza de Calcutá
RESUMO
GRUNITZKI, Ricardo. Simulador web para o algoritmo de otimização global particle
swarm optimization com peso inercial variando em função da diversidade. 2012. 79 f.
Trabalho de Conclusão de Curso (Bacharel em Sistemas de Informação – Área: Inteligência
Artificial) - Universidade do Estado de Santa Catarina. Ibirama, 2012.
Este trabalho apresenta a especificação e o detalhamento da implementação de um
simulador web para o algoritmo de otimização global Particle Swarm Optimization.Com o
simulador pode-se acompanhar o comportamento do algoritmo nos principais problemas de
otimização ou a partir de uma função qualquer definida pelo usuário. Além de possibilitar a
alteração dos parâmetros do algoritmo, este trabalho ainda propõe uma estratégia para a
variação do peso inercial, a qual varia em função da diversidade entre todas as partículas do
enxame. A performance desta função foi avaliada através de 9 funções teste implementadas no
simulador e comparadas com os resultados obtidos pela implementação de Jiao, Lian e Gu
(2008). Os resultados obtidos comprovaram que a função diversidade apresenta eficiência
significativamente superior à proposta comparada.
Palavras-chave: Particle Swarm Optimization, Função Teste, Função Diversidade,
Simulador, Aplicativo Web.
ABSTRACT
GRUNITZKI, Ricardo. Web simulator for the global optimization algorithm particle
swarm optimization with inertia weight varying by diversity. 2012. 79 f. Work Course
Conclusion (Bacharel em Sistemas de Informação – Area: Artificial Intelligence) -
Universidade do Estado de Santa Catarina. Ibirama, 2012.
This work presents the specification and implementation of a web simulator for the
global optimization algorithm Particle Swarm Optimization. With the simulator it is possible to
track the behavior of the algorithm in the main optimization problems or from any function
defined by the user. The simulator allows the user to change the parameters of the algorithm.
This work also proposes an alternative strategy for varying the inertial weight according to the
diversity of all particles in the swarm. The performance of this function was evaluated by nine
fitness functions implemented on the simulator and compared to the results obtained by the
implementation of Jiao, and Gu Lian (2008). The results proved that the diversity function has
significantly higher efficiency compared to the proposal.
Key-words: Particle Swarm Optimization, Fitness Function, Diversity Function,
Simulator, Web Application.
LISTA DE ABREVIATURAS
AJAX Asynchronous Javascript and XML
API Application programming interface
CHAP Common Hybrid Agent Platform
CSRF Cross site request forgery
DWR Direct Web Remoting
GWT Google web toolkit
HTML Hypertext markup language
JSF Java Server Faces
JRE Java runtime environment
PSO Particle Swarm Optimization
XHTML Extensible hypertext markup language
LISTA DE SÍMBOLOS
pbest Melhor posição conhecida pela partícula.
gbest Melhor posição conhecida pelo enxame.
lbest Melhor posição conhecida por uma vizinhança topológica.
LISTA DE FIGURAS
Figura 1 - Representação gráfica da função generalizada de Rastrigin em três
dimensões ................................................................................................. 24
Figura 2 - Representação gráfica da função esférica em três dimensões ....................... 24
Figura 3 - Representação gráfica da função de Griewank em três dimensões ............... 25
Figura 4 - Representação gráfica da função de Rosenbrock em três dimensões ............ 26
Figura 5 - Representação gráfica da função de Schewefel em três dimensões .............. 26
Figura 6 - Representação gráfica da função de Ackley em três dimensões ................... 27
Figura 7 - Representação gráfica da função ruidosa em três dimensões. (a) com ruído
igual a 0, (b) com ruído igual a 1 ............................................................... 28
Figura 8 - Representação gráfica da função de Levy em três dimensões ...................... 28
Figura 9 - Representação gráfica da função f(x,y)=sen(x)*cos(y)*50+50 .................... 30
Figura 10 - DWR alterando o conteúdo de uma lista após chamada Javascript............. 31
Figura 11 - Applet PsoVis minimizando a função de Rosenbrock. ............................... 34
Figura 12 - Particle Swarm Optimization Visualization maximizando um espaço
tridimensional ........................................................................................... 35
Figura 13 - Curva de variação do peso inercial para a função diversidade .................... 40
Figura 14 - Fluxo de funcionamento do PSO com a função densidade ......................... 41
Figura 15 - Diagrama de casos de uso do sistema ........................................................ 44
Figura 16 - Protótipo visual para o sistema PSOView.................................................. 48
Figura 17 - Diagrama de pacotes de classe .................................................................. 49
Figura 18 - Diagrama de classes do pacote function ............................................... 50
Figura 19 - Pacote de classes MathEvaluator ........................................................ 51
Figura 20 - Pacotes de classes core ........................................................................... 52
Figura 21 - Pacote de classes bean ............................................................................. 53
Figura 22 - Diagrama de sequencia para UC02 Visualizar Otimização ........................ 54
Figura 23 - Diagrama de sequência para UC03 Criar Função ...................................... 56
Figura 24 - Estrutura do Projeto PSOView .................................................................. 57
Figura 25- PSOView minimizando a função de Ackley ............................................... 64
Figura 26 - Tela inicial do simulador PSOView .......................................................... 65
Figura 27 - Lista de funções teste implementadas ........................................................ 65
Figura 28 - Campo de entrada para a função matemática ............................................. 66
Figura 29 - Simulador desenhando a função durante a inserção da expressão .............. 66
Figura 30 - Parâmetros de configuração da função teste .............................................. 67
Figura 31 - Possíveis configurações para o gráfico da função. (a) sem parâmetros, (b)
com todos os parâmetros ........................................................................... 67
Figura 32 - Parâmetros de configuração do PSO.......................................................... 68
Figura 33 - Fim do processo de otimização ................................................................. 68
Figura 34 - Dialogo de resultados da otimização ......................................................... 69
Figura 35 - Opções de idioma disponíveis no PSOView .............................................. 69
Figura 36 - Aplicação no Idioma inglês dos EUA ........................................................ 70
LISTA DE QUADROS
Quadro 1 - Operadores disponíveis na biblioteca Math Evaluator ............................... 32
Quadro 2 - Exemplo de utilização da biblioteca Math Evaluator ................................. 33
Quadro 3 - Comparação entre PSOVis e PSO Visualization ........................................ 36
Quadro 4 - Regras de negócio da aplicação ................................................................ 42
Quadro 5 - Requisitos Funcionais da aplicação............................................................ 43
Quadro 6 - Requisitos não Funcionais da aplicação ..................................................... 44
Quadro 7 - UC01 - Alterar idioma ............................................................................... 45
Quadro 8 - UC02 - Visualizar otimização .................................................................... 46
Quadro 9 - UC03 - Criar função .................................................................................. 47
Quadro 10 - Método construtor da classe PSO ............................................................ 59
Quadro 11 - Implementação da função diversidade. .................................................... 60
Quadro 12 - Código fonte de classe PSOViewAjax ..................................................... 61
Quadro 13 - Código fonte da função fncOnLoad() ................................................. 61
Quadro 14 - Código fonte do método drawVisualization()................................ 62
Quadro 15- Código fonte do método updateDataPoints ..................................... 63
Quadro 16 - Código fonte do método drawParticles ........................................... 64
Quadro 17 - Comparação entre PSOView e trabalhos correlatos ................................. 73
LISTA DE TABELAS
Tabela 1 - Comparativo entre a função de Jiao, Lian e Gu (2008) e a função diversidade
............................................................................................................................ 71
SUMÁRIO
1 INTRODUÇÃO .................................................................................................. 15
1.1 PROBLEMA ..................................................................................................... 16
1.2 OBJETIVOS ...................................................................................................... 16
1.2.1 Objetivo geral .............................................................................................. 17
1.2.2 Objetivos específicos .................................................................................... 17
1.3 JUSTIFICATIVA .............................................................................................. 17
1.4 METODOLOGIA .............................................................................................. 18
1.5 PRINCIPAIS CONTRIBUIÇÕES...................................................................... 19
1.6 ESTRUTURA DO TRABALHO ....................................................................... 19
2 FUNDAMENTAÇÃO TEÓRICA ..................................................................... 20
2.1 SWARM INTELLIGENCE ............................................................................... 20
2.2 PARTICLE SWARM OPTIMIZATION ............................................................ 20
2.2.1 Peso inercial ................................................................................................. 21
2.2.2 Distribuição de números randômicos ......................................................... 22
2.3 FUNÇÕES TESTE ............................................................................................ 23
2.3.1 Função Generalizada de Rastrigin ............................................................. 23
2.3.2 Função Esférica ........................................................................................... 24
2.3.3 Função de Griewank ................................................................................... 24
2.3.4 Função de Rosenbrock ................................................................................ 25
2.3.5 Função de Schewefel.................................................................................... 26
2.3.6 Função de Ackley ........................................................................................ 27
2.3.7 Função Ruidosa ........................................................................................... 27
2.3.8 Função de Levy ............................................................................................ 28
2.4 PRIMEFACES................................................................................................... 29
2.5 GRAPH3D ........................................................................................................ 29
2.6 DIRECT WEB REMOTING .............................................................................. 30
2.7 MATH EVALUATOR ...................................................................................... 32
2.8 TRABALHOS CORRELATOS ......................................................................... 33
2.8.1 PsoVis ........................................................................................................... 33
2.8.2 Particle Swarm Optimization Visualization ............................................... 35
2.8.3 Comparativo ................................................................................................ 36
3 DESENVOLVIMENTO..................................................................................... 39
3.1 FUNÇÃO DIVERSIDADE ................................................................................ 39
3.2 ESPECIFICAÇÃO............................................................................................. 41
3.2.1 Requisitos ..................................................................................................... 42
3.2.2 Casos de Uso ................................................................................................ 44
3.2.3 Protótipos Visuais ........................................................................................ 47
3.2.4 Diagrama de Classes.................................................................................... 48
3.2.5 Diagramas de Sequência ............................................................................. 53
3.3 IMPLEMENTAÇÃO ......................................................................................... 56
3.3.1 Técnicas Utilizadas ...................................................................................... 56
3.3.2 Estrutura do Projeto ................................................................................... 57
3.3.3 Implementação do PSO ............................................................................... 58
3.3.4 Implementação Javascript .......................................................................... 60
3.4 OPERACIONALIDADE ................................................................................... 64
3.5 COMPARATIVO DAS ESTRATÉGIAS........................................................... 70
4 CONCLUSÕES .................................................................................................. 72
4.1 DIFICULDADES ENCONTRADAS ................................................................. 74
4.2 EXTENSÕES .................................................................................................... 74
REFÊRENCIAS ........................................................................................................ 76
15
1 INTRODUÇÃO
Na natureza existem várias espécies que se beneficiam da sociabilidade, pois a vida
em grupos sociais aumenta a probabilidade de acasalamento, facilita a caça e coleta de
alimentos, reduz a probabilidade de ataque por predadores e permite a divisão do trabalho
(ZUBEN; ATTUX, 2008). Baseados nas vantagens que certos indivíduos possuem ao viver
coletivamente no mundo real, pesquisadores desenvolveram ferramentas computacionais
para a solução de problemas e estratégias de coordenação e controle, ao que chamam de
Swarm Intelligence.
Técnicas de inteligência computacional com fundamentos baseados no Swarm
Intelligence realizam uma analogia à natureza, onde indivíduos integrantes de uma
população interagem localmente uns com os outros e também com seu meio ambiente. Tal
princípio fundamenta o algoritmo otimização por enxame de partículas (particle swarm
optimization ou PSO).
Proposto inicialmente por Eberhart e Kennedy em 1995, o algoritmo de otimização
por enxame de partículas é um algoritmo estocástico com características heurísticas de busca
randômica, que relaciona conceitos da psicologia social e inteligência computacional
(KENNEDY; EBERHART, 2001).
Desde então, muitos esforços tem sido investidos na obtenção do melhor
entendimento das propriedades de convergência do PSO. Esses estudos concentram-se
principalmente na compreensão dos parâmetros básicos de controle do PSO, como os
coeficientes de aceleração, peso inercial, tamanho de população, topologia de vizinhança e
distribuição da população inicial (VAN DEN BERGH; ENGELBRECHT; 2006).
Em função de o algoritmo apresentar um conceito simples, sendo de fácil
implementação e possuindo poucos parâmetros de ajuste, têm sido encontradas inúmeras
aplicações para o PSO. Dentre essas aplicações destacam-se a resolução de problemas com
restrições, problemas de minimização ou maximização, problemas com múltiplas soluções,
monitoramento dinâmico e otimização de pesos e arquiteturas de redes neurais. (SHI, 2004).
A necessidade de aprimoramento das estratégias de algoritmos estocásticos com
heurísticas inteligentes está baseada no melhor conhecimento a respeito dos processos, o que
provoca o surgimento de modelos fenomenológicos cada vez mais complexos, assim como
do acesso às informações, que devem ser correlacionadas e interpretadas. Nesse contexto a
utilização de algoritmos determinísticos é inviabilizada, diante de sua dificuldade quanto à
16
convergência a uma solução global e dependência dos critérios de inicialização (THOMAS;
REED, 2009).
As propostas de aprimoramento nos algoritmos estocásticos devem ser
experimentadas para validar seus benefícios. Neste sentido, é importante o uso de algum
simulador, onde seja possível avaliar o comportamento em diferentes situações. Ferramentas
de simulação consistem na utilização de técnicas matemáticas em computadores, com o
intuito de imitar o funcionamento de praticamente qualquer tipo de operação do mundo real.
Permitem a experimentação da realidade através de um modelo e assim, avaliar como as
variáveis irão se comportar no sistema idealizado (HARRELL et al.; 2002).
O simulador proposto neste trabalho visa oferecer um ambiente de testes flexível,
acessível, independente de plataforma e recursos adicionais para avaliar o comportamento e
desempenho do PSO nos mais diversos problemas de minimização. O trabalho ainda propõe
uma estratégia alternativa para o peso inercial, chamada função diversidade.
1.1 PROBLEMA
Existem hoje publicados um número crescente de artigos que apresentam estratégias
de implementação do PSO, expondo sempre suas vantagens em termos de eficiência e
confiabilidade na resolução de funções teste e ou problemas específicos relacionados à
ciência da computação e engenharia. Diante deste quadro, observa-se uma grande
dificuldade em visualizar os efeitos destas estratégias no processo de otimização do PSO. As
ferramentas de simulação existentes não são flexíveis o bastante e ainda requerem a
instalação de recursos adicionais. Cabe argumentar se realmente existe uma maneira de
representar o funcionamento do PSO nas mais diversas situações, e sem a necessidade de
instalar recursos adicionais.
1.2 OBJETIVOS
Neste tópico serão definidos o objetivo geral e específicos que se deseja atingir com
este trabalho.
17
1.2.1 Objetivo geral
O objetivo geral deste trabalho é possibilitar a visualização do processo de
otimização do algoritmo inteligente Particle Swarm Optimization nos mais diversos
problemas de otimização.
1.2.2 Objetivos específicos
a) Desenvolver uma aplicação web, que permita visualizar o processo de otimização do
algoritmo sem a necessidade de instalar recursos adicionais no cliente.
b) Desenvolver uma estrutura flexível para a construção de funções teste.
c) Propor um algoritmo que, não seja uma estratégia genérica ótima, mas que se mostre
eficiente e confiável para a maioria dos casos de otimização em que ele possa ser
aplicado.
1.3 JUSTIFICATIVA
Diante da evolução científica e do melhor conhecimento a respeito dos processos
assim como do acesso das informações, os pesquisadores tem construído modelos cada vez
mais eficientes em representar um fenômeno, uma cinética de reação ou uma relação
mesmo que complexa entre variáveis. O contra ponto dessa evolução é que estes modelos
apresentam uma complexidade cada vez maior, já que cada vez mais eles buscam
aproximar-se do modelo real. Esta alta complexidade inviabiliza a utilização de algoritmos
determinísticos deixando espaço para os algoritmos estocásticos, que se utilizam de
heurísticas cada vez mais inteligentes nas suas estratégias de resolução destes modelos.
Mesmo quando estes modelos fenomenológicos são descartados, estratégias de correlação
de dados como as redes neurais podem também apresentar dificuldades quanto à
determinação de sua melhor arquitetura e estimação dos seus pesos sinápticos ótimos.
Um simulador web, independente de plataforma ou recursos adicionais, possibilita
ao usuário a análise visual do comportamento do algoritmo, permitindo melhor observar a
influência dos parâmetros do PSO durante o processo de otimização. Além de servir como
uma ferramenta didática no aprendizado de inteligência de enxames. Já a flexibilidade na
construção de funções teste permite avaliar a eficiência do processo de busca nos mais
distintos espaços solução.
18
1.4 METODOLOGIA
A utilização de métodos quantitativos está associada à investigação experimental ou
quase experimental o que pressupõe a observação de fenômenos, a formulação de hipóteses
explicativas desses mesmos fenômenos, o controle de variáveis, a seleção aleatória dos
sujeitos de investigação (amostragem), a verificação ou rejeição das hipóteses mediante uma
escolha rigorosa de dados, posteriormente sujeitos a uma análise estatística e uma utilização
de modelos matemáticos para testar essas mesmas hipóteses (SIMÕES; PAIVA, 2004).
No processo de investigação do desempenho de um algoritmo de otimização,como o
PSO, é necessário realizar uma avaliação sistemática da influência das variáveis e
possibilidades de heurísticas do mesmo, no sentido de que a abordagem seja mais completa
possível. Segundo Resendeet al. (1995), recentemente a necessidade de uma ciência
empírica rigorosa dos algoritmos vem sendo enfatizada, testando heurísticas através de uma
grande variedade de problemas, realizando uma avaliação estatística do desempenho desses
algoritmos, definindo em quais circunstâncias ela será relativamente boa ou ruim.
Quando se realiza uma pesquisa exploratória o objetivo é familiarizar-se com um
assunto ainda pouco conhecido, tornando-se apto a construir hipóteses. Como qualquer
exploração, a pesquisa exploratória depende da intuição do explorador. Por ser um tipo de
pesquisa muito específica, quase sempre ela assume a forma de um estudo de caso (GIL,
2008).
Um procedimento eficiente na realização de uma pesquisa exploratória é a busca
sistematizada de informações sobre o tema na forma de uma consulta a fontes bibliográfica,
esta permite melhor redefinir os limites de exploração da pesquisa, formular e abortar
hipóteses.
Com o intuito de conhecer melhor as heurísticas já implementadas, bem como as
alterações que se mostraram potencialmente eficientes na solução dos mais diversos
problemas, foi realizada uma pesquisa bibliográfica de caráter exploratório que se
concentrou nas publicações que fazem uso do peso inercial, nas suas mais diversas formas,
como também heurísticas que fazem uma melhor avaliação da geração inicial dos números
randômicos, relevantes em si tratando de um algoritmo estocástico.
19
1.5 PRINCIPAIS CONTRIBUIÇÕES
Este trabalho traz duas principais contribuições, a função diversidade e o simulador.
O simulador proporciona um ambiente web para a visualização do processo de otimização
do algoritmo inteligente PSO, independente de plataforma ou instalação de recursos
adicionais. Além de trazer nove famosos problemas de otimização já implementados, o
simulador ainda permite a criação de casos de teste customizáveis a partir de expressões
matemáticas.
A função diversidade é uma alternativa para a variação do peso inercial do PSO. Esta
estratégia utiliza a distância euclidiana média entre todas as partículas do enxame e a melhor
partícula global para controlar a relação exploração convergência durante o processo de
busca.
1.6 ESTRUTURA DO TRABALHO
O conteúdo deste trabalho está divido em quatro capítulos. O capítulo 2 apresenta a
contextualização de inteligência de enxames (seção 2.1), do algoritmo de otimização global
PSO (seção 2.2) e os fatores que influenciam no seu desempenho, as principais funções teste
(seção 2.3), as bibliotecas utilizadas no desenvolvimento do simulador (seções 2.4 à 2.7) e
os trabalhos correlatos (seção 2.8).
O capítulo 3 apresenta o desenvolvimento da função diversidade (seção 3.1), a
especificação e operacionalidade do simulador PSOView (seções 3.2 à 3.4) e um
comparativo com os resultados obtidos da função diversidade (seção 3.5). Já o capítulo 4
apresenta as conclusões do trabalho, bem como as dificuldades encontradas (seção 4.1) e
extensões para trabalhos futuros (4.2).
20
2 FUNDAMENTAÇÃO TEÓRICA
Este capítulo tem como objetivo contextualizar a fundamentação teórica necessária
para compreender o funcionamento do PSO e as tecnologias utilizadas na construção do
simulador.
2.1 SWARM INTELLIGENCE
O termo swarm intelligence foi proposto no fim da década de 80, quando se referia a
sistemas robóticos compostos por uma coleção de agentes simples em um ambiente
interagindo de acordo com regras locais (KENNED; EBERHART, 2001). De forma
genérica o termo Swarm (enxame) refere-se a qualquer coleção estruturada de indivíduos
capazes de interagir.
A inteligência de enxame inclui qualquer tentativa de projetar algoritmos ou
dispositivos distribuídos de solução de problemas, inspirados no comportamento coletivo de
insetos sociais e outras sociedades animais (BONEBEAU et al., 1999).
A teoria sobre swarm intelligence sugere que mentes e culturas são afetadas por suas
interações sociais de forma que sistemas compostos por agentes pouco inteligentes e com
capacidade individual limitada, possam ser capazes de apresentar comportamentos coletivos
inteligentes ao interagirem entre si e com o meio ambiente. (WHITE; PAGUREK, 1998).
Sob o ponto de vista da psicologia social a inteligência é fruto da cultura bem como
das interações sociais. De acordo com Allport (1985, p. 3), psicologia social é: “Uma
tentativa de entender e explicar como o pensamento, sentimento, e comportamento dos
indivíduos são afetados pela presença atual, imaginaria ou implícita de outros”.
2.2 PARTICLE SWARM OPTIMIZATION
O algoritmo inteligente otimização por enxame de partículas é uma técnica de
computação evolucionária desenvolvida por Eberhart e Kennedy em 1995, inspirada no
comportamento social de espécies biológicas como aves e peixes. É uma técnica baseada em
inteligência computacional que não é afetada pelo tamanho ou não linearidade do problema,
podendo convergir para uma solução ótima em muitos problemas onde métodos mais
analíticos falham na convergência (DELVALLE et al., 2008).
21
O PSO utiliza uma população chamada de enxame, onde cada indivíduo dentro do
enxame é denominado partícula. Segundo Jiao, Lian e Gu (2008), uma partícula i em uma
iteração k se desloca através do espaço solução com dois atributos: (1) a posição atual dentro
de um espaço de busca N-dimensional k k k k
i 1 n NX = (x ,..., x ,...x ) do problema, com
min k max
n n nx x x para todo n [1, N] , onde min
nx e max
nx são os limites da coordenada n; (2)
sua velocidade, representada vetorialmente por k k k k
i 1 n NV = (v ,..., v ,..., v ) nesse mesmo espaço
N-Dimensional do problema.
A cada iteração a velocidade e posição de todas as partículas são atualizadas de
acordo com dois melhores valores encontrados durante a busca. O primeiro é o melhor valor
encontrado pela partícula até o momento, chamado pbest. Outro melhor valor que é
encontrado pelo PSO é o melhor valor encontrado até o momento por qualquer indivíduo da
população, este melhor valor global é chamado gbest. Quando uma partícula torna parte de
uma vizinhança topológica o melhor valor é um valor local e é chamado lbest. Segundo Jiao,
Lian e Gu (2008) após encontrar os dois melhores valores, a posição e velocidade das
partículas são obtidas pelas equações 1 e 2:
i i 1 1 i i 2 2 g iV (k+1) = wV (k) +c r (P (k) - X (k)) +c r (P (k) - X (k)) (1)
i i IX (k+1) = X (k) + V (k+1) (2)
Onde 1r e 2r , são números randômicos gerados aleatoriamente no intervalo entre [0,1]
e 1c e 2c são respectivamente chamados de parâmetro cognitivo e social. O termo
k k
1 1 i ic r (P - X ) representa a distância entre a partícula i e sua melhor posição até a k-ésima
interação. Este termo dispersa a busca em várias regiões do espaço solução de maneira a
encontrar o mínimo global do problema. Já o termo k k
2 2 g ic r (P - X ) representa a distância entre
a partícula i e a melhor posição encontrada pela população até a k-ésima iteração. Por fim, o
parâmetro w, introduzido por Shi e Eberhart (1998) tem como finalidade melhorar as
habilidades de exploração do algoritmo no âmbito de busca, reduzindo a importância do
controle da velocidade máxima (POLI et al., 2007).
2.2.1 Peso inercial
Embora as primeiras pesquisas reconheçam que alguma forma de amortecimento da
dinâmica da partícula era necessária, a razão para isso não foi compreendida. Mas quando o
22
PSO foi implementado sem restrição de velocidade, esta acaba divergindo dentro de poucas
iterações (POLI et al., 2007).
No intuito de melhorar o desempenho do algoritmo PSO, Shi e Eberhart, (1998)
introduzem um parâmetro denominado peso inercial. O objetivo efetivo do parâmetro é
desempenhar o papel de equilibrar busca global e local, isso porque para diferentes
problemas deve haver diferentes equilíbrios entre habilidade de busca global e habilidade de
busca local.
Nesse trabalho pioneiro, o peso inercial foi implementado fixo apresentando
melhores resultados para valores no intervalo de [0.9, 1.2]. No entanto, os autores
apresentam indícios de que a estratégia que apresenta o peso inercial decrescente, de acordo
com o número de iterações, é bastante promissora.
Clerc (1999) institui o fator de constrição com o objetivo de promover a
convergência da velocidade, sem a necessidade de predeterminação de velocidade máxima.
No entanto, Eberhart e Shi (2000) concluíram que o fator de constrição pode ser considerado
um caso especial de peso inercial uma vez que os parâmetros desse fator estão conectados
aos demais parâmetros do PSO.
De forma prática, a implementação do peso inercial -kiter
iw = w *(1,0008) torna o
algoritmo mais eficiente porque valores altos para w implicam em grandes incrementos de
velocidade por iteração o qual possibilita a exploração de novas áreas em busca de uma
melhor solução. No entanto, pequenos valores de peso inercial implicam promover pequenas
atualizações de velocidade promovendo um ajuste fino da área de busca local (CHATERJEE
e SIARRY, 2004).
2.2.2 Distribuição de números randômicos
Uma discussão pertinente a respeito de algoritmos estocásticos diz respeito à
dispersão da população inicial no espaço de busca. Algoritmos como o PSO funcionam
muito bem para problemas que possuem pequena área de busca com baixa dimensão, mas
como o espaço de busca pode ser N-dimencional o desempenho se deteriora e muitas vezes,
converge prematuramente para um resultado ruim (LIU et al., 2007).
No caso de funções multimodais, onde podem haver muitos mínimos locais, a
performance do algoritmo pode ser prejudicada por uma má distribuição da população no
espaço de busca, tornando-o pouco hábil em localizar potenciais soluções (GROSAN et al.,
2005). Uma parte desta dificuldade pode ser minimizada selecionando uma distribuição bem
23
organizada de números randômicos (ABRAHAM et al., 2009; SHI e EBERHART, 1999;
RICHARDS e VENTURA, 2003).
Usualmente a geração de números randômicos é realizada por uma função que usa a
distribuição uniforme de probabilidade na geração desses números. Gehlhaar e Foge (1996)
demonstram que a distribuição uniforme das partículas nem sempre pode ser boa para o
estudo empírico de diferentes algoritmos, passando uma impressão errada do desempenho
dos mesmos.
Pant et al. (2007), realizaram um estudo onde são testadas outras estratégias de
distribuição de números randômicos, como a distribuição exponencial, log normal e
gaussiana, concluindo que estas são igualmente competentes e em muitos casos melhores
que a distribuição uniforme.
2.3 FUNÇÕES TESTE
No estudo de algoritmos de otimização é comum a realização de comparações entre
diferentes algoritmos usando uma série de funções teste. As características das funções teste
são as mais diversas, no entanto, em síntese a maior parte delas pode ser implementada no
espaço n dimensional, exigindo do algoritmo a estimação de n parâmetros. Além disso,
muitas delas são multimodais o que dificulta a otimização pelo excesso de mínimos locais,
tornando-as eficientes para avaliar o desempenho dos algoritmos de otimização nas mais
diversas situações. A seguir são apresentadas as principais funções teste utilizadas na
literatura junto de suas principais características.
2.3.1 Função Generalizada de Rastrigin
A função generalizada de Rastrigin definida por
2
1
1
( ,..., ) ( 10cos(2 ) 10)n
n i i
i
f x x x x
é um típico exemplo de função multimodal não
linear. Essa função foi inicialmente proposta por Rastringin em 1989 como uma função de
duas dimensões, e em seguida generalizada por Mühlenbein et al. (1991). Essa função é um
problema bastante difícil devido ao grande espaço de busca e ao grande número de mínimos
locais, como pode ser observado na Figura 1. Sob a forma generalizada o problema pode
apresentar n dimensões, com ótimo global em (0,0,...)nx , onde a função assume o valor
zero.
24
Figura 1 - Representação gráfica da função generalizada de Rastrigin em três dimensões
Fonte: Autor (2011)
2.3.2 Função Esférica
A função esférica é uma função contínua, estritamente convexa e unimodal, como
pode ser observado na Figura 2, sendo que usualmente não apresenta muita dificuldade para
os algoritmos de otimização. A função esférica é definida por: 2
1
1
( ,..., ) ( )n
n i
i
f x x x
sendo
tipicamente implementada no espaço de busca 5.12 5.12nx com mínimo global em
(0,0,...)nx assumindo para esse ponto o valor zero.
Figura 2 - Representação gráfica da função esférica em três dimensões
Fonte: Autor (2011)
2.3.3 Função de Griewank
A função de Griewank , proposta inicialmente por Griewank (1981) tem sido
bastante explorada como função teste em algoritmos de otimização global, sendo definida
25
por: 2
1
1 1
1( ,..., ) 1 cos
4000 1
nni
n i
i i
xf x x x
i
. Este problema pode ser implementado
em n dimensões, apresentando um grande número de mínimos locais, sendo que este número
cresce exponencialmente com n (LOCATELLI, 2003). Tipicamente, a função de Griewank é
definida na literatura com espaço de busca 600 600ix , para 30n apresentando ótimo
global em (0,0,...)nx , onde a função assume o valor zero. O comportamento dessa função
pode ser observado na Figura 3.
Figura 3 - Representação gráfica da função de Griewank em três dimensões
Fonte: Autor (2011)
2.3.4 Função de Rosenbrock
A função de Rosenbrock, definida por 1
2 2 2
1 1
0
( ,..., ) 100( ) ( 1)n
n i i i
i
f x x x x x
, é
um clássico problema de otimização. Inicialmente proposta por Rosenbrock (1960) e
posteriormente generalizada para n variáveis. Esta função tem como característica a
presença de muitos mínimos locais e uma suave variação nas vizinhanças do mínimo global,
tornando o processo de busca árduo para os algoritmos de otimização. A função de
Rosenbrock geralmente é definida pela literatura com o espaço de busca 100 100ix ,
para 30n , como demonstra a Figura 4, a função apresenta mínimo global em zero, quando
(1,1,...)nx .
26
Figura 4 - Representação gráfica da função de Rosenbrock em três dimensões
Fonte: Autor (2011)
2.3.5 Função de Schewefel
Originalmente proposta por Schewefel (1981) e definida por
1
1
( ,..., ) sinn
n i i
i
f x x x x
, esta função apresenta como dificuldade o fato de que o seu
gradiente não é orientado ao longo do seu eixo devido à interação entre suas variáveis, desta
forma os algoritmos que utilizam o gradiente convergem muito lentamente. Normalmente
implementada no espaço n dimensional com intervalo de busca de 500 500nx , com
mínimo global definido por (420.9698, ,420.9698) 0f . A Figura 5 apresenta as
características da função de Schewefel.
Figura 5 - Representação gráfica da função de Schewefel em três dimensões
Fonte: Autor (2011)
27
2.3.6 Função de Ackley
A função de Ackley definida por
2
1
1 1
1 1( ,..., ) 20 20exp 0.2 exp cos(2 )
n n
n i i
i i
f x x e x xn n
, é um problema de
minimização, proposto inicialmente por Ackley (1987), e em seguida generalizado por Bäck
(1996). Sua característica principal é possuir um termo exponencial que cobre sua superfície
com vários mínimos locais, como pode ser observado pela Figura 6. Tipicamente a função
de Ackley é implementada no espaço de busca 32 32nx com mínimo global em
(0,0,...)nx assumindo para esse ponto o valor zero.
Figura 6 - Representação gráfica da função de Ackley em três dimensões
Fonte: Autor (2011)
2.3.7 Função Ruidosa
A função ruidosa definida por 1
4
1
0
( ,..., ) 1 rand[0,1]n
n i
i
f x x i x
, tem como
característica a adição de um ruído randômico uniformemente distribuído na função. Devido
à presença do ruído a função alterna de tempo em tempo, consequentemente o mínimo
global da função também se modifica, fazendo com que o algoritmo retome a exploração
global. Essa característica aleatória atribuída ao mínimo global da função pode ser
observada pela , onde a função é representada com valores randômicos diferentes.
Geralmente implementada no espaço amostral de 1.28 1.28nx , com mínimo global em
(0,0,...)nx assumindo para esse ponto o valor 0 rand[0,1] (ABRAHAM et al., 2009).
28
Figura 7 - Representação gráfica da função ruidosa em três dimensões. (a) com ruído igual a 0, (b) com ruído
igual a 1
(a)
(b)
Fonte: Autor (2011)
2.3.8 Função de Levy
A função de Levy definida por:
5 5
2 2
1 2 1 2 1 2
i=1 j=1
f(x , x ) = i.cos((i-1).x +1) . j.cos((j+1).x + j) + (x +1,42513) + (x + 0,80032) , é
uma função de duas variáveis que, como representa a Figura 8, apresenta no espaço de busca
delimitado por 2[ 10 10]nx aproximadamente 760 mínimos locais e um mínimo global
localizado em 1x = -1,3068 e 2x = -1,4248, onde a função assume 176,14
(PARSOPOULOS; VRAHATIS, 2002).
Figura 8 - Representação gráfica da função de Levy em três dimensões
Fonte: Autor (2011)
29
2.4 PRIMEFACES
De acordo com Prime (2012), PrimeFaces é uma biblioteca de componentes para
Java Server Faces- JSF de código fonte aberto. Luckon et al. (2010) afirma que além de ser
uma das mais completas foi também uma das primeiras a estar totalmente convertida para o
JSF 2.0.
Boekel (2011) afirma que o padrão JSF , utiliza o conceito de componentes para a
criação de interfaces de sistemas web. As taglibs do JSF permitem ao desenvolver trabalhar
com um maior índice de abstração já que encapsulam o uso de tags HTML. Deste modo a
criação de elementos nas páginas web se torna muito mais fácil. Por exemplo, o uso das
tags<table>, <tr> e <td> para construção de tabelas pode ser substituído pelo
componente <h:panelGrid>o qual encapsula toda a mecânica das tags HTML. Boekel
(2011) ressalta que o JSF possui uma API que encapsula o uso de AJAX, permitindo aos
componentes fazer requisições assíncronas ao servidor.
Seguindo esta linha de componentes surgiu o framework PrimeFaces buscando
enriquecer o uso do JSF. O PrimeFaces oferece seus próprios componentes baseados na API
padrão do JSF, além de facilitar o uso de AJAX em aplicações web (BOEKEL, 2011).
De acordo com Prime (2012), todos os seus componentes foram construídos para
trabalhar com AJAX por padrão, logo não é necessário nenhum esforço extra por parte do
desenvolvedor para realizar chamadas assíncronas ao servidor. Além disso, o PrimeFaces dá
suporte a criação de funcionalidades que fazem uso do Ajax Push, o qual permite ao servidor
enviar dados ao navegador do usuário sem que este tenha feito uma requisição.
2.5 GRAPH3D
O componente Graph3D é um gráfico de visualização interativo para desenhar dados
em um gráfico tridimensional. Com ele é possível mover o gráfico e aplicar zoom com
simples movimentos do mouse (CHAP; 2012). A Figura 9 apresenta o gráfico de uma
função tridimensional construída pelo Graph3D.
30
Figura 9 - Representação gráfica da função f(x,y)=sen(x)*cos(y)*50+50
Fonte: Chap (2012)
Segundo Chap (2012), o componente foi desenvolvido para suportar gráficos com até
10.000 pontos sem perder qualidade. É possível executar gráficos gerados pelo componente
em todos os navegadores modernos, sem necessidade de requisitos adicionais. Chap (2012)
ainda afirma que Graph3D foi testado nos seguintes navegadores: Firefox 3.6, Safari 5.0,
Google Chrome 6.0, Opera 10.6 e Internet Explorer 9.
Este componente é parte integrante da biblioteca CHAP links, cuja aplicação é a
visualização baseada em web para exibição de gráficos, redes e cronogramas (CHAP, 2012).
Todos os componentes da biblioteca são desenvolvidos como Google Charts para Javascript
e GWT. Atualmente o projeto é mantido por Almante1, empresa de pesquisa holandesa
especializada em tecnologia da informação e comunicação. O código fonte está
disponibilizado no repositório GitHub2 sob licença Apache 2.0, a qual permite a modificação
e redistribuição dos fontes, desde que atenda suas condições de uso.
2.6 DIRECT WEB REMOTING
Direct Web Remoting (DWR) é uma biblioteca open source escrita em Java, que
permite construir de forma simples e prática aplicações web dinâmicas e interativas
empregando AJAX. Assim, o DWR permite executar via Javascript códigos e funções Java
localizados no servidor como se estivessem rodando no navegador(DIRECT, 2012).
De acordo com DIRECT (2012), a biblioteca possuí uma série de recursos como
chamadas em lote, vinculação de praticamente qualquer estrutura de dados entre Java e
1http://www.almende.com/home 2http://www.almende.github.com/chap-links-library/graph3d.html
31
Javascript, tratamento de exceções, proteção CSRF e integração com várias tecnologias do
lado servidor como Spring e Guice. A Figura 10 apresenta um esquema de funcionamento
do DWR.
Figura 10 - DWR alterando o conteúdo de uma lista após chamada Javascript
Fonte: Direct (2012)
Seguindo o fluxo da troca de mensagens entre o navegador e o servidor web, nota-se
como fica transparente a iteração entre Java e Javascript. No instante em que a função
eventHandler() é executada no navegador, esta acessa um código Java gerenciado pelo
DWR, e por meio de uma função de retorno atualiza o conteúdo da página.
O funcionamento do DWR se dá através da criação dinâmica de arquivos Javascript
baseados em classes Java. O código gerado utiliza Ajax para dar a impressão de que tudo
está acontecendo no navegador, enquanto, na realidade o servidor está executando e o DWR
organizando o fluxo dos dados (DIRECT, 2012). O DWR é composto por duas partes
principais:
a) Um Servlet Java executando no servidor que processa os pedidos e envia as respostas
para o navegador.
b) Código Javascript executando no navegador responsável por enviar solicitações e
atualizar as páginas.
Como Direct (2012) relata, a partir da versão 2.0 a biblioteca DWR permite o uso de
Ajax reverso, possibilitando ao servidor o envio de dados de forma assíncrona para os
navegadores. O DWR suporta três métodos para envio de dados ao navegador: Piggyback,
Polling e Comet. O Polling é a solução mais trivial dentre as demais, este realiza requisições
em intervalos de tempo regulares para verificar se há atualizações para o cliente. Já o Comet
32
permite ao servidor enviar mensagens aos clientes no apenas no momento em que houver
uma atualização. Por fim, o Piggyback mantem as atualizações no servidor e as envia para o
cliente apenas no momento em que o cliente faz uma requisição.
2.7 MATH EVALUATOR
A biblioteca Math Evaluator é parte integrante do projeto GraphingCalculator, cuja
finalidade é criar uma calculadora fonte aberta, multi-plataforma, desktop gráfica com
funcionalidades semelhantes a uma calculadora TI-83(GRAPHING, 2012).O projeto está
hospedado no ambiente de desenvolvimento colaborativo para código aberto Google Project
Hosting.
Segundo Graphing (2012), a biblioteca Math Evaluator permite resolver
expressões matemáticas armazenadas em objetos do tipo String. A expressão pode conter
operadores aritméticos básicos, funções trigonométricas, funções logarítmicas e variáveis. O
Quadro 1 apresenta a lista de operações permitidas pela biblioteca.
Quadro 1 - Operadores disponíveis na biblioteca Math Evaluator
Operação Operador
Adição +
Subtração -
Multiplicação *
Divisão /
Resto da divisão %
Seno sin()
Cosseno cos()
Tangente tang()
Cossecante acos()
Secante asin()
Cotangente atang()
Quadrado sqr()
Raiz quadrada sqrt()
Logaritmo base 10 log()
Logaritmo ln()
Exponencial exp()
Expoente ^ Fonte: Graphing (2012)
Com o conhecimento das operações suportadas pela biblioteca a construção de uma
equação é feita de forma prática. O Quadro 2 apresenta o trecho de código que resolve a
equação .
33
Quadro 2 - Exemplo de utilização da biblioteca Math Evaluator
... IEvaluator evaluator = new MathEvaluator(); int x = 3; int y = 2; evaluator.setExpression("sin(x)^2+cos(y)+2"); evaluator.addVariable("x", x); evaluator.addVariable("y", y); System.out.println("Resultado: " + evaluator.getValue()); ...
Fonte: Autor (2012)
Como mostra o exemplo, a utilização é bastante simples, no entanto, a biblioteca
deixa a desejar quanto à validação da expressão. Da forma em que está implementada, caso
ocorram erros na expressão, não há qualquer forma de tratamento para a exceção ou
tratamento para a mensagem de erro.
2.8 TRABALHOS CORRELATOS
Atualmente existem poucos trabalhos desenvolvidos voltados para a
visualização do processo de otimização do algoritmo de otimização global PSO. A seguir
serão apresentadas as duas ferramentas com este fim mais utilizadas no meio acadêmico,
seguido por uma comparação entre elas.
2.8.1 PsoVis
O PsoVis é uma ferramenta para a visualização do processo de otimização do
algoritmo inteligente PSO. Seu objetivo é ajudar a entender o funcionamento do PSO em
geral, permitindo variar os parâmetros do algoritmo e acompanhar seu comportamento de
forma visual (PSOVIS, 2005).
A aplicação possui cinco funções teste pré-definidas, sendo elas: Rastrigin,
Rosenbrock, Griewank, Sphere e Schaffer f6. Apesar de não permitir a inclusão de novas
funções o sistema permite alterar o espaço solução das existentes. A Figura 11 apresenta a
interface visual do PsoVis (PSOVIS, 2005).
34
Figura 11 - Applet PsoVis minimizando a função de Rosenbrock.
Fonte: Psovis (2005)
De acordo com Psovis (2005), a ferramenta possuí duas implementações do
algoritmo PSO, Constriction e Standard. Apenas a implementação Standard permite alterar
seus parâmetros, sendo eles: peso inercial inicial e final, coeficiente cognitivo e social,
velocidade máxima, número de partículas, número e número máximo de iterações. Como
configurações de função, o PsoVis permite exibir o mínimo global da função, definir o
intervalo de atualização entre as iterações além de interromper e pausar o processo de
otimização. Por fim, a cada iteração os resultados são exibidos na área “Optimization
Progress”, indicado pela letra A na Figura 11.
O laboratório ModLab da Goethe University Frankfurt3, mantém o PsoVis. O
laboratório também é responsável por desenvolver ferramentas de software para aplicação
em bio e quimioinformática. A aplicação está disponível na web em forma de applet no
portal do laboratório. Uma limitação desta ferramenta é que necessita instalação do JRE e da
API Java 3D no computador do usuário.
3 www.uni-frankfurt.de/english/
A
35
2.8.2 Particle Swarm Optimization Visualization
O Particle Swarm Optimization Visualizationou PSO Visualization é uma applet
Java relativamente simples e trivial, que demonstra visualmente um enxame de partículas a
procura de um valor máximo em uma paisagem 3D (PSO VISUALIZATION, 2004). Esta
ferramenta utiliza a implementação adaptative do PSO e requer JRE instalado para executar.
Figura 12 - Particle Swarm Optimization Visualization maximizando um espaço tridimensional
Fonte: Pso Visualization (2004)
A cada execução, a applet gera um novo ambiente de busca aleatório tridimensional,
onde um enxame fixo de doze partículas se movimenta em busca do máximo global, ao
encontrá-lo a execução é interrompida. O enxame ainda pode ser divido em até quatro
vizinhanças topológicas. A execução pode ser efetuada de uma só vez ou passo a passo,
porém, o número máximo de iterações é fixado em 100, e caso o PSO não encontre uma
solução a execução é interrompida.
A visualização das partículas no espaço de busca é simulada por diferentes cores que
exibem a posição atual e anterior das partículas. Vetores entre as partículas representam o
caminho por ela percorrido entre a anterior e atual iteração. Os botões Up, Down, Left e
Right movimentam o espaço de busca (não é permitido mover através do mouse). Por fim,
abaixo dos botões de movimentação são apresentados os resultados da otimização com
número máximo de iterações, máximo global da função, máximo global encontrado pelo
PSO e um campo informando se o máximo foi encontrado ou não.
36
Atualmente o PSO Visualization está hospedado e mantido pela empresa Project
Computing4.A última atualização foi feita em 2004 e o código fonte está disponível junto à
applet (PSO VISUALIZATION, 2004).
2.8.3 Comparativo
No intuito de realizar uma comparação entre as principais ferramentas de
visualização de otimização existentes, alguns recursos do PSOVis e PSO Visualization
foram identificados. O Quadro 3 apresenta um comparativo entre as ferramentas e os
recursos que elas atendem.
Quadro 3 - Comparação entre PSOVis e PSO Visualization
Recurso PSOVis PSO Visualization
Criar função teste
Alterar limites inferiores e superiores da função X
Exibir eixos da função X
Exibir grade da função X
Exibir gráfico com perspectiva isométrica5
Exibir gráfico com sombra
Exibir gráfico com proporção6
Visualizar função em 3D X X
Girar gráfico X X
Aproximar gráfico
Exibir movimentação das partículas X X
Alterar o intervalo de atualização da posição das
partículas X
Alterar os parâmetros do PSO X
Cross-Browser X X
Requer Java 3D instalado X
Requer JRE instalado X X
Permite pausar ou interromper a otimização X
Permite executar passo a passo X
Diferencia a melhor solução do enxame. X X
Exibe o mínimo global da função X
Multi-idioma
Estratégia de implementação do peso inercial Constriction
Standard Standard
Fonte: Autor (2012)
4 http://www.projectcomputing.com/resources/psovis/index.html 5 Perspectiva isométrica é o processo de representação tridimensional em que o objeto se situa num sistema de três eixos coordenados (axonometria). Estes eixos, quando perspectivados, fazem entre si ângulos de 120°:
6Relação proporcional entre altura e largura da imagem.
37
As ferramentas são muito semelhantes, ambas são implementadas em plataforma
Java e disponibilizadas em forma de applet. No entanto, o processo de otimização do
PSOVis busca o mínimo global da função, enquanto o PSO Visualization busca o máximo.
Quanto as funções teste implementadas o PSOVis, apresenta cinco conhecidos problemas de
otimização, ao contrário do PSO Visualization, que apresenta cenários tridimensionais
aleatórios.
Apesar da semelhança, a ferramenta PSOVis apresenta uma série de parâmetros os
quais o PSO Visualization não permite modificar. A interface visual do PSOVis ainda
possibilita ao usuário uma série de funcionalidades como a exibição dos eixos e grade da
função, os quais não estão disponíveis no PSO Visualization.
Ambas as ferramentas funcionam bem nos principais navegadores, Chrome, Firefox,
Internet Explorer, Safari e Opera. Porém, necessitam do JRE instalado na máquina para
funcionar. O PSOVis por sua vez, ainda necessita da API Java 3D para funcionar.
A diversidade, representada pela distância euclidiana entre todas as partículas do
enxame, vem sendo fortemente utilizada para melhorar a capacidade de exploração global
do PSO. Já que em problemas multimodais, o algoritmo pode sofrer com a convergência
prematura, pesquisadores têm investido fortemente em aplicações da diversidade no
algoritmo para amenizar este problema. A seguir apresentam-se os principais trabalhos
relacionados à função diversidade encontrados na literatura.
Zhan et al. (2009) em seu trabalho realiza o cálculo da diversidade das partículas do
enxame através de uma função que mede a distância euclidiana entre todas as partículas, e
utiliza o resultado para tomada de decisão em um estimador de estado evolucionário que
atua sobre o peso inicial combinando exploração, aproveitamento, convergência e jumping
out7. As escolha por algum destes estados é dada por meio de uma classificação Fuzzy. Os
autores realizam testes exaustivos com funções multimodais, no intuito de comprovar a
eficiência da estratégia.
Riget e Vesterstrom (2002) fazem uso de uma função diversidade baseada na
distância euclidiana entre todas as partículas para tentar superar o problema de convergência
prematura. Neste trabalho o vetor que atualiza a velocidade pode assumir a característica de
atrair as partículas quando a diversidade for alta, e de repelir as partículas quando a
7 Técnica utilizada pelo PSO para escapar de mínimos locais que assume posições fora do ponto de
convergência para um determinado número de partículas do enxame.
38
diversidade for baixa, alternando assim entre exploração e aproveitamento. A conclusão dos
autores é de que a estratégia implementada é hábil na busca global das soluções. Lein e
Mohan (2006) assim como Radha e Singh (2007) utilizam estratégias semelhantes em seus
trabalhos.
Olorunda e Engelbrecht (2008) investigam algumas definições de diversidade de
enxames na literatura, com o objetivo de determinar a utilidade destas medidas na
quantificação da exploração e aproveitamento do PSO. Segundo os autores, todas as
estratégias investigadas apresentam alguma incoerência ao relacionar diversidade de enxame
e velocidade das partículas. Contudo, concluem que a investigação do comportamento da
medida da diversidade do enxame na evolução do PSO mostra-se promissora, merecendo
que trabalhos futuros explorem melhor sua utilização.
39
3 DESENVOLVIMENTO
Este capítulo apresenta a proposta de variação do peso inercial para PSO chamada
função diversidade, e a especificação, desenvolvimento e operacionalidade do simulador
proposto PSOView.
3.1 FUNÇÃO DIVERSIDADE
Esta seção apresenta a proposta de estratégia para variação do peso inercial, chamada
função diversidade.
Estratégias de variação do peso inercial estão diretamente relacionadas à eficiência
do PSO no seu processo de busca. Um valor de peso inercial baixo aumenta as habilidades
de convergência do algoritmo, enquanto um valor alto proporciona uma maior exploração do
espaço solução. Deste modo, é fundamental que a variação deste parâmetro seja coordenada
por uma heurística eficiente.
Fatores como a dimensão do problema e tamanho do espaço solução influenciam
diretamente na relação exploração/convergência do algoritmo. Deste modo, estratégias que
utilizam o número de iterações como a de Jiao, Lian e Gu (2008), podem ser eficientes mas
não tão eficazes. Pois mesmo em problemas com baixa dimensão e espaço solução
relativamente pequeno, o algoritmo levará um número elevado de iterações para convergir
par uma solução, já que o peso inercial diminui em relação ao fator iteração.
Aumentar as habilidades de convergência e exploração do algoritmo nos mais
distintos problemas e configurações motivou esta pesquisa. Observando as iterações iniciais
do algoritmo percebe-se a alta dispersão entre as partículas, enquanto ao fim do processo de
busca as partículas estão bastante densas. Logo, utilizar o fator diversidade na estratégia de
variação se mostrou uma boa opção, ao contrário das estratégias como de Jiao, Lian e Gu
(2008) permite que o algoritmo após um processo de convergência para uma mínimo local
retorne a explorar o espaço solução na busca do mínimo global.
Neste trabalho, considerou-se diversidade, a distância euclidiana média entre todas as
partículas do enxame e a melhor partícula global até então encontrada. A Equação 3
apresenta o cálculo da diversidade. Este cálculo representa o somatório ponderado das
diferenças entre todas as partículas do enxame e a melhor partícula global, divido pela
quantidade de partículas do enxame.
40
2
1 1
1.
.
S Nk
i g
i k
D x pS
(3)
Onde D representa a diversidade encontrada, S o tamanho da população do enxame, N a
dimensão do problema, k
ix uma partícula k do enxame egp a melhor partícula até então
encontrada.
Após o cálculo da diversidade, para facilitar a utilização do peso inercial, realiza-se
uma normalização por meio da Equação (4).
min
minmáx
D Di
D D
(4)
Onde, Dmin = 10-3
sendo definido como densidade mínima, Dmax é a maior diversidade
encontrada ao longo das iterações e i um valor entre 0 e 1. Em seguida, aplica-se o valor
encontrado em i na Equação (5).
0.86( ) 0,4.e iw i (5)
Esta equação irá retornar o valor do peso inercial, sendo este um valor entre 0,4 e 0,9.
Considera-se este intervalo assumindo que 0,4 garante uma boa taxa de convergência e 0,9
boa taxa de exploração. A Figura 13 ilustra a curva de variação do peso inercial em função
da diversidade.
Figura 13 - Curva de variação do peso inercial para a função diversidade
Fonte: Autor (2012)
Aplicando-se a função diversidade no cálculo do peso inercial se obtêm um valor
próximo de 0,4 sempre que as partículas estiverem muito próximas do melhor global e
próximo de 0,9 sempre que estiverem muito dispersas. Nota-se na Figura 13 que a variação
do w não é linear, isto se dá para garantir que o algoritmo não sofra com a convergência
prematura.
41
Sua aplicação no PSO é feita no mesmo momento que as demais estratégias de
variação do peso inercial. A Figura 14 demonstra o fluxo de funcionamento do PSO e sua
relação com a diversidade.
Figura 14 - Fluxo de funcionamento do PSO com a função densidade
Fonte: Autor (2012)
Durante as iterações PSO após o cálculo das soluções das partículas calcula-se a
função diversidade, representada pelo retângulo em destaque na Figura 14. Em seguida
atualiza-se a nova posição e velocidade de todas as partículas do enxame, com o peso
inercial calculado em função da diversidade.
3.2 ESPECIFICAÇÃO
Esta seção apresenta de forma detalhada os requisitos, casos de uso e
protótipos visuais levantados para o simulador bem como seus diagramas de classe e
sequência.
act UC02 - Criar Função
Criar enxame
inicial
Velocidade e
posição inicial
aleatória
Defini-se melhor
local e global
inicial
Calcula soluções
encontradas
Atualiza posição
e v elocidade
Novo melhor local/
global é melhor?Atualiza melhor
local/global
Critério de parada?Solução melhor
global
Calcula a
div ersidade e
atualiza o peso
inercial
Início
Fim
[Não]
[Sim]
[Não]
[Sim]
42
3.2.1 Requisitos
O simulador proposto neste trabalho deve oferecer um ambiente de testes completo,
flexível e multi-idioma, para avaliar o desempenho do PSO nas mais diversas situações.
Deve ainda possibilitar o ajuste dos parâmetros do algoritmo e função teste. Quanto às
funções teste, deve-se ainda possibilitar selecionar uma função pré-definida, ou construir
uma nova a partir de uma expressão matemática. O sistema deve ser executado diretamente
em um navegador web sem a necessidade de instalação de recursos ou bibliotecas adicionais.
A visualização do gráfico, deve permitir ao usuário sua interação com o sistema durante
todo o processo de otimização a fim de melhor adequar a sua visualização. Ao fim do
processo, o simulador deve fornecer ao usuário os principais resultados do processo. O
simulador ainda deverá oferecer ao usuário a implementação da estratégia de diversidade,
proposta neste trabalho, para fins de comparação com estratégias de variação de peso
inercial já conhecidas, como a de Jiao, Lian e Gu (2008).
A partir destas necessidades, o Quadro 4 apresenta a lista de regras de negócio
identificadas para o sistema. Cada regra de negócio está vinculada a pelo menos um
requisito funcional dos quais são listados no Quadro 5.
Quadro 4 - Regras de negócio da aplicação
Regra Descrição
RN-01 O sistema terá as seguintes funções implementadas: Ackley, Alpine, Griewank,
Rastrigin, Rosenbrock, Schaffer's f6, Schwefel, Sphere e Tripod.
RN-02 Os seguintes parâmetros poderão ser ajustados: Limitante superior e inferior.
RN-03 As seguintes funções e operações poderão ser utilizadas na construção da
equação: +, -, *, /, %, ^, sin(), cos(), tang(), acos(), asin(), tan(), sqrt(), sqr(),
ln(), exp() e log().
RN-04 Apenas poderão ser utilizadas variáveis x e y.
RN-05 A visualização deverá ser em 3 dimensões.
RN-06 Os seguintes eventos serão permitidos: aproximar, distanciar e girar em todos
os sentidos.
RN-07 Serão estratégias de implementação do peso inercial: função de Jiao, Lian e Gu
(2008) e função diversidade (proposta neste trabalho).
RN-08 Os seguintes parâmetros do algoritmo poderão ser ajustados: número máximo
de iterações, número de partículas do enxame, coeficientes cognitivo e social,
peso inercial inicial e final e critério de parada (erro).
RN-09 Os seguintes idiomas estarão disponíveis: Português do Brasil e Inglês dos
EUA.
RN-10 O idioma padrão deverá ser Português do Brasil.
Fonte: Autor (2012)
43
O Quadro 5 apresenta os requisitos funcionais identificados para o sistema. A lista
relaciona cada requisito funcional com sua(s) regra(s) de negócio, quando ele a(s) possui.
Quadro 5 - Requisitos Funcionais da aplicação
Requisito Descrição Regras de
negócio
RF-01 O sistema deve permitir selecionar uma função pré-existente. RN-01;
RF-02 O sistema deve permitir ajustar os parâmetros da função. RN-02;
RF-03 O sistema deve permitir criar funções. RN-03; RN-04;
RF-04 O sistema deve permitir visualizar funções. RN-05; RN-06;
RF-05 O sistema deve permitir exibir os eixos da função. RN-05; RN-06;
RF-06 O sistema deve permitir exibir a grade da função
RF-07 O sistema deve permitir exibir o gráfico com perspectiva
isométrica.
RF-08 O sistema deve permitir exibir o gráfico da função com sombra.
RF-09 O sistema deve permitir ou não manter a proporção entre os
eixos x e y da função.
RF-10 O sistema deve permitir escolher a estratégia de implementação
do peso inercial.
RN-07;
RF-11 O sistema deve permitir ajustar os parâmetros do algoritmo de
otimização
RN-08;
RF-12 O sistema deve permitir executar a otimização da função.
RF-13 O sistema deve permitir a movimentação das partículas do
enxame durante a otimização
RF-14 O sistema deve permitir definir o intervalo de tempo entre as
movimentações do enxame no gráfico.
RF-15 O sistema deve permitir visualizar os resultados da otimização
da função.
RF-16 O sistema deve permitir alterar o idioma. RN-09; RN-10;
Fonte: Autor (2012)
O Quadro 6 apresenta a lista de requisitos não funcionais identificados para este
sistema.
44
Quadro 6 - Requisitos não Funcionais da aplicação
Requisito Descrição
RNF-01 O sistema deve executar em plataforma web.
RNF-02 O sistema deve executar nos navegadores Chrome 2.0, Firefox 3.6 e Internet
Explorer 9.0.
RNF-03 O sistema deve utilizar HTML5, Javascript e Graph3D para visualização das
funções.
RNF-04 O sistema utilizará arquitetura em camadas.
RNF-05 O sistema deve utilizar Java para executar no lado do servidor.
RNF-06 O sistema deve executar no servidor GlassFish 3.1.2.
RNF-07 O sistema deve utilizar a biblioteca Math Evaluator para construção das
funções.
RNF-08 O sistema deve utilizar a biblioteca de componentes ricos PrimeFaces 3.4.
RNF-09 O sistema deve utilizar o framework DWR 3.1 para comunicação AJAX
Fonte: Autor (2012)
3.2.2 Casos de Uso
Para o sistema PSOView foram identificados os casos de uso apresentados no
diagrama da Figura 15.
Figura 15 - Diagrama de casos de uso do sistema
Fonte: Autor (2012)
uc Casos de Uso
PSOView
Usuário
(from Atores)
UC02 - Visualizar
Otimização
UC03 - Criar Função
UC01 - Alterar Idioma
«extend»
45
Os casos de uso UC01, UC02 estão diretamente relacionados com o ator Usuário,
pois podem ser diretamente acionados. Ao contrário do UC03 o qual é entendido e
opcionalmente invocado pelo UC02.
Para o sistema PSOView, identificou-se apenas um ator, denominado Usuário. O ator
Usuário é qualquer pessoa que de fato tem acesso web a aplicação e a operacionaliza.
Uma funcionalidade muito simples, mas que é um diferencial contra as demais
ferramentas de otimização que utilizam o PSO, é a possibilidade de alterar o idioma do
sistema, capturada pelo UC01. O Quadro 7 apresenta a descrição deste caso de uso.
Quadro 7 - UC01 - Alterar idioma
UC01 Alterar Idioma
Descrição O usuário altera o idioma da aplicação.
Atores Usuário.
Pré-Condições O usuário ter acessado a aplicação.
Pós-Condições Idioma do sistema alterado.
Requisitos RF-16; RN-09; RN-10.
Fluxo Principal
1. O sistema PSOView apresenta ao Usuário as opções de idioma.
2. O Usuário seleciona o idioma desejado no sistema PSOView.
3. O sistema PSOView altera o idioma e apresenta ao Usuário.
Fonte: Autor (2012)
A principal funcionalidade deste sistema é a otimização de função teste. Desta forma,
o ator Usuário poderá ajustar os diversos parâmetros tanto da função quanto do algoritmo
para assim, observar de forma visual o processo de otimização. O Quadro 8 apresenta este
recurso com maiores detalhes.
46
Quadro 8 - UC02 - Visualizar otimização
UC02 Visualizar Otimização
Descrição O usuário otimiza uma função no sistema PSOView.
Atores Usuário.
Pré-Condições O usuário ter acessado a aplicação.
Pós-Condições Função teste otimizada.
Requisitos
RF-01; RF-03; RF-04; RF-05; RF-06; RF-07; RF-08; RF-09; RF-10;
RF-11; RF-12; RF-13; RF-14; RF-15; RN-01; RN-05; RN-06; RN-07;
RN-08; RN-11.
Fluxo Principal
1. O sistema PSOView apresenta as opções de configuração ao
Usuário.
2. O Usuário configura os parâmetros e a função a ser otimizada no
sistema PSOView.
3. O sistema PSOView valida os parâmetros, constrói a função e
apresenta ao Usuário.
4. O Usuário define os parâmetros de execução do algoritmo de
otimização no sistema PSOView.
5. O sistema PSOView valida os parâmetros, executa o algoritmo de
otimização e apresenta os resultados ao Usuário.
6. O Usuário visualiza as etapas do processo de busca até o
algoritmo satisfazer o critério de parada no sistema PSOView.
Fluxo Alternativo
2.1 Função definida pelo usuário selecionada
2.1.1 <Extend> UC-03 Criar Função.
6.1. Manipular Visualização
6.1.1. Usuário ajusta a posição da equação no sistema PSOView.
6.1.2. O sistema PSOView apresenta a equação ajustada ao
Usuário.
Exceções
3.1. Parâmetros da Função Inválidos
3.1.1. O sistema PSOView informa o(s) parâmetro(s)
inválido(s) da função ao Usuário.
3.1.2. O Usuário retorna para o passo 2 no sistema PSOView.
5.1. Parâmetros do Algoritmo inválidos.
5.1.1. O sistema PSOView informa o(s) parâmetro(s)
inválido(s) do algoritmo.
5.1.2. O Usuário retorna para o passo 4 no sistema PSOView.
Fonte: Autor (2012)
O Quadro 9 apresenta uma funcionalidade que pode ser opcionalmente executada
pelo UC02. Este recurso do sistema permite ao Usuário criar funções teste a partir de uma
47
expressão matemática. Além da expressão esta funcionalidade ainda permite alterar as
configurações de domínio da função.
Quadro 9 - UC03 - Criar função
UC03 Criar Função
Descrição Função teste criada a partir de uma expressão.
Atores Usuário.
Pré-Condições O usuário seleciona a função definida pelo usuário.
Pós-Condições Função teste criada.
Requisitos RF-01; RF-02; RF-03; RN-01; RN-02; RN-03; RN-04.
Fluxo Principal
1. O sistema PSOView apresenta o campo para o Usuário inserir a
expressão.
2. O Usuário informa a expressão e a envia ao sistema PSOView.
3. O sistema PSOView valida, constrói e exibe a função ao Usuário.
Exceções
3.1. Função Inválida
3.1.1. O sistema PSOView apresenta a mensagem de erro ao
Usuário.
3.1.2. O Usuário confirma a visualização da mensagem no
sistema PSOView.
3.1.3. O sistema PSOView retorna para o Usuário a execução.
Fonte: Autor (2012)
3.2.3 Protótipos Visuais
Para o sistema PSOView, projetou-se uma interface web que permita ao usuário
fazer uso de todos os recursos do sistema em uma única página. A Figura 16 apresenta o
protótipo desenvolvido na ferramenta de prototipação iPlotz.
48
Figura 16 - Protótipo visual para o sistema PSOView
Fonte: Autor (2012)
A interface é bastante simples e intuitiva. No lado esquerdo estão dispostos todos os
parâmetros e configurações referentes às funções testes. O lado direito apresenta todos os
parâmetros e configurações referentes ao algoritmo PSO, além dos botões Iniciar e
Resultados. Já a parte central da interface, possui o objeto que apresentar de forma visual a
função e o algoritmo em execução. Por fim, o cabeçalho é composto na sua esquerda pelo
logotipo do sistema, e a direita pelas opções de idiomas disponíveis.
3.2.4 Diagrama de Classes
Esta seção apresenta os diagramas de classes do sistema PSOView. Para uma melhor
visualização, as classes apresentados a seguir exibem apenas seus atributos .No entanto,
deduz-se existirem todos os métodos assessores necessários. O modelo de classes foi
organizado em oito pacotes distintos. A Figura 17 apresenta o diagrama de pacotes de
classes com as respectivas dependências entre os pacotes.
49
Figura 17 - Diagrama de pacotes de classe
Fonte: Autor (2012)
O funcionamento do sistema está concentrado em quatro pacotes principais, são eles:
function, core, bean e dwr. O pacote function, como mostra a Figura 18,
contém as classes e a interface que tornam a estrutura da aplicação flexível para criar
funções teste, sendo elas definidas por meio de uma expressão ou não.
50
Figura 18 - Diagrama de classes do pacote function
Fonte: Autor (2012)
A interface IFunction possui os métodos acessores que são implementados pela
classe Function. Os métodos getYlow() getYup, setYlow(double ylow) e
setYup(double yup) são os métodos acessores para o atributo que armazena os limites
superiores e inferiores da função. Já os métodos getDescricao() e
setDescricao(String descricao)acessam a String que contém a descrição da
função. O método eval(Particle p) por sua vez, possui a assinatura para o método
que irá calcular o valor da solução de um Particle, retornando-o em um tipo double.
A classe abstrata Function possui os atributos descricao, yLow e YLow
além da implementação de seus respectivos métodos acessores listados na interface
IFunction. Esta classe é estendida pela classe UserDefined e demais classes
existentes no pacote test. As classes PSOBean e PSO utilizam esta classe para definir o
tipo função teste que pode ser otimizado pelo sistema.
A classe UserDefined implementa o método eval(Particle p) permitindo
a criação de funções definidas pelo usuário por meio de uma expressão matemática. O
pacote MathEvaluator contém as classes responsáveis por calcular o valor de uma
class function
Serializable
Function
- descricao: String = ""
- yLow: double = 0d
- yUp: double = 0d
+ equals(Object) : boolean
+ getDescricao() : String
+ getYLow() : double
+ getYUp() : double
+ hashCode() : int
+ setDescricao(String) : void
+ setYLow(double) : void
+ setYUp(double) : void
«interface»
IFunction
+ eval(Particle) : double
+ getDescricao() : String
+ getYLow() : double
+ getYUp() : double
+ setDescricao(String) : void
+ setYLow(double) : void
+ setYUp(double) : void
Serializable
UserDefined
- evaluator: MathEvaluator = new MathEvaluator()
+ eval(Particle) : double
+ getEvaluator() : IEvaluator
+ setEvaluator(MathEvaluator) : void
+ UserDefined(String)
Serializable
java.util.Observer
bean::PSOBean
java.util.Observable
Serializable
core::PSO
Serializable
test::Ackley
Serializable
test::Alpine
Serializable
test::Griewank
Serializable
test::Rastrigin
Serializable
test::Rosenbrock
Serializable
test::Schaffer
Serializable
test::Schwefel
Serializable
test::Sphere
Serializable
test::Tripod
0..*
Otimiza
-funcao1
1..*
Mantém
-function1..*
1Util iza-pso
1..*
51
expressão matemática. A Figura 19 apresenta as classes do pacote MathEvaluator e sua
relação com a classe UserDefined. Todas as classes do pacote MathEvaluator
formam retirados da biblioteca Math Evaluator.
Figura 19 - Pacote de classes MathEvaluator
Fonte: Autor (2012)
A classe MathEvaluator implementa os métodos contidos na interface
IEvaluator, entre eles os métodos acessores do atributo expression o qual contém a
String com a expressão matemática que será calculada pelo método getValue(),cujo
retorno é um tipo Double. A classe ainda permite utilizar variáveis na construção de
expressões, as quais são armazenadas no HashMap variables junto ao seu respectivo
valor.
Ainda na Figura 17, o pacote core armazena todas as classes responsáveis por
implementar a estrutura do algoritmo PSO. A Figura 20 apresenta as classes que compõem o
pacote core e sua relação com os demais pacotes.
class MathEv aluator
«interface»
IEv aluator
+ DEGREES: int = 2 {readOnly}
+ GRADIANS: int = 3 {readOnly}
+ RADIANS: int = 1 {readOnly}
+ addVariable(String, Double) : void
+ getAngleUnits() : int
+ getExpression() : String
+ getValue() : Double
+ getVariable(String) : Double
+ setAngleUnits(int) : void
+ setExpression(String) : void
Serializable
MathEv aluator
- angleUnits: int = IEvaluator.RADIANS
- expression: String = null
- node: Node = null
- operators: Operator ([]) = null
- variables: HashMap = new HashMap()
MathEv aluator::Node
+ nLeft: Node = null
+ nLevel: int = 0
+ nOperator: Operator = null
+ nParent: Node = null
+ nRight: Node = null
+ nString: String = null
+ nValue: Double = null
MathEv aluator::Operator
- op: String
- priority: int
- type: int
Function
Serializable
function::UserDefined
- evaluator: MathEvaluator = new MathEvaluator()
1
Assume
+nOperator
1..*1
Contém
-variables
1..*
1
Contém
#operators
1..*
1Util iza
-evaluator 1..*
52
Figura 20 - Pacotes de classes core
Fonte: Autor (2012)
A classe Particle possuí a estrutura para representar uma partícula do enxame. O
atributo posicao armazena um vetor de double com o valor das coordenadas da
partícula. Já o atributo velocidade armazena a velocidade de cada coordenada do
atributo posicao. Por fim, o atributo fitness registra o refinamento da partícula.
A Interface Swarm possui a assinatura dos dois métodos fundamentais para o
funcionamento do algoritmo PSO. Estes métodos são implementados pela classe PSO, onde
o método run() executa o algoritmo e o método updateW(int type) atualiza o peso
inercial em função da estratégia definida. Dentre os diversos atributos da classe, que são em
sua maioria parâmetros de configuração do algoritmo PSO e serão detalhados na seção de
implementação, destaca-se o funcao e enxame. Sendo que o primeiro representa a função
teste que será otimizada e o segundo o enxame de partículas do algoritmo. Neste trabalho, o
algoritmo foi estruturado para otimizar problemas tridimensionais. Porém a estrutura tanto
da função teste quanto do algoritmo está implantada para resolver problemas em um espaço
n dimensional.
Implementou-se o padrão Observer entre PSO e PSOBean para garantir que a cada
atualização do vetor posição das partículas do enxame, seja possível atualizar as novas
posições no gráfico do navegador durante a execução do PSO. Assim, o PSO estende os
métodos da classe Observable os quais notificam a classe PSOBean que implementa o
class core
Serializable
Particle
- fitness: Double
- posicao: double ([])
- velocidade: double ([])
java.util.Observable
Serializable
PSO
- bestEnxame: List<Particle>
- c1: double = 1.2
- c2: double = 1.2
- dmax: double = 0d
- dmin: double = 0.0001
- enxame: List<Particle>
- eps: double = 0.001
- fstar: double ([])
- funcao: Function
- gBest: Particle
- inertialFunction: int = 1
- kiter: int = 1
- lBest: Particle
- n: int
- ncall: int = 0
- niter: int = 100
- nps: int = 4
- npt: int
- random: Random = new Random()
- vMax: double
- w: double
- wf: double = 0.2
- wi: double = 0.9
«interface»
Swarm
+ run() : void
+ updateW()(int) : void
Serializable
java.util.Observer
bean::PSOBean
- ajax: PSOAjax = null
- contador: int = 0
- currentExpression: String = "x*y"
- currentLanguage: String
- delay: int = 80
- dwrId: String
- expressions: List<String>
- function: Function
- functions: List<Function>
- language: List<String>
- pso: PSO
Serializable
function::Function
- descricao: String = ""
- yLow: double = 0d
- yUp: double = 0d
0..*
Otimiza
-funcao
1
1..*
Mantém
-function 1..*
1
Util iza-bestEnxame
1..*
1
Util iza-enxame
1..*
1
Mantém-pso
1..*1
Util iza+gBest
1..*
1
Util iza+lBest
1..*
53
método update() da interface Observer. Este método é responsável por executar uma
ação sempre que o PSO notificá-lo que ocorreu uma atualização.
Além do pacote core, a classe PSOBean do pacote bean ainda se comunica com
outros dois pacotes, são eles: converter e dwr. A Figura 21 apresenta o pacote de classes
bean e sua relação com os demais.
Figura 21 - Pacote de classes bean
Fonte: Autor (2012)
A classe FunctionConverter do pacote function é responsável por fazer a
conversão dos Objects do tipo Function para String e vice e versa. Este conversor
é utilizado pelo PSOBean quando os objetos Function são transmitidos para as páginas
XHTML.
Finalmente a classe PSOAjax do pacote dwr possui todos os métodos responsáveis
por executar requisições AJAX síncronas e assíncronas da classe PSOBean e arquivos
JavaScript localizados no cliente. Esta implementação foi necessária para permitir a
comunicação entre o Javascript e servidor, durante o processo de construção do gráfico e
atualização da posição das partículas.
3.2.5 Diagramas de Sequência
Esta seção apresenta os diagramas de sequência identificados para o sistema
PSOView afim de ilustrar a colaboração entre os objetos ao longo do tempo. São
class bean
Serializable
java.util.Observer
PSOBean
- ajax: PSOAjax = null
- contador: int = 0
- currentExpression: String = "x*y"
- currentLanguage: String
- delay: int = 80
- dwrId: String
- expressions: List<String>
- function: Function
- functions: List<Function>
- language: List<String>
- pso: PSO
Converter
Serializable
conv erter::FunctionConv erter
- psoBean: PSOBean
java.util.Observable
Serializable
core::PSO
Serializable
dwr::PSOAjax
- wc: WebContext {readOnly}
1
Util iza
-psoBean
9..*
1
Contém-ajax
1
1
Mantém -pso
1..*
54
apresentados os diagramas de sequência para os casos de uso visualizar otimização e
construir função.
3.2.5.1 Visualizar Otimização
Para o caso de uso UC02 visualizar otimização identificou-se o diagrama de
sequencia ilustrado pela Figura 22. Ao acessar o sistema PSOView, os objetos psoBean e
psoAjax são instanciados. Em seguida, com a função teste seleciona e parâmetros do PSO
informados, o sistema realiza a validação dos parâmetros e o Usuário executa a otimização.
Nesse momento o objeto pso é instanciado com dimensão fixa 2, número de partículas que
irão compor a critério de parada e função teste informadas pelo Usuário. Em seguida o
método run() do pso o laço de repetição da otimização.
Figura 22 - Diagrama de sequencia para UC02 Visualizar Otimização
Fonte: Autor (2012)
sd UCR 02 - Visualizar Otimização
formDados
psoBean
:PSOBean
Usuário
(from Atores)
pso :PSO
psoAjax
:PSOAjax
loop processo de otimização
[niter > kiter OR erro < soma]
acessa o sistema()
psoBean= PSOBean()
psoAjax= PSOAjax()
informa os parâmetros do PSO()
parâmetros validados()
executa a otimização()
optimize()
pso= PSO(2, npt, function)
run()
atualizarPosicao()
calculaRefinamento()
notifyObserers()update(pso, arg)
updateDataPoints(positions, sleep)
drawParticles(positions)
atualizaMelhorPosicao()
calculaErro()
exibe os resultados()
55
No início do processo de otimização a posição das partículas do enxame é atualizada
pelo método atualizaPosicao(), caso seja a primeira iteração a posição inicial é
definida de forma aleatória. Após a atualização o método
calculaRefinamento()calcula a solução de cada partícula. Em seguida o método
notifyObservers() notifica o observador psoBean que há uma atualização no
enxame. O psoBean por sua vez executa o método update() o qual recebe por
parâmetro o objeto pso e envia o vetor positions com as posições do enxame junto ao
intervalo de atualização sleep para o objeto psoAjax. O psoAjax por sua vez realiza
uma requisição Ajax reverso para o método Javascript drawParticles()enviado o
vetor positions. O método drawParticles() por sua vez desenha a posição das
partículas no gráfico da função. Em seguida o objeto pso atualiza o valor da melhor solução
do enxame pelo método atualizaMelhorPosicao() e efetua o calculo do erro pelo
método calculaErro(). Este laço se repete enquanto o erro da iteração for maior que
definido ou o número de iterações for menor que o número máximo informado.
Após o termino da execução do método run() os resultados da otimização são
informados ao usuário.
3.2.5.2 Construir função
Para o caso de uso UC03 Construir Função, identificou-se o diagrama de
sequência ilustrado pela Figura 23. No instante em que o usuário informa a expressão para o
sistema, o objeto psoBean por meio de seu método validateExpression() valida a
expressão e caso verdadeiro, cria um objeto funcaoDefinida a qual irá calcular o valor
da função para todos os pontos que irão compor o gráfico. Estes pontos são representados
por objetos do tipo Particle. Em seguida o sistema retorna para o usuário a visualização
da função.
56
Figura 23 - Diagrama de sequência para UC03 Criar Função
Fonte: Autor (2012)
3.3 IMPLEMENTAÇÃO
Nesta seção apresentam-se os itens mais importantes do desenvolvimento do
simulador bem como a implementação da estratégia de variação do peso inercial do PSO em
função da diversidade.
3.3.1 Técnicas Utilizadas
A ferramenta foi desenvolvida em linguagem de programação Java, com auxílio do
ambiente de desenvolvimento integrado NetBeans 7.2.1 e JDK 1.7. O sistema operacional
utilizado foi Windows 7.
A interface gráfica foi desenvolvida com o framework JSF e componentes da
biblioteca de componentes ricos PrimeFaces 3.4. Utilizou-se como tema para layout o
componente hot-sneaks versão 1.0.8 do PrimeFaces.
Para executar as requisições AJAX reverso e requisições AJAX efetuadas por
arquivos Javascript, utilizou-se a biblioteca DWR versão 3.1RC1.
A aplicação desenvolvida e testada para rodar no servidor GlassFish versão 3.1.
necessitando de algumas configurações adicionais para permitir execução de requisições
AJAX tipo Comet.
sd UCR 03 - Construir Função
formDados
funcaoDefinida
:UserDefined
psoBean
:PSOBean
Usuário
(from Atores)
particula :Particle
seleciona a função()
exibe a entrada da expressão()
informa a expressão()
validateExpression()
funcaoDefinida= UserDefined(curretExpression) :UserDefined
particula= Particle(2)
eval(particula)
boolean()Double()
drawVisualization()
57
Para construção gráfica das funções utilizou-se como base a biblioteca Javascript
Graph3D, sofrendo adaptações para se adequar ao problema proposto. O cálculo das
expressões matemáticas foi feito através da biblioteca Math Evaluator. Como ambiente de
testes utilizou-se os principais navegadores, sendo eles: Google Chrome versão 22.0.1,
Mozilla Firefox 15.0.1, Internet Explorer 9, Opera 12.02 e Safari 6.
3.3.2 Estrutura do Projeto
Antes de apresentar a implementação do projeto se faz necessário compreender a
estrutura em que o projeto Java Web foi desenvolvido. Para facilitar o desenvolvimento do
simulador foi desenvolvida a estrutura apresentada pela Figura 24.
Figura 24 - Estrutura do Projeto PSOView
Fonte: Autor (2012)
A pasta Páginas Web contém a página xhtml do sistema, além de um diretório
de pastas. Deste diretório, a pasta META-INF contém o arquivo contexto.xml, o qual
armazena entre outros dados o contexto da aplicação. A pasta WEB-INF possui todos os
arquivos xml de configuração do sistema, como: dwr.xml, faces-config.xml,
glassfish-web.xml e web.xml.Por fim, a pasta resources contém um de diretório
de pastas para armazenar os arquivos .css, .js e imagens do sistema em geral. Os
arquivos javascript serão melhor abordados no decorrer deste trabalho.
58
O Pacotes de Códigos-fonte além de armazenar todas as classes e pacotes
de classes descritos do item 3.2.4, ainda armazena os arquivos de idiomas do sistema. O
pacote br.udesc.psoview.internationalization contém os arquivos de
idioma do sistema, i18n_pt_BR.properties e i18n_en_US.properties são
armazenam as propriedades tanto em português e inglês respectivamente.
O Pacotes de Testes por sua vez armazena os casos de testes criados com o
JUnit para testar o algoritmo PSO durante sua implementação. Ainda possui casos de teste
para as expressões matemáticas calculadas pelo MathEvaluator.
A pasta Bibliotecas armazena todas as bibliotecas utilizadas pelo sistema. São
bibliotecas utilizadas pelo sistema: primefaces-3.4.jar, hot-sneaks-1.0.8,
dwr3_rc1.jar, commons-logging-1.1.1.jar e javax.faceds.jar. Já o
pacote Bibliotecas de Testes armazena as bibliotecas JUnit utilizadas nos casos
de teste.
Por fim, o pacote Arquivos de Configuração centraliza todos os arquivos de
configuração .xml do sistema, inclusive referência para os arquivos citados na pasta WEB-
INF.
3.3.3 Implementação do PSO
O algoritmo de otimização global PSO, utilizado para minimização de função neste
trabalho, teve sua implementação baseada na estratégia proposta por Jiao, Lian e Gu (2008).
Para adaptar o pseudocódigo proposto a linguagem de programação Java utilizada
neste trabalho, desenvolveu-se uma estrutura que permitisse utilizar o algoritmo em um
espaço n dimensional e não apenas tridimensional como é utilizado no simulador PSOView.
O pacote de classes core descrito no seção3.2.4 apresenta com detalhes o relacionamento
entre as classes PSO, Particle e Function, responsáveis pelo funcionamento do
algoritmo.
Seguindo a estrutura proposta, a definição da dimensão em que o algoritmo irá
funcionar deve ser obrigatoriamente definida no método construtor da classe PSO. O Quadro
10 apresenta a implementação do método construtor.
59
Quadro 10 - Método construtor da classe PSO
Fonte: Autor (2012)
O método recebe três parâmetros, n, npt e function os quais representam
respectivamente a dimensão, quantidade de partículas do enxame e função teste a ser
otimizada. Além de inicializar estes parâmetros, todos os objetos do tipo Particle são
instanciados neste momento em função dos parâmetros informados.
Ao instanciar um objeto do tipo Particle deve-se informar obrigatoriamente a
dimensão em que está partícula irá operar. Desta forma instanciam-se os vetores posicao
e velocidade com n referentes à dimensão do problema em que irão se movimentar.
De posse de todos os seus atributos instanciados, para que o algoritmo inicie
processo de otimização basta que seja executado o método run().Durante sua execução o
refinamento de cada partícula é calculado pelo método eval() da função teste.
Este método abstrato da classe abstrata Function possui uma implementação
diferente para cada função teste. Enviando uma partícula por parâmetro ao método, este irá
calcular o fitness da partícula em função do tamanho de seu vetor posição. Desta
forma se a função permitir sua representação em um espaço n dimensional, quem irá definir
a dimensão do problema será a partícula e não a função.
O atributo w da classe PSO representa o peso inercial atual do algoritmo. Este peso é
alterado de acordo com a estratégia de implementação definida. O algoritmo possui duas
opções de função. A estratégia proposta por Jiao, Lian e Gu (2008) e a função diversidade
proposta neste trabalho. O Quadro 11 apresenta a implementação da função diversidade.
public PSO(int n, int npt, Function function) { funcao = function; this.n = n; this.npt = npt; lBest = new Particle(n); lBest.setFitness(null); gBest = new Particle(n); gBest.setFitness(null); fstar = newdouble[nps]; vMax = ((this.funcao.getYUp() - this.funcao.getYLow()) / 2); for (int i = 0; i <nps; i++) { fstar[i] = 10000d; } for (int i = 0; i < npt; i++) { Particle p = new Particle(n); enxame.add(p); p = new Particle(n); bestEnxame.add(p); } enxame = bestEnxame;
}
60
Quadro 11 - Implementação da função diversidade. private void wDiversity2() {
double s1 = 0; double dg = 0; double fi; for (int i = 0; i < npt; i++) { for (int j = 0; j < n; j++) { s1 += Math.pow((enxame.get(i).getPosicao()[j] - gBest.getPosicao()[j]), 2); } dg += Math.sqrt(s1); s1 = 0; } dg /= this.npt; if (dg < dmin) { dmin = dg; } elseif (dg > dmax) { dmax = dg; } fi = ((dg - dmin) / (dmax - dmin)); w = 0.4 * Math.exp(0.86 * fi);
}
Fonte: Autor (2012)
A implementação da função diversidade segue todos os princípios mencionados na
seção 3.1.
3.3.4 Implementação Javascript
Este tópico apresenta como ocorreu à implementação da interface gráfica da função
teste e atualização do enxame de partículas no gráfico.
Para desenhar o gráfico da função em uma página xhtml, utilizou-se a biblioteca
Javascript Graph3D.Esta biblioteca permite criar uma superfície tridimensional a
partir de um conjunto de pontos. Além de construir, ainda implementa rotinas para
aproximar e girar a superfície em todas as direções. A biblioteca utiliza recursos do HTML5
como a tag canvas.
No entanto, como a construção da função é dinâmica, o conjunto de pontos que
compõem a função também é dinâmico, alterando de acordo com a interação do usuário.
Para permitir o carregamento dinâmico do conjunto de pontos a partir de um código
Javascript, sem a necessidade recarregar a página, utilizaram-se os recursos
disponibilizados pela biblioteca DWR. A classe PSOViewAjax implementa os métodos que
serão acessados via código Javascript. O Quadro 12 apresenta os métodos
implementados pela classe.
61
Quadro 12 - Código fonte de classe PSOViewAjax
publicclass PSOViewAjax implements Serializable { privatefinal WebContext wc; public PSOViewAjax() {...} private PSOBean getPSOBean() {...} public float[][] graphPoints() {...} public void changeYlow(float low) {...} public void changeyUp(float up) {...} public void changeDelay(int delay) {...} public void updateDataPoints(Object positions, int sleep) throws
InterruptedException {...} }
Fonte: Autor (2012)
O método graphPoints()é responsável por criar um conjunto de pontos que
serão utilizados na construção da função. O método percorre os eixos da função teste, dentro
de seus limitantes superior e inferior e retorna um vetor do tipo float com 2500 pontos.
Cada ponto é composto por coordenadas x, y e z. A quantidade de pontos interfere
diretamente no nível de detalhes do gráfico e consequentemente no desempenho do sistema.
Definiu-se em 2500 o número de pontos, pois atende as necessidades do sistema com
desempenho relativamente bom.
Antes de iniciar a construção do gráfico, foi necessário definir algumas
configurações tanto para a biblioteca DWR quanto para a API Graph3D. O Quadro 13
apresenta a função fncOnLoad(), a qual é carregada pelo método onload do
componente <h:form> da página index.html e define as configurações necessárias.
Quadro 13 - Código fonte da função fncOnLoad()
function fncOnLoad() { dwr.engine.setActiveReverseAjax(true); dwr.engine.setNotifyServerOnPageUnload(true, true); dwr.engine.setErrorHandler(null); dwr.engine.setAsync(false); google.load('visualization', '1'); google.setOnLoadCallback(drawVisualization); drawVisualization(); }
Fonte: Autor (2012)
62
Os quatro primeiros parâmetros dizem respeito à biblioteca DWR, seguidos dos
parâmetros utilizados pela API Javascript do Googlejsapi.js, a qual é utilizada
pela API Graph3D. Finalmente, a função drawVisualization() é invocada para
construir o gráfico. Este método está armazenado no arquivo psoView.js, e sua
implementação é dada pelo Quadro 14.
Quadro 14 - Código fonte do método drawVisualization()
//Função responsável por desenhar o gráfico da função teste. function drawVisualization() { //Inicializa o objeto e define suas colunas. data = new google.visualization.DataTable(); data.addColumn('number', 'x'); data.addColumn('number', 'y'); data.addColumn('number', 'z'); initPoints(); //Busca o vetor posição no bean gerenciável e o adiciona no objeto data. var vetorPosicoes = []; PSOViewAjax.graphPoints({ callback : function(ret) { vetorPosicoes = ret; }, async : false }); for ( var x = 0; x < vetorPosicoes.length; x++) { data.addRow([vetorPosicoes[x][0], vetorPosicoes[x][1], vetorPosicoes[x][2] ]); } // Opções da superfície. options = { width : "500px", height : "450px", style : "surface", showPerspective : perspective.input.prop('checked'), showGrid : showGrid.input.prop('checked'), showShadow : shadow.input.prop('checked'), keepAspectRatio : keepAspectRatio.input.prop('checked'), verticalRatio : 1, showAxes : showAxes.input.prop('checked') }; // Instancia o gráfico na tela. graph = new links.Graph3d(document.getElementById('desenho')); // Desenha o gráfico. graph.draw(data, options, points); }
Fonte: Autor (2012)
Inicialmente, cria-se um objeto com a estrutura que armazenará o conjunto de
pontos, chamado data. Após instanciado, é feita uma requisição AJAX ao método
graphPoints() da classe PSOViewAjax, adicionando o conteúdo do seu retorno ao
63
objeto data. O parâmetro Async: false, torna a requisição síncrona, desta forma a
execução Javascript aguarda o término da requisição AJAX para prosseguir com a
execução do código. Em seguida são definidos alguns parâmetros de configuração no
atributo options.
Ao instanciar o objeto graph, este recebe por parâmetro o elemento canvas no
qual será desenhado o gráfico. Por fim, o método graph.draw(data, options,
points) desenha o gráfico na tela com o uso dos recursos da API Graph3D.
Os objetos data, points e graph são de escopo global e estão declarados no
arquivo psoView.js. Para permitir visualizar as partículas se movimentando, necessitou-
se alterar o método graph.draw(data, options, points). Este método foi
modificado para poder inserir um terceiro parâmetro, o qual armazena as posições das
partículas. Quando o parâmetro points está vazio o gráfico é desenhado sem pontos.
No instante em que a otimização é iniciada, a cada atualização do enxame de
partículas a classe observável PSO notifica seu observador PSOViewBean que há
atualizações disponíveis. Este por sua vez reenvia a atualização para a classe
PSOViewAjax, a qual irá enviar uma requisição AJAX reverso ao navegador, com a nova
posição do enxame. O Quadro 15 apresenta o método responsável por enviar as atualizações
ao navegador.
Quadro 15- Código fonte do método updateDataPoints
Public void updateDataPoints(Object positions, int sleep) throws InterruptedException { Thread.sleep(sleep); Util util = new Util(wc.getScriptSession()); util.addFunctionCall("drawParticles", positions); }
Fonte: Autor (2012)
O método possui dois parâmetros, positions o qual armazena o vetor com as
posições do enxame, e sleep cuja função é deixar o método inativo pela quantidade de
milissegundos definida pelo usuário. A execução do método é bastante simples, para o
contexto DWR da sessão armazenado no objeto wc do tipo WebContext envia-se uma
chamada a função Javascript drawParticles passando o objeto positions por
parâmetro. O Quadro 16 apresenta com detalhes a implementação do método.
64
Quadro 16 - Código fonte do método drawParticles
function drawParticles(particles) { initPoints(); for ( var i = 0; i < particles.length; i++) { points.addRow([ particles[i][0], particles[i][1], particles[i][2] ]); } graph.redraw(data, points); }
Fonte: Autor (2012)
Esta função Javascript limpa o objeto points e insere as posições das partículas do
enxame nele. Feito isso, solicita ao método graph.redraw(data, points) para
redesenhar a nova posição do enxame em cima do conjunto de pontos do gráfico (data). O
resultado deste método pode ser observado pela Figura 25.
Figura 25- PSOView minimizando a função de Ackley
Fonte: Autor (2012)
Observa-se que as partículas são representadas por esferas de cor rosa, com efeito
gradiente interno branco. A cada atualização, função e partícula são redesenhadas, porém,
este processo é tão rápido que fica imperceptível ao usuário, passando-o a impressão de que
as partículas estão literalmente se movimentando no gráfico, enquanto tudo é redesenhado.
3.4 OPERACIONALIDADE
Esta sessão detalha a operacionalidade das situações descritas nos casos de uso, bem
como a interação entre usuário e simulador.
Ao acessar o sistema PSOView com qualquer navegador compatível, será exibida a
tela inicial do sistema. Esta é a única tela do sistema, e contém todas as funcionalidades
necessárias para executar os casos de uso UC01, UC02 e UC03. A Figura 26 apresenta a tela
inicial.
65
Figura 26 - Tela inicial do simulador PSOView
Fonte: Autor (2012)
Por padrão, o sistema já apresenta uma função teste ao usuário com configurações
predefinidas no idioma português do Brasil. Para alterar a função teste que se deseja
otimizar basta clicar sobre a função atual que o sistema apresentará uma lista com todas as
funções teste implementadas, inclusive a função definida pelo usuário. A Figura 27
apresenta a lista do sistema com as funções teste implementadas.
Figura 27 - Lista de funções teste implementadas
Fonte: Autor (2012)
Ao selecionar uma função qualquer, o sistema irá redesenhar automaticamente o
gráfico da função com as configurações predefinidas. O usuário ainda pode construir a sua
própria função a partir de uma expressão matemática. Para que isto se torne possível basta
selecionar a função Definida pelo Usuário.
66
Ao selecionar está função aparecerá na tela um campo para inserir a expressão
matemática. Por padrão, esta função já vem com a expressão x+y implementada. Para
construir a função basta clicar no caixa de texto Expressão e efetivamente construir
função.
Por definição as variáveis que representam os eixos x e y são respectivamente
representadas por x e y. A caixa de texto auxilia o usuário durante a construção da função
por meio de um auto completar sugerindo as expressões matemáticas suportadas. A Figura
28 apresenta o campo Expressão e suas funcionalidades.
Figura 28 - Campo de entrada para a função matemática
Fonte: Autor (2012)
Enquanto o usuário escreve a expressão da função, o simulador automaticamente
desenha a função assim que encontrar uma expressão válida. A Figura 29 apresenta esta
funcionalidade.
Figura 29 - Simulador desenhando a função durante a inserção da expressão
Fonte: Autor (2012)
Com a função definida, o usuário pode alterar algumas configurações desta função.
Os parâmetros de configuração referem-se ao tamanho dos limitantes e opções de
visualização. A Figura 30 apresenta os parâmetros de configuração disponíveis.
67
Figura 30 - Parâmetros de configuração da função teste
Fonte: Autor (2012)
Os parâmetros yUp e yLow referem-se aos limitantes dos eixos x y da função.
Alterando estes parâmetros o simulador automaticamente redesenhará a função com os
novos parâmetros. Já o parâmetro delay altera intervalo entre as movimentações do
enxame, podendo este ser alterado durante a otimização. Por fim, os parâmetros Eixos,
Grade, Perspectiva, Sombra e Aspecto, não interferem na execução da otimização,
apenas na visualização do gráfico da função. Ao clicar em uma opção, o gráfico será
redesenhado com a nova configuração, inclusive durante a otimização. A Figura 31
apresenta as possíveis configurações de exibição para as funções.
Figura 31 - Possíveis configurações para o gráfico da função. (a) sem parâmetros, (b) com todos os parâmetros
(a) (b)
Fonte: Autor (2012)
Depois de configurar os parâmetros da função, deve-se ajustar os parâmetros de
configuração do algoritmo de otimização. O simulador é bastante flexível, e permite o ajuste
68
de nove parâmetros distintos. A Figura 32 apresenta os parâmetros de configuração do
algoritmo.
Figura 32 - Parâmetros de configuração do PSO
Fonte: Autor (2012)
Todos os parâmetros já vêm com valores predefinidos, estes valores tomam como
base o trabalho de Jiao, Lian e Gu (2008). O parâmetro Função, refere-se a estratégia de
implementação do peso inercial. O sistema apresenta duas estratégias implementadas, a
proposta por Jiao, Lian e Gu (2008) e a diversidade, descrita neste trabalho. Para cada
estratégia, se pode ajustar qualquer um dos oito parâmetros restantes.
Finalmente, clicando no botão Executar, caso os parâmetros informados sejam
válidos o sistema inicia o processo de otimização. A cada iteração o sistema atualiza a
posição do enxame na função teste. Ao término da execução a mensagem de término de
otimização é exibida e a função apresenta o gráfico da função com a solução encontrada. A
Figura 33 ilustra esta funcionalidade.
Figura 33 - Fim do processo de otimização
Fonte: Autor (2012)
69
Para visualizar os demais resultados do processo de otimização, basta clicar no botão
Resultados. Esta ação fará com que uma caixa de dialogo apareça na tela com os
detalhes da solução encontrada. A Figura 34 apresenta a caixa com resultados da otimização.
Figura 34 - Dialogo de resultados da otimização
Fonte: Autor (2012)
Como resultado, o sistema traz apenas os dados mais relevantes da otimização.
Sendo os valores de x, y e z a posição da melhor partícula global do enxame. Iterações
representa a quantidade total de iterações do PSO para encontrar a solução, Chamadas da
função representa o número total de chamadas da função objetivo e W final refere-se
ao peso inercial final do processo.
Como recurso adicional, o sistema ainda permite adequar a posição do gráfico a fim
de melhorar a visualização da função. Para fazer uso deste recurso basta utilizar os recursos
do mouse. A rolagem aproxima ou afasta o gráfico dentro dos limitantes permitidos pelo
sistema. Já para mudar a posição do gráfico, basta pressionar o gráfico com o botão direito e
arrastar para a posição desejada.
Outro recuso interessante do sistema é a possibilidade de alterar o idioma da
aplicação descrito pelo UC01. O sistema apresenta os ícones dos idiomas disponíveis acima
do item Parâmetros do PSO, como mostra a Figura 35.
Figura 35 - Opções de idioma disponíveis no PSOView
Fonte: Autor (2012)
Por padrão o idioma da aplicação é português do Brasil, mas para alterar para Inglês
dos EUA basta clicar sobre o ícone do idioma que a aplicação irá alterar automaticamente. A
Figura 36 apresenta a aplicação no idioma inglês dos EUA.
70
Figura 36 - Aplicação no Idioma inglês dos EUA
Fonte: Autor (2012)
De forma geral, a utilização do simulador é bastante simples, a interface apesar de
prática e intuitiva, ainda apresenta alguns recursos para facilitar a sua utilização. Para todos
os campos ou parâmetros existe uma mensagem que descreve brevemente o que significa ou
faz cada ação ou parâmetro. Durante a execução da otimização uma tag AjaxStatus
posicionada no canto superior esquerdo ilustra ao usuário que o sistema está em execução.
Ao termino da execução este indicador de atividade é oculto.
3.5 COMPARATIVO DAS ESTRATÉGIAS
No intuito de avaliar a eficiência da função diversidade no PSO, utilizou-se os 9
conhecidos problemas de otimização implementados no simulador PSOView. Apesar de
possuírem as mais diversas características, espaço, solução e grau de multimodalidade
apenas a função de Tripod não possui nenhum ponto de mínimo global localizado em 0,
sendo este situado em -1. Todos os testes foram executados 5 vezes no simulador PSOView
com dimensão fixa em 2.
O mesmo teste é realizado com a estratégia de variação do peso inercial proposta por
Jiao, Lian e Gu (2008), a qual utiliza o número de iteração para variar o valor de w. Neste
trabalho o autor sugere um valor entre [1.0001, 1.005] para o parâmetro u da equação a
-kiter
iw = w *( )u . Este parâmetro determina se o algoritmo irá diminuir o peso inercial mais
rapidamente ou não. Desta forma, 1.0001 proporciona maior exploração enquanto 1.005
proporciona maior convergência. Nos testes realizados utilizou-se u=1.005. Como as
funções teste estão em um espaço bidimensional, este valor garante boas taxas de exploração
e convergência nesta situação (JIAO; LIAN; GU, 2008). Para todos os casos de teste
utilizou-se um número máximo de iterações igual a 2000, coeficientes cognitivo e social
igual a 2.0, erro de parada em 10-3
e enxame com 40 partículas.
Para cada função e estratégia avaliou-se o melhor resultado das 5 execuções e
também o resultados médio obtido para a solução encontrada e número de iterações. Os
71
resultados dos testes podem ser observados pela Tabela 1, Onde ES representa o espaço
solução, M o valor do mínimo global da função e Iter. o número de iterações.
Tabela 1 - Comparativo entre a função de Jiao, Lian e Gu (2008) e a função diversidade
Função ES M
Jiao, Lian e Gu (2008) Diversidade
Melhor Médio Melhor Médio
Resultado Iter. Resultado Iter. Resultado Iter. Resultado Iter.
Ackley -32/32 0 4,26E-04 138 2,18E-03 142,8 7,60E-04 70 2,22E-03 67,8
Alpine -5,12/5,12 0 3,47E-04 102 2,07E-03 99,2 9,16E-04 46 1,68E-03 56,2
Griewank -600/600 0 3,95E-02 2000 1,92E-01 2000 2,71E-02 2000 1,11E-01 1621,2
Rastrigin -5,12/5,12 0 9,95E-01 2000 1,99E+00 2000 2,07E-04 503 1,59E+00 1700,6
Rosenbrock -100/100 0 9,29E-04 188 1,88E+01 916,6 9,78E-05 109 1,58E-03 99,2
Schaffer -600/600 0 9,74E-03 159 3,33E-02 530,4 9,72E-03 2000 9,78E-03 485,2
Schwefel -500/500 0 -8,38E+02 155 -7,43E+02 1267,8 9,72E-03 112 2,07E-02 846,8
Sphere -5,12/5,12 0 1,71E-04 105 3,86E-04 103 4,65E-05 29 2,93E-04 39,4
Tripod -100/100 -1 -9,99E-01 158 -5,99E-01 887,4 -1,00E+00 58 -5,99E-01 52,4
Fonte: Autor (2012)
Em 6 das 9 funções teste a função diversidade encontrou uma solução melhor que a
proposta de Jiao, Lian e Gu (2008). Para os demais casos a diferença entre as soluções é
muito pequena, os melhores resultados estão sublinhados na Tabela 1. Na comparação é
notável o número reduzido de iterações na função diversidade. Para os resultados médio, a
função diversidade demonstrou resultados ainda melhores, obteve solução mais adequada
para 7 funções.
72
4 CONCLUSÕES
Todos os objetivos propostos neste trabalho foram cumpridos, o simulador se
mostrou uma ferramenta eficiente e flexível para visualização do processo de minimização,
servindo até mesmo como uma ferramenta didática no ensino de Swarm Intelligence. Já a
proposta de variação do peso inercial, se mostrou bastante promissora, apesar de demandar
maiores esforços na compreensão de seu desempenho em problemas com espaço n-
dimensional.
Todas as tecnologias utilizadas para desenvolver o simulador se mostraram bastante
eficientes. Em geral, o simulador apresenta uma interface gráfica intuitiva e amigável,
permitindo a utilização de todos os recursos do simulador em qualquer navegador
compatível com HTML5 em uma única tela. Outro grande diferencial é a independência de
plataforma ou qualquer outro recurso adicional como JRE ou Java3D.
A possibilidade de criar funções teste a partir de expressões matemáticas se mostrou
bastante eficiente, pois permite ao usuário criar, visualizar e minimizar seus próprios
problemas de otimização de maneira rápida e intuitiva.
Como grande parte do que vem sendo publicado a respeito do PSO é em inglês, a
possibilidade de alterar o idioma do simulador para o inglês é garantia de uma maior
probabilidade de popularização no meio acadêmico.
A estratégia de variação do peso inercial se mostrou superior a estratégia de Jiao,
Lian e Gu (2008) para problemas de minimização com 2 dimensões, pois foi capaz de
encontrar soluções melhores e com números de iterações consideravelmente menor que os
da estratégia comparada. No entanto, para problemas onde o espaço solução é maior, o
algoritmo apresentou desempenho inferior. Fato que leva a crer que a função diversidade
precisa aprimorar sua habilidade de escapar de mínimos locais.
O Quadro 17 apresenta os recursos utilizados na comparação do simulador PSOView
com os trabalhos correlatos.
73
Quadro 17 - Comparação entre PSOView e trabalhos correlatos
Recurso PSOVis PSO
Visualization PSOView
Criar função teste X
Alterar limites inferiores e superiores
da função X
X
Exibir eixos da função X X
Exibir grade da função X X
Exibir gráfico com perspectiva
isométrica8
X
Exibir gráfico com sombra X
Exibir gráfico com proporção9 X
Visualizar função em 3D X X X
Girar gráfico X X X
Aproximar gráfico X
Exibir movimentação das partículas X X X
Alterar o intervalo de atualização da
posição das partículas X
X
Alterar os parâmetros do PSO X X
Cross-Browser X X X
Requer Java 3D instalado X
Requer JRE instalado X X
Permite pausar ou interromper a
otimização X
Permite execução passo a passo X
Diferencia a melhor solução do
enxame. X X
Exibe o mínimo global da função X
Multi-idioma X
Estratégia de implementação do peso
inercial
Constriction
Standard Standard
Jiao, Lian e Gu
(2008)
Diversidade Fonte: Autor (2012)
Em comparação com os trabalhos correlatos o simulador se mostrou superior na
maioria dos recursos comparados, perdendo apenas em alguns detalhes dos quais destacam-
se: a execução passo a passo e pausa do processo de otimização, diferenciação da melhor
partícula global, exibição do mínimo global da função, entre outros.
8 Perspectiva isométrica é o processo de representação tridimensional em que o objeto se situa num sistema de
três eixos coordenados (axonometria). Estes eixos, quando perspectivados, fazem entre si ângulos de 120°:
9Relação proporcional entre altura e largura da imagem.
74
4.1 DIFICULDADES ENCONTRADAS
No decorrer do desenvolvimento deste trabalho muitas dificuldades foram
encontradas. Porém, com esforço e dedicação, todas puderam ser superadas. Entre todas
destacam-se a construção do gráfico da função, implementação do AJAX reverso,
implementação da arquitetura do PSO e a construção da função definida pelo usuário.
Durante as tentativas de representar o gráfico da função em uma tag canvas,
inúmeras bibliotecas de terceiros foram utilizadas durante os testes, mas apenas a Graph3D
se mostrou customizável o bastante para atender as necessidades do simulador.
Encontrar uma técnica capaz de atualizar a posição das partículas do enxame do PSO
no navegador do usuário durante a execução da otimização, mostrou-se uma tarefa bastante
árdua. Inicialmente tentou-se utilizar técnicas nativas do JSF e PrimeFaces, apenas o
PrimeFaces poderia atender a está necessidade, com a utilização do componente PrimePush.
No entanto, esta estratégia necessitaria de um servidor Jetty, o que inviabilizaria sua
implementação no simulador. Para atender a esta necessidade utilizou-se a técnica AJAX
reverso disponibilizada pela biblioteca DWR, a qual se mostrou bastante eficiente na
resolução do problema.
Desenvolver uma estrutura orientada a objetos para atender as necessidades do PSO
e da função tornou-se uma tarefa bastante custosa. Havia a necessidade de utilizar a estrutura
tanto nas classes Java quanto nos arquivos Javascript. Porém, a estrutura desenvolvida
mostrou-se bastante flexível, permitindo a implementação do PSO e função em um espaço
n-dimensional de forma transparente, requerendo apenas a correta implementação das
funções teste.
Por fim, a construção de funções definidas pelo usuário no início do projeto parecia
ser um desafio. Todavia, após encontrar a biblioteca Math Evaluator este processo ficou
simples em nível de implementação, necessitando apenas construir as rotinas necessárias
para validar as equações informadas pelo usuário.
4.2 EXTENSÕES
Para construir um simulador ainda mais completo e flexível caberia à implementação
de algumas rotinas adicionais, entre elas destacam-se:
a) Permitir ao sistema executar funções teste em um espaço n-dimensional;
75
b) Aprimorar os mecanismos que auxiliam na construção da função definida
pelo usuário;
c) Avaliar a função diversidade em problemas com espaço n-dimensional;
d) Inserir o idioma alemão ao simulador, já que é notável o número de
publicações nesta língua;
e) Desenvolver rotinas que permitam pausar, interromper e executar passo a
passo a otimização;
f) Permitir que o sistema armazene as funções definidas pelo usuário quando
necessário.
76
REFÊRENCIAS
ABRAHAM, P.; PANT, M.; THANGARAJ, R. Particle Swarm Optimization: Performance
Tuning and Empirical Analysis. Foundations of Computer Intelligence. Berlin, v.3, p.
101-128. 2009.
ACKLEY, D. H. A connectionist machine for genetic hill climbing. Boston: Kluwer
Academic Publishers, 1987.
ALLPORT, A. The historical background of social psychology. In: G. LINDZEY & E.
ARONSON (Eds.). Handbook of social psychology. New York: Anais…New York:
Random House, v.1, ed. 3. p.1-46, 1985.
BÄCK, T. Evolutionary algorithms in theory and practice. Oxford, Oxford University
Press, 1996.
BOEKEL, R. V. Por dentro do PrimeFaces 2.2. Java Magazine. Edição 93, 2011.
BONABEAU, E.; DORIGO, M.; THÉRAULAZ, G. Swarm intelligence: from natural to
artificial systems. Oxford, Oxford University Press, 1999.
CHAP Links Library. Versão 1.2. Rotterdom, Holand: Almend BUNC, 2012. Disponível
em: http://chap.almende.com. Acesso em: 05 out. 2012.
CHATERJEE, A.; SIARRY, P. Nonlinear Inertia Weight Variation for Dynamic Adaptation
in Particle Swarm Optimization. Computers e Operations Research, v. 33, p. 859-871,
2004.
CLERC, M. The swarm and the queen: towards a deterministic and adaptive particle
swarm optimization. Proc. I999 ICEC, Washington, DC, p. 1951 - 1957, 1999.
DEL VALLE, Y.; VENAYAGAMOORTHY, G. K.; MOHAGHEGHI, S.; HERNANDEZ,
J. C.; HARLEY, R. G. Particle Swarm Optimization: Basic Concepts, Variants and
Applications in Power Systems. IEEE Transactions One Evolutionary Computational, v.
12, n. 2, 2008. Disponível em: <http://ieeexplore.ieee.org>. Acesso em: 20 jun. 2008.
DIRECT Web Remoting. Versão 3.1.rc1, 2012. Disponível em:
<www.directwebremoting.org/dwr/index.html>. Acesso em: 25 out. 2012.
EBERHART, R. C.; SHI, Y. Comparing Inertial Weights and Constriction Factors in
Particle Swarm Optimization. In: PROCEEDINGS OF THE IEEE CONGRESS ON
EVOLUTIONARY COMPUTATION (CEC), 2000. p. 84-88. Anais eletrônicos...
Disponível em:<http://ieeexplore.ieee.org/xpl/freeabs_all.jsp?arnumber=870279>. Acesso
em: 20 out. 2011.
GIL, A. C. Como Elaborar Projetos de Pesquisa. 5. Ed. São Paulo: Atlas, 2008.
77
GRAPHING Calculator. Versão 3.0. Ben McCormick, Egor Poblaguev, 2012 Disponível
em: <www.code.google.com/p/graphingcalculator>. Acesso em: 15 out. 2012.
GRIEWANK, A. O. Generalized Decent for Global Optimization. Journal
of Optimization Theory and Applications. 34, p. 11-39, 1981.
GROSAN, C., ABRAHAM, A., NICOARA, M.: Search Optimization Using Hybrid
Particle Sub-Swarms and Evolutionary Algorithms. International Journal of
Simulation Systems, Science & Technology, UK 6(10&11), p. 60-79, 2005.
HARRELL, C. R.; MOTT, J. R. A.; BATEMAN, R.E.; BOWDEN, R. G.; GOGG, T. J.
Simulação otimizando os sistemas. ed. 1. São Paulo: IMAM e Belge Simulação, 2002.
JIAO, B.; LIAN, Z.; GU, X. A dynamic inertia weight particle swarm optimization
algorithm. Chaos Solitons & Fractals. ed. 37. p.698-705, 2008. Disponível em:
http://www.sciencedirect.com . Acesso em: 15 jan. 20011.
KENNEDY, J., EBERHART, R. C., SHI. Y. Swarm Intelligence. United States of
America: Elsevier, 2001.
LENIN, K; MOHAN, M.R. Attractive and Repulsive Particle Swarm Optimization for
Reactive Power Optimization. Journal of engineering and Applied Science. p. 288-292.
2006.
LIU, H.; ABRAHAM, A.; ZHANG, W. A Fuzzy AdaptiveTurbulent Particle Swarm
Optimization. International Journal of Innovative Computing and applications, p. 39-
47, 2007.
LOCATELLI, M. A note on the Griewank test function. Journal of Global Optimization.
ed. 25. p. 169–174, 2003.
LUCKOW, D. H; MELO, A. A. Programação Java para a Web. São Paulo: Novatec,
2010.
PANT, M., RADHA, T., SINGH, V.P. Particle Swarm Optimization: Experimenting the
Distributions of Random Numbers. In: 3RD INDIAN INTERNATIONAL CONFERENCE
ON ARTIFICIAL INTELLIGENCE India. Anais… India: IICAI, p. 412-420 2007.
PANT, M; THANGARAJ, ABRAHAM, R. Particle Swarm Optimization: Performance
Tuning and Empirical Analysis. Foundations of Computer Intelligence, v. 3. SCI203, p.
101-128, 2009.
PARSOPOULOS, K. E.; VRAHATIS, M. N. Recent Approaches to Global Optimization
Problems through Particle Swarm Optimization. Natural Computing, v. 1, p. 235-306,
2002.
POLI, R.; KENNEDY, J.; BLACKWELL, T. Particle Swarm Optimization: An overview.
Swarm Intelligence. v. 1. p. 33-57, 2007.
78
PRIME Faces User Guide. Versão 3.4. Optimus Prime: Prime Faces, 2012. Disponível em:
<http://primefaces.googlecode.com/files/primefaces_users_guide_3_3.pdf>. Acesso em: 03
out. 2012.
PSOVIS: Modlab. Versão 1.0. [S.I.], 2005. Disponível em: <www.gecco.org.chemie.uni-
frankfurt.de/PsoVis/index.html>. Acessado em: 16 out. 2012.
PSO Visualization. Versão 1.0. Kent Fritch, 2004. Disponível em:
<www.projectcomputing.com/resources/psovis>. Acesso em: 16 out. 2012.
MÜHLENBEIN, H.; SCHOMISCH BORN, D. J.The Parallel Genetic Algorithm as
Function Optimizer. Parallel Computing, ed. 17, p. 619-632, 1991.
OLORUNDA, O; ENGELBRECHT, A. P. Measuring exploration/exploitation in particle
swarms using swarm diversity. IEEE Congress on Evolutionary Computation. p.1128-
1134, 2008.
RADHA, M. P; SINGH, V. P. A Simple Diversity Guided Particle Swarm Optimization.
IEEE In: CONGRESS ON EVOLUTIONARY COMPUTATION, 2007.
RESENDE, M. G. C.; STEWART, W. R.; KELLY, J. P.; GOLDEN, B. L.; BARR, R. S.
Designing and Reporting on Computational Experiments with Heuristic Methods. Journal
of Heuristics, ed. 1. p. 9-32, 1995.
RICHARDS, M.; VENTURA, D. Dynamic sociometry in particle swam optimization. In:
PROCEEDINGS OF THE SIXTH INTERNATIONAL CONFERENCE ON
COMPUTATIONAL INTELLIGENCE AND NATURAL COMPUTING. North
Carolina. Anais… North Carolina. p. 1.557-1560, 2003.
RIGET, J.; VESTERSTROM, J. S. A diversity-guided particle swarm optimizer – the
ARPSO. In: EVALIFE TECHNICAL REPORT n. 02. 2002.
ROSENBROCK, H. H. An automatic method for finding the greatest or least value of a
function. The Computer Journal, p. 175-184. 1960.
SCHWEFEL, H. P. Numerical Optimization of Computer Models. John Wiley & Sons,
1981.
SHI Y.; EBERHART R. A modified particle swarm optimizer. Proc. IEEE Int.
Conf on Evolutionary Computation , p.69-73, 1998.
SHI Y.; EBERHART R. Empirical Study of Particle Swarm Optimization. Proceedings of
the IEEE Congress on Evolutionary Computation. p. 1945-1950, 1999.
SHI, Y. Particle Swarm Optimization. Eletronic Data Systems, Inc. Kokomo, IN 46902,
USA, IEEE Neural Networks Society, 2004.
SIMÕES, C.; PAIVA, J. Metodologias de Investigação em Educação. Lisboa: Fundação
Calouste Gulbenkian, 2004.
79
THOMAS, N., REED, M. A hybrid algorithm for continuous optimization. In: IEEE
CONGRESS ON EVOLUTIONARY COMPUTATION Trondheim. Anais… Trondheim:
IEEE 2009, p. 2584-2589, 2009.
VAN DEN BERGH, F.; ENGELBRECHT, A.P. A Study of Particle Swarm Optimization
Particle Trajectories. Information sciences ed. 176 p. 937-971, 2006. Disponível em:
www.elsevier.com/locate/ins>. Acesso em: 15 set. 2011.
WHITE, T.; PAGUREK, B.; Towards Multi-Swarm Problem Solving in networks. In:
PROCEEDINGS THIRD INTERNATIONAL CONFERENCE ON MULTI-AGENT
SYSTEMS. ICMAS ’98, p. 333-340, 1998.
ZHAN, Z-H.; ZHANG, J; LI, Y; CHUNG, H.S-H. Adaptive particle swarm optimization.
IEEE Transactions on Systems Man, and Cybernetics - Part B: Cybernetics, v. 39.. p. 1362-
1381, 2009.
ZUBEN, F. J. V.; ATTUX, R. R. F. Inteligência de Enxame. São Paulo: Unicamp, 2008.