Capítulo 4 Computação Bioinspirada aplicada à Robótica Talles Henrique de Medeiros, Luís Fabrício Wanderley Góes, Milene Barbosa Carvalho e Ilg Menezes Abstract The Bio-Inspired Computing is new paradigm in computer science based on Nature’s phenomena. It uses concepts, principles and mechanisms studied in biological sciences to design computer programs that reproduce natural systems behavior. These Bio-Inspired programs can solve complex and unsolved problems in a simple and efficient way. Among these problems, Robotics is an open area with problems that requires these kind of intelligent systems. In this work, we remark some principles of Bio-Inspired Computing and their applications in Intelligent Robots. Resumo A Computação Bioinspirada ou Natural é um novo paradigma da Ciência da Computação inspirado nos fenômenos da Natureza. Utiliza características das Ciências Biológicas na computação projetada por seres humanos para uso metafórico de conceitos, princípios e mecanismos fundamentando sistemas naturais. Muitos problemas, até então não resolvidos ou mesmo de difícil solução, podem ser elegantemente resolvidos por Sistemas Naturais. Entre eles a Robótica, um campo especial de amplas possibilidades de aplicação destes sistemas inteligentes. Neste texto, destacaremos os princípios de algumas técnicas deste paradigma e suas aplicações na implementação de Robôs Inteligentes. 4.1. Introdução A natureza apresenta inúmeros exemplos de soluções elegantes e eficientes para um grande número de problemas. Estas soluções estão presentes nas mais diversas espécies de seres vivos. É fácil perceber quando abelhas se organizam para construir uma colméia facilitando a sobrevivência do enxame ou espalhando o pólen de uma planta, permitindo a fecundação de uma outra planta. É interessante, também, o modo como uma colônia de formigas consegue estabelecer uma rota entre o ninho e a comida, para suprir suas necessidades de alimento, entre vários outros exemplos. Estas soluções são, em geral, o resultado de um processo evolutivo. Esta é uma das principais características presentes em sistemas biológicos e que os tornam alternativas muito atrativas para a computação. Técnicas tradicionais de computação, muitas vezes, não são eficientes para resolver um grande número de problemas que são facilmente resolvidos por processos naturais como, por exemplo, problemas de otimização e reconhecimento de padrões. Então, busca-se entender e modelar os processos complexos que ocorrem na Natureza para obter ganhos de conhecimento da Ciência Natural e na Ciência da Computação. As idéias extraídas de sistemas naturais já vêm sendo utilizadas com muito sucesso para o desenvolvimento de ferramentas tecnológicas capazes de resolver problemas de complexidade elevada, cujas soluções eram, até então, desconhecidas ou inatingíveis [DG97a]. A computação tem buscado inspirações na Natureza para lidar com estes tipos de problemas. Este texto, então, apresentará os fundamentos básicos desse novo paradigma: conhecido como Computação Bioinspirada ou Natural, e suas possibilidades de aplicações no campo da Robótica. A Computação Bioinspirada utiliza características, inspiradas pela Natureza, na computação projetada por seres humanos para o uso metafórico de conceitos, princípios e mecanismos fundamentando sistemas naturais. Esta área de pesquisa investiga o relacionamento entre a computação e a biologia, estudando como computadores podem ser utilizados para modelar a natureza e como soluções encontradas pela natureza podem originar novos paradigmas de computação. As técnicas da Computação Bioinspirada podem ser classificadas por diferentes critérios [CDR+ 04]. Entre eles estão: a origem da inspiração, a dimensão do sistema biológico e o dispositivo físico utilizado para a implementação da técnica. Neste texto, por limitação de espaço, destacamos as técnicas segundo a origem de sua inspiração. Esta classificação sugere duas classes, das quais a primeira é o tema deste texto: Computação Bioinspirada: Projeto de algoritmos baseado em princípios biológicos. Exemplos: Redes Neurais Artificiais, Sistemas Imunológicos Artificiais, Computação Evolucionária, Inteligência de Enxames, etc. Bioinformática: Emprego de técnicas computacionais para resolução de problemas da Biologia Molecular. Exemplos: Reconhecimento de Genes, Predição de Estruturas de Proteínas, Alinhamento de Seqüências, etc. Os Sistemas Biológicos inteligentes não seguem processos tradicionais de manufatura. Assim, não são compostos por partes pré-fabricadas e caracterizam-se por serem projetados por processos de evolução natural. Estes sistemas são, muitas vezes, controlados por sistemas baseados no sistema nervoso e são formados por componentes que trabalham juntos, em grupos, rebanhos ou enxames. Algumas de suas sub-áreas são: Redes Neurais Artificiais, Computação Evolutiva (Algoritmos Genéticos, Programação Genética, Estratégias Evolutivas), Sistemas Imunológicos Artificiais, Vida Artificial e Inteligêcia de Enxames (ou coletiva). A Computação Bioinspirada, então, desenvolve algoritmos e ferramentas. Baseiase na capacidade computacional do sistema nervoso para resolver problemas de reconhecimento de padrões, quando trabalha com Redes Neurais Artificiais. Analisa as pro- priedades emergentes de colônias de organismos na solução problemas de otimização, aproximando a computação da Inteligência de Enxames. E, através da Computação Evolutiva, busca, na capacidade da Evolução Natural, melhorar a adaptação dos indivíduos ao ambiente no decorrer de várias gerações. Neste texto, por limitação de espaço, tornou-se necessária uma abordagem simplificada das técnicas da Computação Bioinspirada. Para isso, destacaremos as seguintes teorias: • Redes Neurais Artificiais; • Sistemas Imunológicos Artificiais; • Computação Evolucionária; • Inteligência de Enxames. A Robótica é o nosso objeto de estudo, no qual destacamos as principais aplicações dos algoritmos bioinspirados. No campo da Robótica, podemos destacar os problemas de exploração, visão, reconhecimento de padrões, fala etc. Este texto está organizado da seguinte maneira: na Seção 4.1 são apresentados os fundamentos básicos de algumas das principais técnicas da Computação Bioinspirada. Na Seção 4.2 será apresentada uma breve introdução aos conceitos da Robótica, principalmente sob a visão da Robótica Inteligente. A Seção 4.3 é dedicada aos trabalhos já divulgados da Computação Bioinspirada na solução de problemas tradicionais no campo da Robótica. 4.2. Técnicas de Computação Bioinspirada Esta seção é dedicada a apresentação de quatro técnicas de computação bioinspirada. Aqui descreveremos os princípios de cada uma, alguns conceitos básicos e os importantes algoritmos de cada paradigma. 4.2.1. Redes Neurais Artificiais - RNAs As Redes Neurais Artificiais são modelos matemáticos que se assemelham às estruturas neurais biológicas e que têm capacidade computacional adquirida por meio de aprendizado e generalização [BCL00, Hay94]. O aprendizado em RNAs está normalmente associado à capacidade de as mesmas adaptarem os seus parâmetros como conseqüência de sua interação com o meio externo. Também como acontece com os seres vivos, o processo de aprendizado das RNAs é interativo e, por meio dele, a rede deve melhorar o seu desempenho gradativamente à medida que interage com o meio externo. O critério de desempenho que determina a qualidade do modelo neural e o ponto de parada de treinamento são pré-estabelecidos pelos parâmetros de treinamento. O passo fundamental para o surgimento das RNAs foi o modelo matemático proposto por McCulloch e Pitts, em 1943 [MP43]. O modelo, denominado neurônio MCP (McCulloch e Pitts), é descrito por um conjunto de n entradas no qual cada entrada é multiplicada por um determinado peso e, em seguida, os resultados são somados e comparados a um limiar. Esse modelo é amplamente citado na literatura da área de RNAs [BCL00]. A Figura 4.1 é uma visão esquemática do nodo MCP. O processo de informação em RNAs é feito por meio de estruturas neurais em que o armazenamento e o processo de informação são realizados de maneira paralela e distribuída por elementos processadores relativamente simples (os neurônios), como estão representados na Figura 4.1. Esta característica torna a RNA uma alternativa promissora para problemas cuja solução ainda apresenta dificuldades para computação tradicional. w1 X1 w2 X2 . . . f(u) y u . . . wn Xn Figura 4.1. Modelo de um Neurônio MCP. Arquiteturas Neurais A arquitetura de uma RNA é composta por neurônios e conexões, que simulam as sinapses. Cada um dos neurônios (nodos) executam funções simples, mas quando combinados resultam na estrutura de uma RNA capaz de solucionar problemas complexos. Uma rede do tipo feed-foward é apresentada na Figura 4.2, onde cada nodo tem a função do nodo MCP apresentado na Figura 4.1. Esta rede possui n entradas, duas camadas ocultas de nodos, uma camada de saída com P saídas. f1(x) W1 1 W2 1 W3 f3(x) 2 2 1 Saidas Entradas 1 f2(x) 2 3 3 P N K M 1 Camada 1 1 1 Camada 3 Camada 2 Figura 4.2. Modelo de uma RNA feed-foward do tip MLP. Basicamente, uma rede é subdividida em camadas: camada de entrada, camadas intermediárias ou escondidas e camada de saída. Um exemplo desse arranjo é expresso na Figura 4.2. A topologia mais simples de uma RNA apresenta uma única camada. As redes MLPs são uma topologia específica na área de RNAs. O funcionamento de uma rede MLP é síncrono, ou seja, dada uma entrada (um vetor) esta é propagada para a saída multiplicada pelos pesos de cada camada, aplicando-se a função de ativação e propagando-se esse valor para a camada seguinte até que a camada de saída seja atingida. Por ser constituída por um conjunto de nodos MCPs, pode-se definir funções de ativação diferenciadas para cada nodo da MLP. Geralmente, definem-se funções de ativação iguais em uma mesma camada. É necessário lembrar que uma rede que apresenta somente funções de ativação lineares nas camadas intermediárias é equivalente a uma rede de uma única camada. A topologia da MLP mais utilizada apresenta uma camada escondida e é capaz de implementar qualquer função multivarivável contínua [Cyb89], ou seja, isto representa a capacidade universal de aproximação de funções das RNAs. O Aprendizado O aprendizado das RNAs é obtido por meio de exemplos, dos quais o algoritmo é capaz de extrair o conhecimento necessário para a resolução do problema em questão. O conhecimento obtido é armazenado nos pesos da RNA para, posteriormente, gerar a resposta da rede para novos exemplos. O aprendizado em sistemas biológicos envolve ajustes nas sinapses existentes entre os neurônios. De forma similar, o aprendizado em RNAs envolve o ajuste iterativo dos pesos de suas conexões por meio da apresentação de um conjunto de exemplos de treinamento. O ajuste dos pesos é realizado pela utilização de um algoritmo de aprendizado, seguindo um certo paradigma de aprendizado. As regras de ajuste dos pesos podem ser categorizadas da seguinte forma: Correção de Erros: o ajuste dos pesos é realizado de modo a minimizar o erro da resposta rede para os exemplos de treinamento; Hebbiano: o ajuste dos pesos está associado à correlação dos valores de saída produzidos pelos nodos conectados; Competitivo: os nodos da rede competem entre si para definir qual destes nodos produzirá a resposta da rede; Boltzman: método estocástico baseado na termodinâmica e teoria da informação. Além disto, existe o paradigma de aprendizado no qual estas regras de ajuste podem ser aplicadas. Os paradigmas de aprendizado computacional podem ser definidos como: Aprendizado Supervisionado: caracterizado pela existência de um professor externo à rede que tem a função de monitorar a resposta yi da mesma para cada conjunto de entrada xi . O ajuste é feito de modo que a resposta da rede aproxime-se da saída desejada ydi ; Aprendizado por Reforço: caracterizado por um processo de punição e recompensa da rede para cada resposta obtida. O conjunto de treinamento é formado somente pelos exemplos de entrada xi , mas há existência de um crítico analisando as respostas da rede; Aprendizado Não-Supervisionado: é caracterizado pela inexistência das saídas desejadas e de um crítico das respostas. O conjunto de treinamento é composto somente pelos exemplos de entrada e, por meio deles, a rede identificará as características estatisticamente relevantes, tornando possível o agrupamento dos exemplos semelhantes. Espera-se, então, que uma rede treinada com alguns exemplos estatisticamente representativos seja capaz de apresentar saídas aceitáveis para novos exemplos. A isto dá-se o nome de generalização. A Capacidade de Generalização Em problemas de aprendizado, o conjunto de treinamento é composto por uma amostragem do problema real. Para este conjunto limitado de exemplos do problema, a rede deve ser capaz de obter uma aproximação da função que gere estas amostras (exemplos). O resultado do treinamento pode ser uma rede sobreparametrizada, quando a rede possui mais parâmetros que o necessário para o problema. Entretanto, uma rede torna-se subparametrizada quando apresenta menos parâmetros que o necessário para aproximar-se da função geradora das amostras. Ambos os fenômenos, a sobreparametrização e a subparametrização, influenciam nas respostas das redes. Com isto, a rede perde sua capacidade de generalização. O problema do ajuste de modelos neurais e de equilíbrio entre redes sub e sobreparametrizadas foi descrito formalmente em [GBD92]. Uma rede capaz de apresentar boa capacidade de generalização possui um estrutura adequada ao problema em questão, de modo que apresente respostas coerentes para novos exemplos de entrada cuja saída seja desconhecida. Modelos Neurais Os primeiros modelos de redes são conhecidos como a rede Perceptron [Ros58] e a Adaline [WH60]. A rede Perceptron utiliza o algoritmo de aprendizado supervisionado baseado no ajuste dos pesos pelo método da correção de erros. Frank Rosenblatt, o autor do artigo que descreve a rede Perceptron, mostrou em um teorema que, se o Percetron pode solucionar um dado problema, então o algoritmo por correção de erros irá obter os pesos necessários para a solução do problema. Já a rede Adaline, originada quase que em paralelo com o modelo Perceptron, utiliza o ajuste dos pesos w por meio da Regra Delta, conforme a Equação 1: w(k+1) = w(k) + η.e(k) . f 0 (h(k) ).x(k) (1) onde f 0 (h(k) ) é a derivada primeira da função de ativação do nodo, e(k) é o erro da resposta da rede e η é conhecida como a taxa de aprendizado. As redes Perceptron foram criticadas por sua limitação computacional em solucionar somente problemas linearmente separáveis [MP69]. Para problemas não linearmente separáveis, foi necessária a construção de redes com camadas intermediárias. Em [RHW86] foi descrito um novo algoritmo de treinamento de redes Muti-Layer Perceptron. Este algoritmo, denominado Backpropagation, têm importância histórica fundamental para a comunidade de RNAs por ser o grande responsável pela retomada das pesquisas, até então praticamente inativas. O algoritmo Backpropagation apresenta duas fases: a fase feedfoward e a fase backward. O algoritmo backpropagation é uma generalização da Regra Delta das redes Adaline conforme a Equação 2: w(k+1) = w(k) − η.∇J(k) (2) 2 p A função de custo J(k) é definida pela equação J = 21 ∑i=1 d i − yi , sendo a saída y da rede uma função dos pesos e das funções de ativação. O ajuste dos pesos é realizado em duas etapas: propagando-se a entrada da rede para a sua saída (forward), calculandose o erro e propagando-o novamente para a entrada (backward). Para uma rede de duas camadas, a atualização dos pesos é feita da seguinte maneira para os nodos de saída: w ji(k+1) = w ji(k) + η d j(k) − y j(k) f 0 (net j(k) )xHi(k) (3) onde net j é a saída linear do nodo j da camada de saída e xH é a saída dos nodos da camada escondida após a aplicação da função de ativação. Para os nodos da camada escondida: p h whji(k+1) = whji(k) + η.x(k) . fH0 (ri(k) ). ∑ δ j(k) .w ji(k) (4) j=1 onde wh são os pesos da camada escondida, xh é a entrada da RNA, fH0 é a derivada da função de ativação da camada escondida e ri é a saída linear do neurônio i da camada escondida. Uma descrição detalhada das equações de ajuste dos pesos para cada camada é amplamente encontrada na literatura [BCL00]. As desvantagens do algoritmo Backpropagation consistem na sua baixa velocidade de convergência e na sua limitação de busca de soluções, pois trata-se de um algoritmo de busca local. Tal fato é observado na própria formulação do algoritmo. Por se tratar de um algoritmo que depende somente do gradiente local, caso haja um mínimo local próximo1 , o algoritmo ficará preso. Uma das maneiras de melhorar a resposta de uma rede utilizando esse algoritmo consiste no treinamento de múltiplas redes com pesos inicializados aleatoriamente. Nesse caso, a probabilidade de uma rede convergir para uma região próxima ao mínimo global é maior. Entretanto, tal procedimento apresenta um elevado custo computacional e não é capaz de garantir uma boa solução. O Algoritmo 1 apresenta os passos para o ajuste dos pesos de uma Rede Neural Artificial. 1 região de gradiente nulo Algoritmo 1 Algoritmo Backpropagation 1: Inicialize os pesos da rede (valores aleatórios); 2: repete 3: Erro = 0; 4: para cada padrão de treinamento faça 5: para cada camada i da rede, i = 1, 2, · · · , n faça 6: para cada nodo ni j da i-ésima camada faça 7: Calcule saída y produzida do nodo; 8: fim para 9: fim para 10: e = saidadese jada − y; 11: para cada camada i da rede, i = n, n − 1, · · · , 1 faça 12: para cada nodo ni j da i-ésima camada faça 13: Ajuste os pesos do nodo; 14: fim para 15: fim para 16: Erro = Erro + e; 17: fim para 18: até Erro > ε Aprendizado Multiobjetivo Para o controle da generalização, o aprendizado das RNAs deve levar em conta algum outro objetivo, além do erro do conjunto de treinamento. Uma abordagem para o treinamento de RNAs por meio de otimização multiobjetivo foi proposta por [RT00]. Esta abordagem utiliza, além da soma do erro quadrático ∑ e2 do conjunto de treinamento, a norma euclidiana kwk do vetor de pesos da RNA. Como mostrado em [RT00], os objetivos ∑ e2 e kwk são conflitantes e decisivos na definição da qualidade de modelos neurais. A soma dos erros define quão próximo do conjunto de treinamento, que define o problema, a resposta da RNA está. Quanto menor a norma dos pesos, mais suave deverá ser a resposta do modelo neural. A medida da norma, portanto, é uma medida da suavidade desta respota. Baseado no princípio que as soluções de melhor generalização devem ter um mínimo kwk para um ∑ e2 fixo, e um mínimo ∑ e2 para um kwk fixo, o algorimo multiobjetivo proposto por [RT00] procura por soluções dentro do Conjunto Pareto-ótimo [CH83, Tak03]. A Figura 4.3 mostra uma forma genérica do conjunto Pareto no espaço dos objetivos. Embora o conjunto Pareto possa apresentar alguma variação de acordo com o problema, o esquema da figura realça a característica de os mesmo serem objetivos conflitantes. O conjunto Pareto é composto por soluções em que um dos objetivos não pode ser mais minimizado sem que o outro aumente. O conjunto Pareto se constitui em um fronteira entre as soluções factíveis (conjunto2) e as não-factíveis (conjunto1). Deste modo, todas as soluções implementadas estarão acima da fronteira do conjunto. É razoável imaginar, portanto, que as soluções Pareto-ótimas se constituem no conjunto restrito adequado para a busca da solução de melhor generalização. Norma conjunto2 Conjunto conjunto1 Erro Figura 4.3. Conjunto Pareto-ótimo no espaço de objetivos erro e norma. O algorimo multiobjetivo, o MOBJ [RT00], utiliza métodos de otimização multiobjetivo para encontrar soluções Pareto-ótimas. Dentre as quais, aquela que apresentar o menor erro de validação ou menor auto-correlação [Med04] é, portanto, selecionada como a rede de melhor capacidade de generalização dentre as redes geradas pelo algoritmo. As RNAs têm sido utilizadas com sucesso em inúmeras aplicações de classificação de padrões, tarefas de previsão, aproximação de funções, modelagem de processos físicos entre outras aplicações. Um dos problemas para quem as utiliza é a dificuldade de definição dos seus parâmetros, por exemplo: números de nodos de cada camada, o tipo de função de ativação, a taxa de aprendizado. É preciso ficar claro que existem vários modelos de RNAs e que, neste texto, nos resumimos a detalhar o modelo MLP. Porém, para cada tipo de problema haverá um modelo mais adequado que outro. Entre outros modelos podemos citar: os Mapas AutoOrganizáveis (SOM), as Redes de Funções de Base Radial (RBFs), as redes de Hopfield [Hay94]. 4.2.2. Sistemas Imunológicos Artificiais - SIAs Entre os modelos mais recentes com inspiração biológica encontram-se os Sistemas Imunológicos Artificiais (SIA) [CVZ00, dCT02, SHF97]. Estes sistemas são compostos por metodologias inteligentes para a solução de problemas do mundo real [Das98]. O Sistema Imunológico é de fundamental importância para os seres vivos e, por isso, precisa ser extremamente eficiente. É um sistema no qual existem diferentes componentes e mecanismos atuantes. Alguns destes elementos são otimizados para defesa de um único agente infeccioso, outros são projetados para atuar em vários agentes infecciosos. É um sistema extremamente redundante, o que significa que podem existir diferentes mecanismos atuantes contra um único elemento estranho no organismo. Do ponto de vista da computação e da engenharia, a presença de mecanismos de memória e aprendizagem são características fundamentais do Sistema Imunológico Natural. Isto significa que o nosso organismo é capaz de extrair informações úteis dos agentes infecciosos e “memorizá-las” para futuros casos de infecções pelo mesmo agente ou similares. A seguir, antes de abordarmos os Sistemas Imunológicos Artificiais, daremos uma breve descrição do mecanismo de defesa do nosso organismo. 4.2.2.1. Mecanismo Básico de Defesa do Sistema Imunológico Biológico Nosso organismo é protegido por uma grande variedade de células e moléculas operando em harmonia, até que um antígeno apareça e torne-se o alvo principal do Sistema Imunológico. Pela Figura 4.4 podemos ter uma noção do mecanismo de reconhecimento de um antígeno e a ativação do Sistema Imunológico. As células apresentadoras de antígeno Figura 4.4. Esquema simplificado dos mecanismos de reconhecimento e ativação do Sistema Imunológico. (APCs) especializadas circulam pelo corpo ingerindo e digerindo patógenos encontrados, transformando-os em peptídeos antigênicos. Parte destes peptídeos ligam-se à moléculas do complexo de histocompatibilidade principal (MHC) e são apresentados sob a forma de um complexo MHC/peptídeo. As células T têm a função de reconhecer diferentes complexos MHC/peptídeo. Uma vez ativadas, as células T dividem-se e secretam linfocinas (sinais químicos) que mobilizam outros componentes do Sistema Imunológico. Diferente dos receptores das células T, entretanto, os receptores das células B são capazes de reconhecer partes livres solúveis dos antígenos, sem as moléculas do MHC. As células B, que também possuem moléculas receptoras de especificidade única em suas superfícies, respondem a estes sinais. As células B ativadas dividem-se e diferenciam-se em plasmócitos, secretando anticorpos em altas taxas. A ligação dos anticorpos aos antígenos encontrados faz com que o patógeno seja neutralizado, levando à sua destruição. Algumas células B e T transformam-se em células de memória, as quais permanecem na circulação garantindo uma resposta rápida e eficaz contra uma futura exposição àquele antígeno [dC01]. 4.2.2.2. A Modelagem do Sistema Artificial No Brasil, o primeiro tutorial sobre Sistemas Imunológicos Artificiais e Suas Aplicações foi proferido pelo, então, estudante de doutorado em Engenharia Elétrica da UNICAMP, Leandro Nunes de Castro, no VI Simpósio Brasileiro de Redes Neurais (SBRN), realizado no Rio de Janeiro em novembro de 2000 1 . No ano de 2001, a revista IEEE Transactions on Evolutionary Computation trouxe uma edição especial sobre os Sistemas Imunológicos Artificiais. A expectativa é que estes modelos, ainda que muito simplificados, demonstrem as vantagens do sistema natural, considerado o nosso sistema mais complexo. Dentre elas destacamos algumas [dCT02, Cor05, FPP86]: Reconhecimento de Padrões: A facilidade de construção de moléculas específicas para cada antígeno é exclusividade do Sistema Imunológico; Auto-Identificação: O Sistema Imunológico tem a incrível capacidade de identificar qualquer corpo estranho e de eliminá-lo; Autonomia: O funcionamento dos seus componentes é completamente autônomo, independente de qualquer elemento central. Possui a capacidade de se auto-reparar parcialmente, substituindo células deficientes; Adaptação Dinâmica: O sistema não é capaz de armazenar células e moléculas capazes de detectar todos os corpos estranhos possíveis. Mas tem um funcionamento que, devido à elevada taxa de morte e produção de novas células, é capaz de se adaptar rapidamente a novos agentes desconhecidos; Aprendizagem e Memória: Apesar da limitada capacidade do sistema, quando é detectado um corpo estranho, as células responsáveis por detectá-lo e eliminá-lo são mais estimuladas a reproduzir-se e permanecem no sistema por mais tempo. Este funcionamento é semelhante ao da memória. A elaboração de um algoritmo baseado na imunologia consiste de 3 aspectos: • Representação dos componentes; • Funções de afinidade entre os componentes, quantificando a interação entre eles; • Conjunto dos algoritmos imunológicos que controlam o comportamento do sistema. Para cada aspecto, será feita uma breve descrição do que é realizado pelo sSstema Imunológico Artificial. 1 Hoje o prof. Dr. Leandro Nunes de Castro leciona na Universidade Católica de Santos, em Santos-SP. Representação dos Componentes A representação matemática de um anticorpo e um antígeno contribui para a definição do tipo de distância empregado na avaliação da função de afinidade. A forma generalizada de uma molécula m, seja ela um anticorpo (Ab) ou mesmo um antígeno (Ag), pode ser representada por uma cadeia de L atributos m = hm1 ; m2 ; · · · ; mLi. Os atributos podem ser de qualquer tipo: inteiros, reais, bits ou outros símbolos, dependendo da aplicação do SIA. A representação dos componentes determina o tipo de função de afinidade ideal para o algoritmo. Então, os anticorpos (moléculas do sistema), e os antígenos (moléculas invasoras do organismo), são modelados por cadeias de L atributos do espaço de representação do problema. Funções de Afinidade Nesta fase, o objetivo é encontrar uma função que relacione os anticorpos e os antígenos. Esta medida está condicionada à representação dos componentes e define o grau de complementariedade entre eles. A afinidade entre um anticorpo e um antígeno é uma medida de distância (ou similaridade) entre as cadeias de atributos, por exemplo, a distância Euclidiana. Como a melhor função de afinidade é a que possui a maior complementariedade entre as duas cadeias, quanto maior for a distância entre as moléculas, maior será a afinidade entre elas. A Figura 4.5 representa a idéia da complementariedade entre as moléculas. Figura 4.5. Esquema do Reconhecimento via a Idéia de Complementariedade. Considerando a distância Euclidiana, se um anticorpo for representado pela cadeia Ac = hAc1 , Ac2 , · · · , AcL i e um antígeno representado pela cadeia Ag = hAg1 , Ag2 , · · · , AgL i, então a função de afinidade entre estas moléculas pode ser representada pela Equação 5, s L D= ∑ (Abi − Agi)2 (5) i=1 ou então pela distância de Manhatan, conforme a Equação 6: L D = ∑ |Abi − Agi | i=1 (6) Para a representação binária dos atributos de cada cadeia, a função de afinidade é melhor obtida utilizado-se a distância de Hamming: L D = ∑ δi (7) i=1 onde δi = 1 se Abi 6= Agi ou δi = 0, caso contrário. Define-se, ainda, um limiar ε para a afinidade (ou complementariedade) a partir do qual considera-se que houve reconhecimento. Isto é, se D ≥ ε diz-se que o anticorpo reconhece o antígeno. A medida de afinidade funciona como uma função de avaliação da molécula. As que têm melhor avaliação são mais selecionadas pelo operador de reprodução. Porém, nada obriga que a avaliação seja feita apenas com base na afinidade entre pares de moléculas. Podem considerar-se outros fatores, como o número de antígenos reconhecidos por um anticorpo ou o grau de interação do anticorpo com outros anticorpos. Quando mais fatores são levados em consideração, é comum atribuir a avaliação por nível de estimulação, englobando todos os fatores. Algoritmos Imunológicos Nesta fase abordamos os algoritmos computacionais que modelam os diferentes mecanismos e teorias imunológicas. Entre eles destacam-se: os Modelos de Medula Óssea (MMO), o Algoritmo de Seleção Negativa (ASN), o Algoritmo de Seleção Clonal (CLONALG) e os Modelos Contínuos da Rede Imunológica [dC01]. De acordo com [dCT03], estes algoritmos podem ser classificados em duas famílias: Modelos baseados em Populações: definem o modo como os componentes do sistema interagem com os agentes externos; Modelos de Redes Imunológicas: usados para simular redes imunológicas, incluindo sua estrutura, dinâmica e metadinâmica. Os modelos de medula óssea são utilizados para a geração de cadeias de atributos que representam os repertórios imunológicos; o ASN possui aplicações em detecção de anomalias, como segurança computacional e predição de séries temporais; o algoritmo CLONALG tem várias aplicações no reconhecimento de padrões e otimização multimodal e combinatorial; e os modelos contínuos de rede imunológica são normalmente empregados em processos de robótica e controle [CVZ00]. Dos modelos de algoritmos citados, destacaremos dois deles: o Algoritmo de Seleção Negativa e o de Seleção Clonal. Algoritmos Imunológicos: Algoritmo de Seleção Negativa - ASN Este algoritmo foi inicialmente projetado para o processo de detecção de anomalias, como a proteção de sistemas de informação. O ASN é executado em duas fases conforme o Algoritmo 2: Algoritmo 2 Algoritmo da Seleção Negativa - ASN 1: Defina o conjunto S de cadeias próprias que deseja-se proteger; 2: Gere cadeias P aleatoriamente e avalie a afinidade entre elas e as S do sistema; 3: para Cada cadeia P gerada faça 4: se Afinidade Di de Pi ≥ εa então 5: A cadeia P reconhece o próprio sistema e deve ser eliminada; 6: senão 7: Armazene-a em um conjunto R de detectores; 8: fim se 9: fim para 10: Dado o conjunto S; 11: para Cada cadeia S a ser protegida faça 12: se Afinidade Di (Si , Ri ) ≥ εb então 13: Um elemento não próprio foi identificado; 14: fim se 15: fim para O algoritmo ASN é capaz de realizar tarefas de reconhecimento de padrões armazenando informações do conjunto complementar que se deseja proteger. Deste modo, o padrão não-próprio é reconhecido como um elemento diferente do próprio sistema. Cadeias Próprias (S) Gere Cadeias Aleatoriamente (R0) Match Conjunto de Detectores (R) Não Conjunto de Detectores (R) Sim Rejeita (a) Cadeias Protegidas (S) Match Não Sim Não-Próprio Detectado (b) Figura 4.6. Diagrama de Fluxos do Algoritmo de Seleção Negativa. (a) Censoriamento e (b) Monitoramento das cadeias protegidas. Algumas observações sobre o ASN: • O tamanho do conjunto de detectores não cresce necessariamente com o número de cadeias a serem protegidas; • A probabilidade de detecção de anomalias aumenta exponencialmente com a quantidade de algoritmos de detecção independentes; • O processo de detecção é simétrico; • A geração de detectores apresenta um custo exponencial em relação ao tamanho do conjunto de cadeias a serem protegidas devido a geração aleatória das cadeias do conjunto R, ocasionando repetições de várias cadeias. Algoritmos Imunológicos: Algoritmo de Seleção Clonal - CLONALG Os principais aspectos considerados para o desenvolvimento do algoritmo de seleção clonal são: manutenção das células de memória funcionalmente independentes do repertório, seleção e reprodução (clonagem) das células mais estimuladas, morte das células menos estimuladas, maturação de afinidade e reseleção dos clones com maiores afinidades antigênicas, geração e manutenção de diversidade, hipermutação proporcional à afinidade celular [dC01]. Este algoritmo pode ser utilizado em tarefas de Reconhecimento de Padrões, Aprendizagem de Máquina e Otimização. Algoritmo 3 Algoritmo da Seleção Clonal - CLONALG 1: Gere um conjunto P de candidatos a solução, composto pelo subconjunto de células de memória M mais o restante P{r} da população P = P{r} ∪ M; 2: Selecione os n melhores indivíduos P{r} da população P, com base em uma medida de afinidade; 3: Reproduza os indivíduos selecionados gerando uma população temporária de clones. A quantidade de filhos de cada indivíduo é diretamente proporcional à sua afinidade; 4: Submeta a população de clones a um esquema de hipermutação, em que a taxa de mutação seja proporcional à afinidade do anticorpo. Uma população de anticorpos maduros é gerada C? ; 5: Selecione os melhore indivíduos de C? para compor o conjunto de memória M; 6: Susbstitua d anticorpos por novos indivíduos. O processo de seleção do algoritmo CLONALG pode utilizar métodos probabilísticos para selecionar os indivíduos da população. A Figura 4.7 mostra a seqüência de passos do algoritmo CLONALG. O passo de hipermutação do algoritmo de seleção clonal utiliza um mecanismo denominado maturação da afinidade. Este mecanismo faz com que o algoritmo aumente globalmente a afinidade entre os anticorpos e os antígenos. O aspecto distintivo da hipermutação por maturação de afinidade é que cada anticorpo tem uma taxa de mutação independente, que é uma função da sua afinidade com o antígeno. Deste modo, os anticorpos que já possuem uma afinidade grande são pouco alterados. Por outro lado, os anticorpos que estão mais afastados de reconhecer a solução ótima são modificados de forma mais drástica, na expectativa de se pesquisarem outras zonas do espaço de soluções. É necessário definir uma função de dependência entre a taxa de mutação e a afinidade. Quando estamos trabalhando com problemas de otimização, normalmente não conhecemos o ótimo previamente. De modo que é conveniente que a função da taxa de hipermutação seja dependente da afinidade normalizada D? = DD . Uma função freqüenmax temente utilizada para este fim é: Nd P {r } M Seleção P {n } Re-Seleção Clonagem C Maturação C * Figura 4.7. Diagrama do Algoritmo de Seleção Clonal - CLONALG. pkij (t) = α(D? ) = exp(−ρD? ) (8) onde ρ é um parâmetro que define a curvatura da função. Além dos modelos de SIA acima descritos, existe a abordagem híbrida com os Algoritmos Genéticos, as Redes Neurais Artificiais, os Sistemas Nebulosos (“Fuzzy”). Os SIAs constituem-se numa técnica muito poderosa e que deverá ainda ser melhor explorado. Vários resultados interessantes, porém, já foram obtidos na aplicação dos SIAs em reconhecimento de padrões [DN00], mineração de dados, robótica, otimização, controle, detecção de falhas [DKWB04], escalonamento e segurança de sistemas de informação [KB99], etc [dCT03, CVZ00]. 4.2.3. Computação Evolucionária Esta seção apresenta uma breve introdução aos principais conceitos dos sistemas baseados na Teoria da Evolução Natural e Genética, conhecida como Computação Evolutiva ou Evolucionária. Entre as subáreas da Computação Evolutiva, destacamos os Algoritmos Genéticos, mas ainda podemos citar as Estratégias de Evolução e a Programação Genética. As pesquisas nesta área tiveram início na década de 50, tratando de sistemas para a resolução de problemas que utilizam modelos computacionais baseados na teoria da evolução natural [Bac96]. Em 1996, Back propõe o agrupamento dos sistemas de Computação Evolutiva em três grandes categorias: Algoritmos Genéticos: cujos princípios podem ser encontrados em trabalhos de John Holland nos anos 60 [Hol92]. Os algoritmos genéticos foram desenvolvidos com o propósito de formalizar matematicamente e explicar rigorosamente processos de adaptação em sistemas naturais, e desenvolver sistemas artificiais que buscam simular os mecanismos originais encontrados em sistemas naturais [Zub00]; Estratégias Evolutivas: propostas na década de 60 com o objetivo de solucionar problemas de otimização de parâmetros; Programação Genética: uma extensão dos Algoritmos Genéticos e que foi desenvolvida com o intuito de evoluir um conjunto de programas de computador, ao invés de uma cadeia de bits. Pelo limite de espaço deste texto, abordaremos somente os Algoritmos Genéticos (AGs) por apresentarem maiores aplicações no campo da engenharia. Antes disso, faremos uma rápida introdução à Teoria da Evolução Natural e à Genética, necessária para compreensão da nomenclatura e inspiração dos AGs. 4.2.3.1. Evolução Natural e Genética Em meados do século XIX, o mundo acreditava que cada espécie havia sido criada separadamente por um ser supremo ou por meio de geração espontânea. O trabalho do naturalista Carolus Linnaeus sobre a classificação biológica de organismos despertou o interesse pela similaridade entre certas espécies, levando a acreditar na existência de alguma relação entre elas. Outros naturalistas como Jean Baptiste Lamark e Thomas Robert Malthus desenvolveram trabalhos que vieram a influenciar a teoria da seleção natural. Após 20 anos de observações e experimentos, Charles Darwin apresentou, em 1859, o livro A origem das espécies por meio da seleção natural com sua teoria completa, sustentada por muitas evidências colhidas durante suas viagens. Seu trabalho influenciou não somente o futuro da biologia, mas da botânica, zoologia, os pensamentos políticos, religiosos, filosóficos e econômicos. A Teoria da Evolução e a Computação nasceram praticamente na mesma época: Charles Babbage, um dos precursores da computação moderna e amigo pessoal de Darwin, desenvolveu sua máquina analítica em 1833. Por volta de 1900, Gregor Mendel desenvolveu seus trabalhos sobre os princípios básicos de herança genética,os quais tiveram grande influência sobre os trabalhos futuros relacionados à evolução. A moderna teoria da evolução combina a genética e as idéias de Darwin e Wallace sobre a seleção natural, criando o princípio básico de Genética Populacional. Nas décadas de 50 e 60, muitos biológos começaram a desenvolver simulações computacionais de sistemas genéticos. Entretanto, foi através de John Holland que desenvolveramse as primeiras pesquisas sobre o tema. Em 1975 foi publicado o livro Adaptation in Natural and Artificial Systems, hoje considerado como referência básica sobre Algoritmos Genéticos [Hol92]. A partir de então, a computação evolucionária vêm sendo aplicada com sucesso nos mais diversos problemas de otimização e aprendizado de máquina [Rez03]. 4.2.3.2. Algoritmos Genéticos Destacaremos agora, os principais aspectos e as características dos Algoritmos Genéticos que os tornam ferramentas interessantes de otimização para inúmeros problemas [Gol89, GH88]. Otimização é a busca da melhor solução para um dado problema. Consiste em tentar várias soluções e utilizar a informação obtida neste processo de forma a encontrar soluções cada vez melhores. Um exemplo simples de otimização é a melhoria da imagem das televisões com antena acoplada no próprio aparelho. Através do ajuste manual da antena, várias soluções são testadas, guiadas pela qualidade de imagem obtida na TV, até a obtenção de uma resposta ótima, ou seja, uma boa imagem. As técnicas de otimização geralmente apresentam: • Um espaço de busca, onde estão todas as possíveis soluções do problema; • Uma função objetivo (algumas vezes chamada de função de aptidão na literatura de AGs), utilizada para avaliar as soluções produzidas, associando uma nota a cada uma delas. As técnicas de otimização tradicionais iniciam seu processamento com um único candidato que, iterativamente, é manipulado utilizando algumas heurísticas, normalmente estatísticas, diretamente associadas ao problema a ser solucionado. Na prática, apesar de não serem métodos suficientemente robustos, são amplamente utilizados com sucesso em inúmeras aplicações. Por outro lado, os AGs operam sobre uma população de soluções candidatas em paralelo. Assim, elas podem fazer a busca em diversas áreas do espaço de solução. Como resultado, os AGs têm mais chances de atingir as áreas mais promissoras do espaço de busca. Os AGs diferem-se dos métodos tradicionais de busca e otimização principalmente em quatro aspectos: • trabalham com uma codificação do conjunto de parâmetros e não com os próprios parâmetros; • trabalham com uma população e não com um único ponto; • utilizam informações de custo ou recompensa e não derivadas ou outro conhecimento auxiliar; • utilizam regras de transição probabilísticas e não determinadas. O primeiro passo dos AGs é a geração de uma população inicial de indivíduos (possíveis soluções). Durante o processo evolutivo, esta população é avaliada e cada indivíduo recebe uma nota (denominada de aptidão), refletindo a qualidade da solução que ele representa. Em geral, os indivíduos mais aptos são selecionados e os menos aptos são descartados. Os indivíduos selecionados podem sofrer modificações em suas características fundamentais através dos operadores de cruzamento e mutação, gerando descendentes Algoritmo 4 Algoritmo Genético 1: T ⇐ 0; 2: Gere população inicial P(0); 3: para Cada indivíduo i da população atual P(t) faça 4: Avalie aptidão do indivíduo i; 5: fim para 6: enquanto Critério de Parada não for satisfeito faça 7: t = t + 1; 8: Selecione a população P(0) a partir de P(t − 1); 9: Aplique operadores de cruzamento sobre P(t); 10: Aplique operadores de mutação sobre P(t); 11: Avalie P(t); 12: fim enquanto para a próxima geração. Este processo é repetido até que uma solução satisfatória seja encontrada. O Algoritmo 4 apresenta um ciclo de um Algoritmo Genético: Apesar de aparentemente simples, estes algoritmos são capazes de resolver problemas complexos de uma maneira muito elegante. Além disso, não estão limitados por suposições do espaço de busca, por características de descontiuidades, multimodalidade, diferenciabilidade da função de custo do problema abordado [Tak03]. A seguir, descreveremos os aspectos que devem ser considerados na implementação de um AG. Representação dos Parâmetros O primeiro aspecto é a representação, ou seja, a codificação escolhida deve mapear o espaço de soluções no espaço de codificação utilizado, preservando as características do problema. Uma codificação inadequada pode acarretar em convergência prematura do algoritmo, resultando em um ótimo local. A representação do indivíduo poder ser feita por inteiros, reais ou binários. A representação binária é historicamente importante, uma vez que foi utilizada nos trabalhos pioneiros de Holland [Hol92]. Além disso, é a representação mais aplicada por ser facilmente utilizada, manipulada e simples de ser analisada teoricamente. Porém, alguns problemas de otimização necessitam que seus parâmetros sejam codificados, por exemplo, com números reais. Processo de Seleção De acordo com o princípio da teoria de Darwin: “Quanto melhor um indivíduo se adaptar ao seu meio ambiente, maior será sua chance de sobreviver e gerar descendentes”. Portanto, o AG deverá, a cada geração encontrar um população de indivíduos mais aptos. O AG começa com um população de N indivíduos, que podem ser gerados aleatoriamente. Inspirado no processo de seleção natural de seres vivos, o AG seleciona os melhores indivíduos da população inicial (aqueles de alta aptidão) para gerar os filhos (que são variantes dos pais) através dos operadores de cruzamento e mutação. Uma população intermediária é utilizada para alocar os indivíduos pais selecionados. Geralmente, os pais são selecionados com probabilidade proporcional à sua aptidão. Portanto, a probabilidade de seleção pi de um indivíduo si com aptidão fi é dada por: pi = fi N ∑i=1 fi (9) Dois métodos são bem conhecidos para a realização da seleção dos indivíduos: o Método da Roleta e a Seleção por Torneio. Na seleção por roleta, cada indivíduo é representado em uma roleta proporcionalmente à aptidão. Portanto, os indivíduos com maior aptidão ocupam maior fatia da roleta. O Algoritmo 5 descreve o método da roleta. Algoritmo 5 Seleção pelo Método da Roleta 1: Total ⇐ ∑N i=1 f i ; 2: rand ⇐ randômico(0, total); 3: total parcial ⇐ 0; 4: i ⇐ 0; 5: repete 6: i ⇐ i + 1; 7: total parcial ⇐ total parcial + fi ; 8: até total parcial ≥ rand 9: Retornar o indivíduo si Quando o método de seleção por torneio é utilizado, n indivíduos são escolhidos aleatoriamente, com a mesma probabilidade. O indivíduo com maior aptidão, entre os escolhidos, é selecionado para compor a população intermediária. O processo se repete até que se consiga a população intermediária com o número de indivíduos desejados. Uma estratégia que busca melhorar a convergência dos AGs é o Elitismo, que passa um certo número de melhores indivíduos para a próxima geração. Geralmente, a elite tem um tamanho reduzido, 1 a 2 indivíduos para cada 50 indivíduos. Esta escolha pode ser feita diretamente ou por sorteio [CDR+ 04]. Cruzamento e Mutação Os operadores de cruzamento e a mutação são os principais mecanismos de busca dos AGs para explorar regiões desconhecidas do espaço de busca. O cruzamento é aplicado a um par de indivíduos retirados da população intermediária, gerando dois indivíduos filhos. Cada um dos indivíduos pais tem sua cadeia de bits cortada em uma posição aleatória produzindo duas cabeças e duas caudas. As caudas são trocadas gerando dois novos indivíduos. O operador de cruzamento pode ser apresentado esquematicamente pela Figura 4.8. O operador de mutação é responsável por modificar aleatoriamente um ou mais bits da cadeia que representa um indivíduo. A probabilidade de mutação é chamada de Ponto de Cruzamento Pai 1 1 1 1 0 0 0 1 0 Pai 2 1 0 0 1 1 1 0 1 Filho 1 1 1 1 0 0 1 0 1 Filho 2 1 0 0 1 1 0 1 0 Figura 4.8. Esquema de representação do operador de cruzamento. taxa de mutação. Os valores para a taxa de mutação são geralmente pequenos. O objetivo da mutação é evitar que as soluções obtidas se concentrem em um ótimo local, explorando regiões desconhecidas do espaço de busca. Considerando o caso particular de uma codificação binária, podemos exemplificar o operador de mutação com a Figura 4.9. Ponto de Mutação 0 1 Pai 1 1 1 1 0 0 0 Pai 1 1 1 1 0 0 1 0 1 Figura 4.9. Esquema de representação do operador de mutação. 4.2.4. Inteligência de Enxames O comportamento de insetos sociais tem inspirado o desenvolvimento de técnicas baseadas nessas organizações para solucionar problemas complexos [ESK01, BDT99]. Essa abordagem busca abstrair e simular algumas das características encontradas em populações de seres vivos como a autonomia, a auto-organização, a emergência e o funcionamento distribuído. Algumas colônias já vem sendo estudadas há algum tempo como as formigas, abelhas, aves e lagartos. Por serem, por enquanto, a colônia mais aplicada para solução de problemas de otimização discreta, nosso texto estará concentrado somente nas Colônias de Formigas. Otimização por Colônia de Formigas - ACOs Esta seção é destinada ao método de otimização heurístico baseado no comportamento social de colônias de formigas [DMC91, DG97b, DD99b]. A inspiração para este método partiu da experiência com a colônia de formigas Iridomyrmex humilis a uma fonte de alimento através de dois caminhos distintos [GADP89]. O experimento foi planejado de maneira que as formigas, ao percorrerem ambas as direções, tinham sempre que optar por um ou outro caminho. Após uma fase transitória, Figura 4.10. Inteligência Coletiva de Pássaros e Peixes. a maioria das formigas acabava por escolher o mesmo caminho. A probabilidade de selecionar o caminho de menor distância aumentava à medida em que a diferença de tamanho entre os caminhos tornava-se maior. Figura 4.11. Esquema da Experiência com as Formigas Iridomyrmex humilis. A explicação para tal comportamento está relacionada à substância denominada feromônio, depositada pelas formigas durante sua locomoção. Quando as formigas chegam a um ponto de decisão, como a intersecção entre dois caminhos distintos, elas fazem uma escolha probabilística baseada na quantidade de feromônio presente nestes caminhos. Então, quanto maior a quantidade de feromônio em um caminho, maior a probabilidade deste ser escolhido. Inicialmente, não existe feromônio nos caminhos, portanto, a probabilidade de escolha é a mesma para ambos os caminhos. Quando os caminhos têm distâncias distintas, a taxa de chegada de formigas na fonte de alimentos vindas pelo menor caminho é maior. Sendo assim, ao iniciar a viagem de retorno ao ninho, estas formigas irão encontrar mais ferômonio sobre o menor caminho. Este fato estimulará mais formigas a seguí-lo, e assim cada vez mais, até que a grande maioria das formigas acabe optando pelo mesmo caminho. Este processo ocorre da mesma maneira no sentido inverso. O Problema do Caixeiro Viajante A primeira aplicação do algoritmo de colônia de formigas foi para o clássico problema do Caixeiro Viajante [DG97a]. Inicialmente, m formigas são distribuídas pelas cidades segundo algum critério pré-estabelecido e todos os caminhos (i, j) ∈ E são inicializados com a mesma quantidade τi j (1) > 0 de feromônio. Em seguida, cada formiga k(k = 1, · · · , m) seleciona as próximas cidades a serem visitadas, por meio da seguinte regra de decisão probabilística: pkij (t) = [τi j (t)]α [ηi j ]β se j ∈ Nik ; senão, pkij (t) = 0. α β [τ (t)] [η ] k ∑l∈Ni i j ij (10) onde: • pkij (t) ⇒ probabilidade da cidade j ser escolhida pela formiga k, atualmente situada na cidade i, durante a t-ésima iteração do algoritmo; • τi j (t) ⇒ intensidade do feromônio no caminho (i, j) ∈ E na t-ésima iteração; • α ⇒ parâmetro que regula a influência de τi j (t); • ηi j = 1 di j ⇒ visibilidade da cidade j com relação à cidade i; • di j ⇒ distância entre as cidades i e j; • β ⇒ parâmetro que regula a influência de ηi j ; • Nik (t) ⇒ conjunto de cidades ainda não visitadas pela formiga k situada na cidade i na t-ésima iteração; O processo de seleção da próxima cidade a ser visitada é repetido até que todas as formigas tenham completado um caminho interligando todas as cidades uma única vez. O processo de depósito e evaporação do feromônio ocorre do seguinte modo: τi j (t + 1) = (1 − ρ)τi j (t) + ∆τi j (t) k k sendo ∆τi j (t) = ∑m i=1 ∆τi j (t), ∆τi j (t) = (11) Q , se a formiga k percorreu o caminho (i, j) ∈ Lk (t) E; caso contrário, ∆τikj (t) = 0 onde: • t ⇒ iteração atual do algoritmo; • ρ ∈ [0, 1] ⇒ parâmetro que regula a redução de τi j (t); • ∆τi j (t) ⇒ ganho total de feromônio no caminho (i, j) ∈ E; • m ⇒ número de formigas; • ∆τikj (t) ⇒ ganho de feromônio no caminho (i, j) ∈ E, causado pela formiga k; • Q ⇒ quantidade de feromônio excretada por uma formiga a cada iteração; • Sk (t) ⇒ caminho completo que interliga todas as cidades uma única vez, descoberto pela formiga k; • Lk (t) ⇒ distância associada ao caminho completo Sk (t) descoberto pela formiga k; Todos esses procedimentos são executados a cada iteração do algoritmo baseado em colônia de formigas até que um número finito de iterações, previamente definido, seja atingido. Neste caso, a melhor solução encontrada até o momento é retornada. O Método de Colônia de Formigas Agora apresentaremos a formulação geral do método baseado em colônia de formigas, conhecido como Ant Colony Optimization - ACO, que pode ser utilizado na determinação de caminhos de custo mínimo em um grafo G = (C, L,W ) [DD99a]. O grafo G = (C, L,W ) e as restrições Ω(C, L, θ ), que juntos representam de maneira geral um problema de otimização discreto, são definidos da seguinte forma em [DD99b]: • C = {c1 , c2 , · · · , cNc } é o conjunto finito de NC componentes, como, por exemplo, as cidades do Problema do Caixeiro Viajante (TSP); • L = {lci c j |ci , c j ∈ C} é o conjunto finito de possíveis conexões entre os elementos de C. Como, por exemplo, os caminhos (i, j) ∈ E que interligam as cidades em TSP; • W é o conjunto de pesos associados, ou a C, ou a L, ou a ambos. Por exemplo, a distância di j dos caminhos (i, j) ∈ E que interligam as cidades em TSP; • Ω(C, L, θ ) é o conjunto finito de restrições atribuídas aos elementos de C e L, com o θ indicando que mudanças de restrição poderão ocorrer ao longo do tempo. Por exemplo, se uma determinada cidade for visitada em TSP, ela não poderá ser visitada novamente; • Os estados do problema são definidos por seqüências s =< a1 , a2 , · · · , ak , · · · >, com ai = ck ∈ C, k = 1, · · · , Nc ; • Caso c1 seja o último componente do estado s1 , então um estado s2 é dito vizinho a s1 , se somente se, ∃ c2 ∈ C(lc1 c2 ) ∧ (s2 =< s1 , c2 >). Por exemplo, se existe em TSP um caminho (i, j) ∈ E entre as cidades i, j ∈ E, então o estado s2 =< s1 , j > é vizinho ao estado s1 =< s0 , i >; • Caso a seqüência s =< a1 , a2 , · · · , ak >, ai , ai+1 ∈ L seja viável por satisfazer as restrições Ω(C, L, θ ), então esta seqüência constituirá uma solução viável ψ do problema abordado; • S̃ é o conjunto de todas as soluções viáveis do problema; • A cada solução viável ψ está associado um custo J(ψ) dado em função dos custos J(lci c j , θ ) das conexões lci c j ∈ E, ou dos custos J(ci , θ ) dos componentes ci ∈ C, ou de ambos. Por exemplo, dado que em TSP J(lci c j , θ ) = di j , onde di j é a distância entre a cidade i e j, então J(ψ) = ∑(i, j)∈ψ di j . Vale ressaltar que os custos J(lci c j , θ ), e por conseguinte J(ψ), podem estar parametrizados por alguma medida de tempo θ , o que não é o caso de TSP. Em um algoritmo ACO, as formigas constroem soluções representadas no grafo de forma incremental. Cada formiga parte de uma solução inicial composta de um único elemento pertencente a C e segue adicionando novos elementos até alcançar uma solução viável. Os componentes candidatos a serem adicionados são selecionados aleatoriamente a partir de uma vizinhança, definida em torno do último elemento. A escolha aleatória é feita com o uso de informações locais dos vértices e/ou conexões já visitadas. Após construir a solução viável ψ (ou enquanto a constrói), a formiga deposita feromônio sobre os componentes e/ou conexões visitadas, segundo a qualidade da solução ψ encontrada (ou que vem encontrando). Este feromônio depositado pela formiga é o que influenciará a construção da solução das demais. Algoritmo 6 Otimização por Colônia de Formigas 1: enquanto Critério de Parada não for satisfeito faça 2: se Escalonar Atividades então 3: Geração e Atividades da Fomigas( ); 4: Evaporação de Feromônio( ); 5: Atividades Opcionais( ); 6: fim se 7: fim enquanto A Otimização por Colônia de Formigas tem sido aplicada com sucesso em vários problemas, dentre eles: o problema do Caixeiro Viajante [DG97b], o roteamento em redes de telecomunicações [KESMI+ 01, BHG+ 98], o roteamento de veículos, escalonamento [CDMT94], balaceamento de cargas [SHBR96], robótica [KZ92], etc. 4.3. Robótica 4.3.1. Introdução A palavra robô tem origem da palavra tcheca robotnik, que significa servo, o termo robô foi utilizado inicialmente por Karel Capek em 1923, nesta época a idéia de um “homem mecânico” parecia vir de alguma obra de ficção. No contexto atual, um robô pode ser considerado um agente físico que executa tarefas manipulando o mundo físico. Apesar desta definição, o termo robô pode ser usado para denotar agentes lógicos muito utilizados em sistemas distribuídos. Um robô não precisa ser necessariamente inteligente, ele pode ser utilizado para realização de tarefas repetitivas como na indústria automobilística e têxtil [RN04, Mur00]. Estes robôs sem inteligência são chamados de robôs manipuladores e possuem a sua origem nas áreas de mecânica e controle. Nesse contexto, os principais problemas dos projetistas de robôs estão ligados a definição de funções para controle de uma trajetória repetível, o movimento de uma articulação etc. Geralmente, esses robôs não possuem sensores do ambiente, pois ele está inserido em um mundo imutável, onde tudo está no lugar certo e os eventos acontecem em momentos predeterminados, com alta precisão e rápida repetição. Robôs manipuladores estão ligados à automação de atividades rotineiras. Alguns exemplos de robôs manipuladores são: braços robôs, automação industrial, piloto automático etc (ver Figura 4.12) [RN04, Mur00]. Figura 4.12. Exemplo de um braço robô manipulador. Na Figura 4.13, podemos observar a evolução dos robôs desde 1960 até os dias de hoje, onde houve o surgimento de robôs com inteligência. Essa evolução foi possível por meio dos avanços alcançados na engenharia mecânica na corrida espacial e os avanços na área de visão computacional para o reconhecimento de objetos 4.12) [RN04, Mur00]. Um robô inteligente pode ser definido de maneira simples: uma criatura mecânica autônoma. Por criatura, entendemos que um robô é uma entidade com suas próprias motivações e processos de tomada de decisões. Além disso, um robô é uma criatura mecânica, pois ele é construído ou projetado pelo ser humano. Por último, um termo diretamente ligado a inteligência é a autonomia, que permite ao robô sentir, pensar e atuar com o ambiente externo de forma autônoma. Figura 4.13. Evolução histôrica dos robôs Os robôs precisam de inteligência pela necessidade de: interpretação de sensações, entendimento de situações, interação com seres humanos, recuperação de falhas, localização e aprendizado [RN04, Mur00]. Atualmente, a área de inteligência artificial possui as ferramentas necessárias para estudar esses problemas, dentre elas, destacamos: representação de conhecimento (ex: lógica de predicados), entendimento de linguagens (ex: linguagens como o Prolog), planejamento e solução de problemas (ex: Algoritmos Genéticos), busca (ex: algoritmo A? ), inferência (ex: sistemas especialistas), aprendizado (ex: redes neurais artificiais) e visão (ex: classificadores de padrões). Figura 4.14. Aplicações de robôs: entretenimento e tarefas cotidianas. Com o estudo e desenvolvimento destas áreas da inteligência artificial nos últimos anos, os robôs inteligentes já são utilizados em diversas aplicações de áreas diferentes, tais como (ver Figura 4.14): • Substituição de humanos em tarefas cotidianas (cortar grana etc.); • Ambientes arriscados: poder de fazer coisas que os humanos não conseguem (ex: vasculhar os destroços do WTC, desarmar bombas, exploração espacial); • Linha de montagem: substituição de peças, manipulação de materiais, soldagem e pintura; • Transporte: cadeira de rodas automáticas, helicópteros autônomos, navegação em auto-estradas; • Medicina: realização de cirurgias precisas no cérebro. • Entretenimento: cães robôs, futebol de robôs etc. 4.3.2. Arquitetura de Robôs Robôs inteligentes são compostos por: efetuadores, sensores, energia, controle e inteligência. Na Figura 4.15, podemos observar a arquitetura de um robô com controle remoto, ou seja, a inteligência é centralizada e não está localizada no agente. Neste caso, o operador do robô precisa de um display local e um mecanismo de controle para guiar o robô. Para a inteligência artificial, um robô que é totalmente controlado por um humano não é um objeto de estudo interessante. Portanto, para o estudo de robôs inteligentes consideramos apenas os robôs tele-operados e totalmente autônomos. Os robôs tele-operados são auxiliados por humanos em atividades mais complexas como reconhecimento de objetos [RN04, Mur00]. Figura 4.15. Arquitetura de robôs. Os efetuadores são os meios pelos quais os robôs se movem e alteram a forma de seus corpos, ou seja, cuidam da mobilidade e comunicação de um robô. A mobilidade está relacionada com o movimento das pernas, braços, pescoço e demais partes do robô que atuam com o meio externo. Um conceito importante relacionado com a mobilidade é o grau de liberdade, que indica o número de direções independentes em que um efetuador pode mover-se. Já a comunicação está relacionada com a emissão de sons, gestos e qualquer outro tipo de dispositivo que permita a iteração do robô com outros agentes e com o ambiente [RN04, Mur00]. Os sensores são a interface perceptiva entre robôs e seus ambientes, ou seja, a entrada de dados e informações do robô. Eles podem estar presentes em diferentes partes de um robô como olhos, nariz, tato e audição, além de outros sensores como radares e sensores de umidade [RN04, Mur00]. Um grande desafio na construção de robôs hoje em dia é a questão da economia de energia. Quanto mais complexos, em termos de motores e componentes eletrônicos, mais energia é consumida por um robô. Como alternativa as baterias, que são pesadas e armazenam pouca energia, robôs de exploração espacial como o Opportunity utilizam a energia solar para seu funcionamento [RN04, Mur00]. Mas a parte fundamental de um robô inteligente é parte de controle e inteligência. Este componente do robô é o principal foco da inteligência artificial, que provê a autonomia necessária para os robôs. Para atingir uma autonomia completa, a parte de controle e inteligência deve cuidar da geração e execução de ações para atingir um objetivo ou completar uma missão. Além disso, a execução é caracterizada pela ocorrência de eventos e ambientes não previstos, exigindo uma adaptação dinâmica do sistema. Neste trabalho, abordaremos com mais detalhes no capítulo seguinte, o uso de computação bioinspirada para o alcance desta autonomia [RN04, Mur00]. 4.3.2.1. Robôs Móveis Quanto á mobilidade, os robôs inteligentes podem ser divididos em três classes [Mur00]: Veículos Terrestres Não-Tripulados (VTNT), Veículos Aéreos Não-Tripulados (VANT) e Veículos Subaquáticos Não-Tripulados (VSNT). Os VTNTs são caracterizados pela presença de rodas, esteira, patas ou pernas. Os principais exemplos deste tipo de robô móvel são: o cão AIBO da Sony, os jipes de exploração espacial Sojourner e Opportunity da NASA, além dos humanóides P3 e Asimo da Honda (ver Figura 4.16(a)). Figura 4.16. Classes de robôs: (a) VTNT; (b) VANT; (c) VSNT. Os VANTs são caracterizados pela presença de asa fixa ou veículos do tipo VTOL (tipo helicóptero, que levantam vôo e aterrisam na vertical). Os principais exemplos deste tipo de robô móvel são os projetos: Global Hawk, Predator e UCAV (ver Figura 4.16(b)). Os VSNTs são divididos em duas classes: operados remotamente e totalmente autônomos.Os principais exemplos deste tipo de robô móvel são os projetos: Persephone, Jason e Hugin (ver Figura 4.16(c)). 4.3.3. Tipos de Robôs Inteligentes Autônomos Idealmente, robôs inteligentes devem ser totalmente autônomos. A autonomia de um robô é baseada em três primitivas: sensação, planejamento e ação [Mur00]. Uma quarta primitiva opcional seria o aprendizado. Um robô deve coletar dados de entrada sobre o ambiente ao seu redor (sensação), processar estes dados em busca de informações significativas (planejar) e então atuar no ambiente da melhor forma possível (ação). Baseado no fato que os únicos seres autônomos inteligentes conhecidos são da própria espécie humana, o aprendizado se torna uma ferramenta que auxilia na compreensão e adaptação do robô as mudanças no ambiente, tal como nos humanos. A autonomia de um robô inteligente pode ser dividida em três classes: reativa, deliberativa e híbrida. A autonomia deliberativa foi a primeira proposta baseada ainda em Figura 4.17. Primitivas para um robô autônomo. robôs manipuladores. Nesse tipo de autonomia, um robô coleta informações do ambiente, planeja e age de maneira seqüencial. As sensações são realimentadas com as ações tomadas. Esta estrutura monolítica e seqüencial torna esse tipo de autonomia muito restrita e com baixo desempenho. Com todas as limitações desta abordagem, a autonomia reativa foi proposta como uma forma mais interessante de autonomia. Neste tipo, um robô não possui mais a primitiva de planejamento, ele simplesmente reage de acordo com as sensações. Com isso, ganhou-se em paralelismo, pois as decisões se tornaram independentes. Apesar disso, os engenheiros de controle não conseguiam provar formalmente o funcionamento destes robôs. Além disso, os estudiosos de inteligência artificial desejavam colocar o planejamento de volta aos robôs, pois ele era essencial para a tomada de decisões inteligentes. Com isso, em 1990, foi proposta uma abordagem híbrida (deliberativa/reativa), onde primeiramente o robô planeja, depois ele se torna reativo até que a tarefa esteja completa ou precisa de alguma adaptação. Desta forma o robô passou a tomar decisões inteligentes, mas reagindo com o ambiente de forma paralela. A primitiva de planejamento pode ser implementada com diversas técnicas de inteligência artificial. Dentre estas técnicas, destacamos a computação bioinspirada. Além disso, estas técnicas podem trabalhar em conjunto com técnicas de aprendizado, tornando o robô altamente adaptativo. 4.4. Aplicações A autonomia de um robô depende de suas partes sensoriais, de planejamento e atuação ou ação [Mur00]. O módulo de planejamento pode ser definido como a inteligência do robô, pois é o responsável pela geração e conseqüente execução das ações do robô que fazem parte do objetivo que este deve atingir. Apesar dos diversos avanços nas pesquisas nas áreas de inteligência artificial, projetar o módulo de planejamento de um robô é uma tarefa árdua. A dificuldade do desenvolvimento da inteligência do robô é, em grande parte, justificada pelo seu ambiente. Diferentemente de muitas das diversas aplicações nas quais técnicas de inteligência artificial são aplicadas, o ambiente dos robôs é o mundo real que possui diversas características que dificultam as ações de um robô. Podemos dizer que o mundo real é não determinístico, isto é, muitas vezes, o robô atinge estados não previstos, por falhas ou condições geradas pelo ambiente. Portanto, os robôs precisam trabalhar com incertezas. Como o mundo real é dinâmico, uma mesma ação tomada em momentos diferentes pode gerar resultados diferentes, forçando os robôs a trabalhar na resolução de problemas de decisão e até mesmo aprendizado, determinando quando e como atuar. Geralmente, o robô precisa agir rapidamente e, portanto, não pode gastar muito tempo para tomar uma decisão e atuar [RN04]. Além das limitações ambientais, e da dificuldade de se trabalhar com sistemas complexos, ainda existem situações em que um robô deve interagir com outros. Nesta situação, consideramos sistemas multi-robôs. Um sistema como este é composto por robôs mais simples, podendo ser divididos em grupos especializados para que cada grupo realize as tarefas de todo o sistema. Figura 4.18. Exemplo de sistema muti-robôs heterogêneo com robôs diferentes que realizam parte da tarefa global do sistema. Sistema muti-robôs são mais robustos que sistemas com um único robô porque, caso um robô falhe, outros do grupo podem assumir o trabalho no lugar do que falhou. Além da robustez, por um sistema multi-robôs ter as tarefas distribuídas, os equipamentos também podem ser distribuídos, reduzindo a complexidade de cada robô e conseqüentemente o custo e o consumo de energia de cada robô [JAI]. Por outro lado, sistemas muti-robôs necessitam de sistemas de controle robustos [FM98], para que, a partir da comunicação entre os robôs, o gerenciamento das tarefas e a cooperação entre os robôs do grupo realmente possam trabalhar para a execução da tarefa do sistema. Podemos concluir então que o comportamento de um robô é determinado pela interação entre o robô e o meio ambiente (que pode conter outros robôs). Por se tratar de um meio ambiente normalmente desconhecido para o robô e dinâmico a dificuldade de se implementar o módulo de planejamento é grande. Baseados no comportamento de seres vivos, seus sistemas, processos e relacionamento com o meio ambiente, muitas técnicas bioinspiradas são aplicadas ao projeto do módulo de planejamento do robô. Uma das grandes dificuldades na execução das tarefas de um robô está na navegação e reconhecimento do ambiente e conseqüente execução da tarefa. Separando as diversas tarefas que um robô executa até concluir uma tarefa, podemos citar: navegação, detecção e identificação de objetos, otimização etc. As principais características das técnicas bioinspiradas que as levaram a ter uma posição de destaque no cenário da robótica são: • Capacidade de adquirir conhecimento a partir da iteração com o meio ambiente possibilitando o aprendizado; • Capacidade de adaptação ao meio ambiente através de aprendizado e/ou generalização; • Capacidade de encontrar soluções reais para problemas que muitas vezes envolvem múltiplos objetivos; • Capacidade de operação em ambientes desconhecidos (sem informações prévias) e dinâmicos (mesmo com informações prévias, o ambiente se altera); • Capacidade de operar em situações em que haja falha no sensoriamento ou que este não consegue reunir todas as informações necessárias através da generalização ou aprendizado. A seguir, apresentaremos como as técnicas bioinspiradas são aplicadas na robótica. 4.4.0.1. Aplicações com RNAs As Redes Neurais Artificiais são muito aplicadas à robótica por apresentarem um grande poder de representação de conhecimento necessário para o planejamento das operações. Por conseguirem representar funções onde se conhece somente as entradas e saídas, as Redes Neurais Artificiais são muito usadas no aprendizado dos robôs. O aprendizado, utilizando-se um conhecimento prévio, pode ser realizado antes que o robô comece sua execução. No entanto, talvez seja necessário reunir informações do próprio ambiente e o robô já esteja em execução. Ou ainda, uma mudança no ambiente aconteça e o robô tenha que aprender novos conceitos. Portanto, o aprendizado do robô, durante sua execução, muitas vezes é necessário. Outra característica que determina a aplicação das redes neurais à robótica é a capacidade de generalização. Um robô com capacidade de generalização pode associar um ambiente, objeto ou ação parecida com o que foi aprendido e atuar de maneira semelhante, sem a necessidade de a Rede Neural aprender todas as situações possíveis para ser capaz de atuar. O tamanho da Rede Neural usada para controlar robôs varia de acordo com a quantidade de informações e a dificuldade em se aprender. Portanto, podemos afirmar que seu tamanho determina a qualidade das ações do robô. Outra aplicação das Redes Neurais à robótica está na parte de visão computacional. Algumas das etapas que fazem parte da “visão do robô” são a segmentação e a identificação [AMG99]. Nesta etapa, podem ser usadas redes neurais para distinguir diversos objetos em um ambiente e identificá-los. Pesquisas realizadas na Universidade Federal de Santa Catarina [DdI] com um robô construído com o Kit Lego MindStorm mostram a utilização das Redes Neurais em robôs. No experimento, o robô fica sobre uma mesa branca delimitada por uma faixa preta, contendo latinhas verdes e amarelas. Baseado no “conhecimento” que foi aprendido pela RNA, o robô deve tirar da mesa as latas verdes e deixar as amarelas, sem sair da área marcada. As redes usadas nessa operação foram desenvolvidas no Projeto PiramidNet. Quatro Redes Neurais hierárquicas foram criadas, cada uma delas responsável por um tipo ação do robô necessária para que a tarefa do mesmo fosse cumprida. Os sensores do robô detectam as latas e as bordas da mesa e essas informações são passadas para a primeira rede neural que é responsável por detectar eventos. A segunda é responsável pelas decisões que o robô toma de acordo com os eventos detectados na primeira rede. Com base nessa decisão, o robô pode realizar uma ação, como empurrar uma lata, andar pela mesa etc. A terceira rede é responsável por manter o robô sobre a mesa e uma quarta é responsável pela ativação dos equipamentos necessários para que o robô realize as ações determinadas pela segunda rede. Neste caso, foram usados dois tipos de Redes Neurais Artificiais: diretas e recorrentes [BCL00]. Para as atividades mais simples, foram utilizadas as redes diretas. No entanto, a Rede Neural Artificial responsável pela decisão das ações do robô é mais complexa, portanto, foram usadas as redes neurais recorrentes. Caso - Fusão de Sensores Os Robôs móveis precisam interagir com o ambiente, e por isso dependem de dados provenientes de sensores para ter uma representação do ambiente. Cada tipo de sensor apresenta suas características particulares e tem um custo associado. Além disso, geralmente fornecem informações incompletas, inconsistentes ou imprecisas sobre o ambiente. Assim a fusão das informações de diversos sensores pode fornecer informações mais completas e precisas [Kle99]. A área de fusão de sensores é muito vasta e tem sido empregada na solução de diversos tipos de problemas em diferentes áreas de aplicação. Para melhorar a precisão e estabilidade das medidas de distância entre um robô e um objeto, foram utilizadas técnicas de Redes Neurais Artificiais. Para isto as RNAs serão capazes de corrigir as imprecisões de cada sensor e melhorar a repetibilidade e capacidade das medições. Para esta aplicação foram utilizadas as Redes Neurais Artificiais do tipo MultiLayer Perceptron (MLP), além de outras técnicas de Aprendizado de Máquina (AM) para regressão. Estas redes foram utilizadas individualmente ou combinadas com outras redes (Comitê de RNAs). Nos experimentos realizados por [FCR01] foram obtidas reduções de erro das medidas de até 89,35%. Resultados mais detalhados podem ser obtidos em [Fac01]. 4.4.0.2. Aplicações com SIAs Os Sistemas Imunológicos Artificiais possuem a capacidade de encontrar soluções não previstas, isto é, fazer com que um robô possa se adaptar às mudanças não previstas no ambiente. Através da reação da rede de anticorpos à presença de antígenos, o robô pode reagir às mudanças do ambiente. O robô funciona como o anticorpo que reage aos estímulos captados pelos sensores. A estrutura da rede dos sistemas imunológicos possue a capacidade de auto-organização e podem ser implementados de maneira distribuída e cooperativa. Utilizando o mini robô Khepera [Cor, MFI93], pesquisadores da Unicamp [DdEEedC] utilizaram um algoritmo baseado em Sistemas Imunológicos Artificiais. Os sensores de luminosidade e de distância foram modelados como antígenos. Os módulos responsáveis pela locomoção foram modelados como a rede anticorpos. Dessa maneira, cada vez que os sensores detectavam um obstáculo, isto é, um antígeno, a rede inicia uma resposta imunológica e o robô se movimenta, reagindo ao estímulo captado pelos sensores. Apesar desta ser uma aplicação simples, ela demonstra a capacidade de reação dos sistemas imunológicos. Este mecanismo pode ser aplicado às diversas ações do módulo de planejamento de um robô. Pesquisadores que participaram do projeto desta aplicação simples publicaram artigos com aplicações de Sistemas Imunológicos Artificiais mais complexos. Um destes artigos [MZ02] apresenta um sistema imunológico para um robô com tarefas multiobjetivo. Neste modelo, os anticorpos representam uma ação que o robô deve executar e os antígenos representam o estado atual do robô. Estímulos e a supressão das iterações entre os anticorpos também foram modelados. A morte celular acontece através da seleção dos anticorpos com aptidão baixa e são substituídos por novos anticorpos gerados [GVSG05]. 4.4.0.3. Aplicações com Computação Evolucionária A computação evolutiva é muito utilizada para sintetizar automaticamente controladores embarcados para robôs e equipes de robôs, com o propósito de treiná-los para desenvolver tarefas específicas [CDR+ 04]. Com as técnicas de computação evolutiva, especifica-se o que é desejado do robô, sem definir como ele deve fazer para obter o comportamento desejado. Dessa maneira, o robô pode permanecer em constante evolução, sempre na busca de soluções melhores. Com a utilização da computação evolutiva, é possível que seja encontrada uma solução para um objetivo específico, de maneira robusta e com diversidade de soluções. Ela permite a auto-programação de sistemas complexos com um robô ou com diversos. A computação evolutiva está associada a otimizações realizadas na operação de um robô, por exemplo, encontrar a melhor trajetória, ou a melhor maneira de se executar uma ação. No entanto, a aplicação da computação evolutiva não se limita a otimizações. Robôs que aplicam técnicas evolutivas normalmente têm uma grande autonomia, pois através da evolução, tornam-se mais independentes das opções de seus projetistas. Além da aplicação da computação evolutiva em partes dos processos do modo de planejamento do robô, muitos pesquisadores investem na aplicação das técnicas evolutivas em todo o processo de desenvolvimento do robô. Dessa maneira, os algoritmos evolutivos não seriam somente responsáveis por mudanças de parâmetros em módulos específicos do robô, mas também pelo projeto de todo o robô. A etapa de evolução de um robô ou de um grupo de robôs pode ser simulada em um computador e depois os parâmetros da solução encontrada são colocadas nos robôs. No entanto, para aumentar a autonomia dos robôs, a evolução pode ocorrer nos robôs durante a execução dos mesmos. Um exemplo de aplicação de sistemas evolutivos é o robô PINO [Pro]. A idéia de seu projeto surgiu em 1999, quando o único robô humanóide disponível era o Honda Asimo. O Asimo é um robô caro, com sistemas complexos e de alta precisão. Isso serviu como motivação para que o projetista do PINO desenvolvesse um robô que utilizasse motores baratos. No entanto, estes motores não têm força suficiente para executar os movimentos de um robô de maneira tradicional, cópia do movimento do ser humano quando anda. Neste ponto do projeto, decidiu-se usar um algoritmo genético para viabilizar a locomoção do robô. Ajustando os parâmetros necessários para que o PINO andasse, como o tamanho dos passos, a altura que a perna deve ser erguida etc, foi possível atingir os objetivos do projeto. Inicialmente, nas primeiras gerações do algoritmo genético, o PINO somente balançava, no entanto, depois de algumas horas de “evolução”, o robô começou a andar. Outro fato bastante interessante é a distribuição gratuita sob a licença GNU GPL de todo o código fonte do software usado no aprendizado do robô. Além do código, a página do projeto ainda possui a descrição dos circuitos, componentes e demais recursos necessários para a construção do robô. Figura 4.19. Robôs Honda Asimo e PINO. Caso - Nariz Artificial Esta aplicação mostra um sistema de reconhecimento de padrões de um nariz artificial utilizando técnicas de AGs e RNAs [TLS01]. Neste caso, foram utilizadas técnicas híbridas com Redes Neurais Artificiais e Algoritmos Genéticos. Foram desenvolvidos três protótipos diferentes do nariz artificial. Dois dos protótipos foram utilizados no reconhecimento de diferentes substâncias químicas e de diferentes vinhos. O terceiro protótipo, com processamento temporal, foi desenvolvido para reconhecimento de gases derivados do petróleo. Os Algoritmos Genéticos têm sido implementados para otimizar as arquiteturas das Redes Neurais Artificiais, definindo o número ideal de nodos e conexões. A implementação deste tipo de sistema é muito importante como, por exemplo, na indústria de alimentos. Neste caso, o reconhecimento de odores na inspeção da qualidade e no monitoramento de processos ainda são analisados com o nariz humano. Entretanto, nosso nariz é cheio de contrastes. Enquanto existe alta sensibilidade para certos compostos químicos, o nariz é bem menos sensível a outras classes de substâncias. Além disso, o olfato natural é capaz de distinguir certos odores com facilidade, porém é muito difícil explicar a diferença na percepção, pois não há uma escala para medir intensidade de estímulos odorantes, como existe para o som (decibéis). Por isso existe a necessidade de desenvolver um nariz artificial. Neste sistema, dois componentes são fundamentais: o sistema de sensor [sNS+ 99] e o reconhecimento de padrões. 4.4.0.4. Aplicações com Algoritmo de Colônia de Formigas Na otimização por Colônia de Formigas, o comportamento inteligente surge da interação de um conjunto (colônia) de indivíduos simples. Esta técnica é geralmente aplicada em um conjunto de robôs simples que não possuem o conhecimento da global da tarefa que deve ser realizada. As ações de cada robô são baseadas em decisões locais, isto é, do próprio robô e, normalmente, é difícil de prever qual será a ação de cada robô. No entanto, com a comunicação entre os robôs, a inteligência do conjunto de robôs, surge como conseqüência da auto-organização dos mesmos. Caso - Determinação de rotas em um Robô Neste estudo de caso, um robô inteligente é projetado para se deslocar até a sua base de apoio (local de destino) desviando de obstáculos e seguindo o menor caminho. O robô obtém parâmetros de entrada para se localizar em relação a sua base de apoio. Ele deve encontrar e chegar até sua base de apoio utilizando o menor caminho, de acordo com as possíveis rotas, desviando-se dos obstáculos que possa encontrar pelo caminho. Para que sejam estabelecidas as possíveis rotas que o robô poderá seguir, o terreno foi mapeado numa matriz 10 x 5 conforme mostrado na Figura 4.20. O círculo indica a base de apoio. Supondo que o robô tenha iniciado no local descrito na figura, é possível estabelecer algumas rotas importantes para que o robô chegue até a base de apoio sem passar pelos obstáculos. Na Figura 4.21, diante das rotas R1 e R2 estabelecidas para a posição do robô, na contagem de posições até a base de apoio, evidencia-se a rota R2 como menor caminho. Serão utilizados dois algoritmos, um deles bioinspirado (colônia de formigas) e outro com uma técnica tradicional (Dijkstra) para estabelecimento das rotas a serem seguidas pelo Figura 4.20. Mapa do terreno percorrido pelo robô. Figura 4.21. Alternativas possíveis de deslocamento até a base. robô. Para a implementação dos algoritmos estudados são utilizados os Kits LEGO [Knu]. O Lego Mindstorm (ver Figura 4.22) oferece diversas vantagens para a aprendizagem e desenvolvimento de projetos educacionais devido à praticidade na montagem e desmontagem. Para sua programação utiliza-se um computador e depois descarrega-se o programa utilizando uma torre de transmissão por infravermelho. Após carregado, o módulo de controle (RCX) se torna independente. Figura 4.22. Equipamento para programação do RCX. O RCX é um microcontrolador que funciona como o “cérebro do robô”, que está encapsulado num tijolo LEGO. A Figura 4.23 mostra a fotografia do RCX. Figura 4.23. O micro-controlador RCX. O RCX possui três portas de saída (A, B e C) que são superfícies de quatro pinos LEGO com pequenos contatos laterais e podem ser operadas em três modos: ligado, desligado e flutuante. Se um motor for conectado a uma porta ligada do RCX, este entra em rotação. No modo desligado, o motor para, e flutuante o motor nem rotaciona, mas também fica livre para rotacionar. As saídas ainda possuem configuração para direção do motor (frente e trás) e potência. O firmware tradicional possui 8 potências diferentes para os motores, e o LegOS 255 potências distintas. O RCX possui três portas de entrada, semelhantes fisicamente às portas de saída, onde podem ser conectados os sensores oficiais da LEGO (luminosidade, toque, rotação e temperatura). Existem dois tipos de sensores: passivos e ativos. Sensores passivos operam somente com resistências; é o caso dos sensores de toque e temperatura. Sensores ativos possuem construção eletrônica sofisticada e realizam tarefas mais complexas do que simplesmente ser uma resistência. Exemplos de sensores ativos são os sensores de luz e rotação. Para a programação, utilizamos o programa RCX Command Center que usa a linguagem NQC baseada na linguagem C, dessa forma a implementação torna-se ainda mais didática (Figura 4.24). O problema consiste em especificar um modelo de otimização que encontre o menor caminho sem passar pelos obstáculos. Nesse caso basta que o robô chegue de acordo com a rota R2. Dessa forma, serão utilizados dois métodos para resolução do problema. O primeiro é um método clássico na teoria dos grafos de busca pelo menor caminho, o algoritmo de Dijkstra. Este algoritmo, basicamente, parte de uma estimativa no ponto inicial de custo mínimo até o próximo ponto ou até o fim do caminho e vai sucessivamente ajustando esta estimativa de acordo com os pontos escolhidos. O segundo é o algoritmo do Sistema de Colônia de Formigas. Ele é baseado na imitação do comportamento coletivo de uma colônia de formigas escolhendo um caminho entre o ninho e uma fonte de Figura 4.24. Interface do RCX Command Center. alimento [DMC96]. Cada formiga marca o seu caminho com uma substância denominada feromônio, e o caminho assim marcado é usado como referência por outras formigas. A intensidade (concentração) do feromônio decai com o tempo. Veja a seqüência representada na Figura 4.25 onde um grupo de formigas está se deslocando entre o ninho A e a fonte de alimento E (Figura 4.25 (a)). Quando um obstáculo é posicionado de forma a interromper o deslocamento das formigas (Figura 4.25 (b)), estas começam a busca de caminhos alternativos (Figura 4.25 (c)). Dois caminhos são então possíveis ABHDE (mais longo) e ABCDE (mais curto). Como a concentração de feromônio é mais alta no caminho mais curto, mais formigas escolherão este caminho. Figura 4.25. Comportamento do algoritmo de colônia de formigas. Este é um problema simples, porém, mostra facilmente a escalabilidade desta so- lução à medida que o cenário se torna mais complexo e a medida que mais robôs forem utilizados paa exploração de um terrenos desconhecido. Referências [AMG99] A. Arleo, J.R. Millan, and W. Gerstner. Hippocampal spatial model for state space representation in reinforcement learning. Technical report, Swiss Federal Inst. of Technology Lausanne, Switzerland, 1999. [Bac96] T. Back. Evolutionary Algorithms in Theory and Practice. Oxford University Press, 1996. [BCL00] A.P Braga, A.C.P.L.F. Carvalho, and T.B. Ludermir. Redes Neurais Artificiais: Teoria e Aplicações. Editora LTC, 2000. [BDT99] E. Bonabeau, M. Dorigo, and G. Theraulaz. Swarm Intelligence: From Natural to Artificial Systems. Oxford Univ. Press, 1999. [BHG+ 98] E. Bonabeau, F. Henaux, S. Guérin, D. Snyers, P. Kuntz, and G. Theraulaz. Routing in telecommunications networks with “smart” ant-like agents. In Intelligent Agents for Telecommunications Applications ’98 (IATA’98), 1998. [CDMT94] A. Colorni, M. Dorigo, V. Maniezzo, and M. Trubian. Ant system for job-shop scheduling. JORBEL - Belgian Journal of Operations Research, Statistics and Computer Science, 1(34):39–53, 1994. [CDR+ 04] A.C.P.L.F. Carvalho, A.C.B. Delbem, R.A.F Romero, E.V. Simões, and G.P. Telles. Computação Bioinspirada, chapter 4. Congresso Nacional da SBC - Jornada de Atualização em Informática, 2004. [CH83] V. Chankong and Y.Y. Haimes. Multiobjective Decision Making: Theory and Methodoly, volume 8. Horth-Holland(Elsevier), 1983. [Cor] K-Team Corporation. [Cor05] L. Correa. Vida Artificial, pages 257–305. Encontro Nacional de Inteligência Artificial - SBC 2005, 2005. [CVZ00] L.N. Castro and F. Von Zuben. Artificial immune systems: Part ii - a survey of applications. Technical Report DCA-RT 02/00, Department of Computer Engineering and Industrial Automation, School of Electrical and Computer Engineering, State University of Campinas, SP, Brazil, feb 2000. [Cyb89] G. Cybenko. Approximations by superpositions of sigmoidal functions. Mathematics of Control, Signals, and Systems, 2(4):303–314, 1989. [Das98] D. Dasgupta. Artificial Immune Systems and their Applications. SpringerVerlag, 1998. [dC01] L.N. de Castro. Engenharia Imunológica: Desenvolvimento e Aplicação de Ferramentas Computacionais Inspiradas em Sistema Imunológicos Artificiais. PhD thesis, Faculdade de Engenharia Elétrica e de Computação, UNICAMP, Campinas-SP, Brasil, 2001. [dCT02] L.N. de Castro and J. Timmis. Artificial Immune Systems: A New Computational Approach. SpringerVerlag, 2002. [dCT03] L.N de Castro and J. Timmis. Artificial Immune Systems as a Novel Soft Computing Paradigm. Soft Computing, 7(8):526–544, 2003. [DD99a] M. Dorigo and G. Di Caro. Ant colony optimization: A new metaheuristic. In Peter J. Angeline, Zbyszek Michalewicz, Marc Schoenauer, Xin Yao, and Ali Zalzala, editors, Proceedings of the Congress on Evolutionary Computation, volume 2, pages 1470–1477, Mayflower Hotel, Washington D.C., USA, 6-9 1999. IEEE Press. [DD99b] M. Dorigo and G. Di Caro. The ant colony optimization meta-heuristic. In David Corne, Marco Dorigo, and Fred Glover, editors, New Ideas in Optimization, pages 11–32. McGraw-Hill, London, 1999. [DdEEedC] Universidade Estadual de Campinas UNICAMP Depto de Engenharia Elétrica e de Computação. [DdI] Universidade Federal de Santa Catarina UFSC Depto de Informática. [DG97a] M. Dorigo and L.M. Gambardella. Ant colony system: A cooperative learning approach to the traveling salesman problem. IEEE Transactions on Evolutionary Computation, 1(1):53–66, April 1997. [DG97b] M. Dorigo and L.M. Gambardella. Ant colony system: A cooperative learning approach to the traveling salesman problem. IEEE Transactions on Evolutionary Computation, 1(1):53–66, April 1997. [DKWB04] D. Dasgupta, K. KrishnaKumar, D. Wong, and M. Berry. Immunity-based aircraft fault detection system. In American Institute of Aeronautics and Astronautics Chicago, pages 20–24, september 2004. [DMC91] M. Dorigo, V. Maniezzo, and A. Colorni. Positive feedback as a search strategy, 1991. [DMC96] M. Dorigo, V. Maniezzo, and A. Colorni. The Ant System: Optimization by a colony of cooperating agents. IEEE Transactions on Systems, Man, and Cybernetics Part B: Cybernetics, 26(1):29–41, 1996. [DN00] D. Dasgupta and F. Nino. A comparison of negative and positive selection algorithms in novel pattern detection. In IEEE International Conference on Systems, Man and Cybernetics (SMC), volume 1, pages 125–130, october 2000. [ESK01] R. Eberhart, Y. Shi, and J. Kennedy. Swarm Intelligence. Morgan Kaufmann, 2001. [Fac01] K. Faceli. Combinação de métodos de inteligência artificial para a fusão de sensores. Master’s thesis, Instituto de Ciências Matemáticas e de Computação, Universidade de São Paulo, 2001. [FCR01] K. Faceli, A.C.P.L.F Carvalho, and S.O. Rezende. Experiments on machine learning techniques for sensor fusion. In IV International Conference on Computational Intelligence and Multimedia Applications (ICCIMA-01), pages 395–399, 2001. [FM98] D. Floreano and F. Mondada. Evolutionary neurocontrollers for autonomous mobile robots. Neuural Networks, 11(7-8):1461–1478, 1998. [FPP86] J.D. Farmer, N.H. Packard, and A.S. Perelson. The immune system, adaptation and machine learning. Physica, 22:187–204, 1986. [GADP89] S. Goss, S. Aron, J.L. Deneubourg, and J.M. Pasteels. Self-organized shortcuts in the argentine ant. Naturwissenschaften, 1989. [GBD92] S. Geman, E. Bienenstock, and R. Doursat. Neural networks and bias/variance dilemma. Neural Computing, 4(1):1–58, 1992. [GH88] D.E. Goldberg and J. Holland. Genetic algorithms and machine learning. Machine Learning, 3:95–99, 1988. [Gol89] D.E. Goldberg. Genetic Algorithms in Search, Optimization, and Machine Learning. Addison-Wesley Publishing Company, Inc., Reading, MA, 1989. [GVSG05] J.C. Galeano, A. Veloza-Suan, and F.A. González. A comparative analysis of artificial immune network models. In GECCO, pages 361–368, 2005. [Hay94] S. Haykin. Neural Networks: A Comprehensive Foudation. Macmillan, 1994. [Hol92] J. Holland. Adapataion in Natural and Artificial Systems. The University of Michigan Press, 1992. [KB99] J. Kim and P. Bentley. The human immune system and network intrusion detection. In 7th European Congress on Intelligent Techniques and Soft Computing (EUFIT ’99), Aachen, Germany, September 13-19, 1999. [KESMI+ 01] I. Kassabalidis, M.A. El-Sharkawi, R.J. Marks II, P. Arabshahi, and A.A. Gray. Swarm intelligence for routing in communication networks, November 2001. [Kle99] L.A. Klein. Sensor and Data Fusion Concepts and Applications. SPIE Press, 1999. [Knu] J. Knudsen. The unofficial guide to Lego Mindstorms robots. [KZ92] R.C. Kube and H. Zhang. Collective robotics: from social insects to robots. Adaptive Behaviour, 1994, 2(2):189–218, 1992. [Med04] T.H. Medeiros. Novo método de seleção de modelos neurais por meio da auto-correlação do resíduo. Technical report, Depto. Engenharia Eletrônica, Universidade Federal de MInas Gerais, 2004. [MFI93] F. Mondada, E. Franzi, and P. Ienne. Mobile robot miniaturisation: a tool for investigation in control algorithms. In Third International Symposium on Experimental Robotics, 1993. [MP43] W.S. McCulloch and W. Pitts. A logical calculus of the ideas immanent in nervous activity. Bulletin OF Mathematical Biophysics, 5:115–133, 1943. [MP69] M.L. Minsky and S.A. Papert. Perceptrons: An Introduction to Computational Geometry. Cambridge, MA:MIT Press, 1969. [Mur00] R. Murphy. Introduction to AI Robotics. MIT Press, 2000. [MZ02] R. Michelan and F.J.V Zuben. Decentralized control system for autonomous navigation based on an evolved artificial immune network. In IEEE, editor, IEEE Congress on Evolutionary Computation, volume 2, pages 1021–1026, 2002. [Pro] Kitano Symbiotic Systems Project. [Rez03] S. Rezende, editor. Sistemas Inteligentes: Fundamentos e Aplicações. Editora Manole, 2003. [RHW86] D.E. Rumelhart, G.E. Hinton, and R.J. Williams. Learning internal representation by error propagation. In Parallel Distributed Processing:Explorations in the Microstructure of Cognition, volume 1, pages 318–362. Cambridge, MA:MIT Press, 1986. [RN04] S. Russel and P. Norvig. Inteligência Artificial. Editora Campus, 2004. [Ros58] F. Rosenblatt. The perceptron: A probabilistic model for information storage in the brain. Psychological review, 65:386–408, 1958. [RT00] et al. R. Teixeira. Improving generalization of mlps with multi-objective optimization. Neurocomputing, 35(1-4):189–194, November 2000. [SHBR96] R. Schoonderwoerd, O.E. Holland, J.L. Bruten, and L.J.M Rothkrantz. Ant-based load balancing in telecommunications networks. Adaptive Behavior, 5(2):169–207, 1996. [SHF97] A. Somayaji, S. Hofmeyr, and S. Forrest. Principles of a computer immune system. In Meeting on New Security Paradigms, Langdale, UK, pages 75– 82. New York, NY, USA : ACM, 1997. [sNS+ 99] J.E.G. souza, FL. Neto, F.L. Santos, C. Pinto de Melo, and T.B. Ludermir. Polypyrrole based aroma sensor. Synthetic Metals, 102:1296–1299, 1999. [Tak03] R.H.C Takahashi. Notas de aula: Otimização escalar e vetorial. Technical report, Depto. Matemática - Universidade Federal de MInas Gerais, 2003. [TLS01] A. Tamazaki, T.B. Ludermir, and M.C.P. Souto. Classification of vintages of wine by an artificial nose using time delay neural networks. Eletronics Letters, 37(24):1466–1467, 2001. [WH60] B. Widrow and M.E. Hoff. Adaptive switching circuits. In IRE WESCON Convention Record, volume 4, pages 96–104. New York: IRE, 1960. [Zub00] F.J.V. Zuben. Computação evolutiva: Uma abordagem pragmática. In Anais da 1 Jornada de Estudos em Computação de Piracicaba e Região (JECOMP), volume 1, 2000.