Inteligência Artificial
6.5 Outras abordagens de IA
A vantagem da utilização das regras aproximadas (6.18) em relação às
regras fuzzy (2.23) relativas à Tabela 2.5 e funções de pertinência definidas
nas Figuras 2.21 e 2.22 do Capítulo 2, é que as regras aproximadas não utilizam procedimentos de fuzificação e defuzificação de dados no processamento correspondente ao controle fuzzy considerado, o que resulta em tempos de processamentos menores. Esse contexto constitui uma
característica interessante em aplicações de tempo real.
Na referência Machado e Pinheiro (2013) há informações sobre uma
técnica de controle baseada na TCA associada com métodos de retroação de
estados. Em Oliveira (2013) têm-se detalhes sobre a modelagem de sistemas não lineares com múltiplas entradas e saídas baseada em conceitos
da TCA. Em Guaracy (2013) e Rodor (2012) se encontram detalhes sobre técnicas de controle SMC (Sliding Mode Control) e IMC (Internal Model
Control) associadas com conceitos da TCA. Nas referências Faustino (2011)
e Faustino et al. (2011) têm-se aplicações de conceitos de Rough Sets em
previsões de séries temporais.
No item a seguir tem-se uma breve introdução de alguns conceitos
relacionados com outras abordagens de IA.
6.5 Outras abordagens de IA
Entre outras abordagens de IA frequentemente utilizadas em vários contextos estão os Algoritmos Evolutivos, ou a área de IA conhecida como “Computação Evolucionária”.
Entre os “Algoritmos Evolutivos” mais conhecidos estão os Algoritmos
Genéticos (Genetic Algorithms – GA), os “Enxames de Partículas” (Particle Swarm ou Particle Swarm Optmization – PSO) e os “Sistemas Imunológicos”
Os Algoritmos Genéticos (Holland, 1992) são baseados em conceitos
associados com difusão dos genes (que definem características) entre gerações de uma determinada espécie, e em mutações ocorridas nesses genes e que alteram algumas características da espécie em questão, que sendo vantajosas se propagam para as gerações futuras. Os algoritmos que utilizam esses conceitos possuem capacidades de adaptações aos contextos em que são aplicados, fornecendo resultados otimizados em relação aos algoritmos convencionais elaborados para as mesmas tarefas correspondentes.
Os algoritmos de Enxame de Partículas (Eberhart et al., 2001) possuem
diferentes classificações conforme seus conceitos de inspiração biológica
Colônia de Formigas ou Ant Colony (Bonabeau et al., 1999); Enxame de Abelhas (Bees Algorithm); Bando de Aves (Bird Algorithm); Cardume de Peixes (Fish Swarm). Estes algoritmos são baseados no comportamento coletivo de espécies como aves, peixes, abelhas, formigas e outras que podem ser modeladas como um conjunto de partículas (indivíduos) que agem coletivamente na procura de alimentos, abrigo, rotas etc. Similarmente aos GA, os algoritmos de Enxame de Partículas fornecem resultados otimizados em relação aos algoritmos convencionais.
Os algoritmos com inspiração em sistemas imunológicos (Dasgupta, 1999)
utilizam conceitos baseados na ação dos mecanismos de defesa dos organismos biológicos, como os glóbulos brancos dos seres humanos Similarmente aos GA e os algoritmos de Enxame de Partículas, os algoritmos imunológicos fornecem resultados otimizados em relação aos algoritmos convencionais projetados para resolver tarefas correspondentes.
Os algoritmos evolutivos têm aplicações típicas relacionadas com
otimização de sistemas em geral. Os itens seguintes trazem uma breve conceituação sobre os Algoritmos Genéticos e os de Enxame de Partículas assim como exemplos ilustrativos.
6.5.1 Conceituação básica sobre GA
Computacionalmente (e conceitualmente), um Algoritmo Genético típico pode
ser descrito nos passos seguintes (Fogel, 1995): 1. O problema a ser resolvido é definido por uma função-objetivo que indica a
aptidão (fitness) de alguma solução em potencial.
2. Uma população de soluções candidatas é inicializada. Cada tentativa de
solução é codificada como um vetor x denominado cromossomo, com elementos simulando genes que variam valores de posições específicas em sua estrutura, cuja representação básica consiste de uma string de valores binários.
3. Cada cromossomo x em uma população é codificado de forma apropriada i
para avaliação via um índice de aptidão μ(xi), também conhecido como fitness.
4. Para cada cromossomo é associada uma probabilidade de reprodução
relativa aos outros cromossomos da população.
5. De acordo com as probabilidades de reprodução atribuídas, uma nova
população de cromossomos é gerada aleatoriamente selecionando-se características da população corrente. Para esta tarefa são aplicados “operadores genéticos” denominados cruzamento (crossover) e mutação. O crossover é aplicado a dois cromossomos parentes, que gera um novo cromossomo descendente via seleção randômica da representação codificada por ele. Um operador de mutação de bit promove a mudança de bits do código genético correspondente, codificando uma nova solução do sistema.
6. O procedimento é interrompido se uma solução viável é encontrada ou se o
número máximo especificado de repetições do algoritmo ocorre. Caso contrário, o processo retorna ao terceiro passo, em que um novo cromossomo é selecionado e o procedimento continua.
Um GA apresenta um comportamento semelhante à atuação da genética na
natureza. Em uma população de indivíduos, cada qual representando uma solução do problema em questão, para cada indivíduo associa-se um grau de aptidão que determina a sua capacidade de competir com os demais membros da população. Quanto maior for sua aptidão (fitness), maior a sua probabilidade de ser selecionado para se reproduzir, cruzando (crossover) seu material genético com outro indivíduo selecionado. Esse cruzamento produzirá novos indivíduos com características de seus “pais”. Este processo chamado de “reprodução”, é repetido até que uma solução satisfatória seja encontrada. Sobre esses novos indivíduos deverá atuar ainda o operador de mutação, que é necessário para introduzir e manter a diversidade genética da “população”.
Como exemplo, seja o problema de encontrar o valor da variável x que
minimiza a função f(x) = x2. A Tabela 6.10 resume os procedimentos básicos realizados pelo algoritmo na busca de uma solução para o problema.
Tabela 6.10
Dados do GA para f(x) = x2
Para a função simples deste exemplo, a solução analítica exata do problema
é obtida derivando f(x) e igualando-a a zero, obtendo-se x = 0 e f(x) = 0. Para funções complexas, soluções analíticas não são triviais, e algoritmos de otimização (convencionais ou via GA ou PSO) são empregados. A listagem abaixo ilustra a solução do problema via comandos específicos para GA do MatLab, que também possui um toolbox genérico para otimização de sistemas (possuindo também a opção de GA).
Listagem 6.1
% Definição da função a ser otimizada por intermédio de um arquivo.m:
% Utilização de comandos específicos para GA do MatLab:
Os resultados obtidos pelo GA foram x = 7,11.10-4 e f(x) = Fval = 5,05.10-7
constituindo valores numéricos bem próximos da solução exata do problema
Os gráficos da Figura 6.5 ilustram o número de gerações e os valores das aptidões (fitness) processadas pelo algoritmo.
FIGURA 6.5 Número de gerações e valores das aptidões processadas pelo algoritmo.
A utilização do toolbox de otimização citado é realizada digitando na área
de trabalho optimtool(’ga’), e na tela que se abre colocar no campo “Fitness function” o nome da função-objetivo em questão (@Exemplo_fitness, neste exemplo), em “Number of variables” digitar “1” e pressionar o botão Star (existem outras seleções de parâmetros que não foram consideradas neste exemplo). O resultado do processamento do algoritmo GA (ou de outros eventualmente selecionados) aparece na janela inferior esquerda do aplicativo
6.5.2 Conceituação básica sobre PSO
Um algoritmo PSO tem algumas características em comum com técnicas de GA. O processo é inicializado com uma população de soluções aleatórias, e procura-se por um resultado ótimo do problema abordado. Diferentemente dos GA, um algoritmo PSO não tem operadores como crossover e mutação. As soluções potenciais (chamadas de partículas) se deslocam através do espaço de estados do problema, seguindo as partículas que possuem os melhores valores de avaliação (fitness) no momento. Um algoritmo PSO é computacionalmente fácil de realizar e possui poucos parâmetros para se ajustar.
Um PSO simula o comportamento de uma revoada de pássaros, por
exemplo, em que um grupo de aves está procurando aleatoriamente por comida. Inicialmente nenhum pássaro sabe exatamente onde se encontra o alimento, mas eles sabem estimar a cada nova informação de posição e de velocidade dos indivíduos do bando a melhor estratégia para encontrar a comida, e a maioria do bando tende a seguir o pássaro que está mais perto do alimento.
O algoritmo é inicializado com um grupo de partículas aleatórias (soluções
que procura pela solução ótima a cada iteração. A cada momento as partículas tendem a melhorar as suas posições em relação ao objetivo almejado (“alimento” ou uma função de custo em aplicações de otimização), conforme dois indicadores de avaliação. O primeiro deles é o melhor resultado local que uma partícula considerada no momento encontrou, sendo chamado de Pbes (ou LocalBest). O outro indicador é o melhor valor obtido pelo conjunto de outras partículas da população, e é conhecido por Gbest (ou GlobalBest) Quando um determinado problema apresenta restrições, essas podem ser modeladas na própria função de custo do algoritmo.
As equações básicas que modelam as posições (p) e as velocidades (v) de
cada partícula de um PSO, em determinado instante de tempo (t), estão definidas abaixo:
Onde rand constitui um número aleatório na faixa [0, 1], c e c são 1 2
coeficientes (usualmente com valores iguais a dois) de convergência do algoritmo, conhecidos como parâmetros cognitivo e social, respectivamente Um valor de velocidade máxima (v_max) é utilizado para limitar a soma das velocidades de todas as partículas em uma determinada direção do espaço de estados do problema.
No Anexo 6.3 deste capítulo encontra-se um algoritmo básico de PSO que
será utilizado no exemplo a seguir. Ele consiste no mesmo problema utilizado na exemplificação de GA, em que será empregada a função de custo f(x) = x2 A questão é encontrar o valor da variável x que minimiza a função f(x). A função em questão é definida por intermédio de um arquivo.m, como:
Executando o algoritmo PSO (Anexo 6.3), tem-se x = -3,51.10-6 e f(x) =
1,23.10-11 (valores numéricos muito próximos da solução exata do problema)
Os gráficos da Figura 6.6 ilustram o número de iterações e os valores de fitness resultantes do processamento do algoritmo (os dados dos fitness não estão normalizados entre [0, 1]).