• Nenhum resultado encontrado

Optimização por colónias de formigas

2.3 Abordagem Usando Regras de Transformação

3.4.2 Optimização por colónias de formigas

O último algoritmo descrito nesta introdução à computação evolucionária ilustra a utilização de outros paradigmas, fora da evolução por selecção natural, na criação de algoritmos que ainda assim são geralmente colocados dentro desta área. É também exemplo de um algoritmo de optimização global, que, ao contrário dos apresentados anteriormente (com a possível excepção dos algoritmos genéticos), tem aplicação mais natural em problemas de optimização combinatória do que em problemas de optimi- zação numérica. Trata-se de um algoritmo de inteligência de enxame, denominado algoritmo de optimização por colónias de formigas (OCF) [Dorigo, 1992; Dorigo and Stützle, 2004; Dorigo and Blum, 2005], baseado num mecanismo de stigmergia [Dorigo et al., 2000; Garnier et al., 2007].

A stigmergia refere-se à coordenação indirecta entre agentes ou acções, através de marcas deixadas no ambiente. Estas marcas, ou alterações realizadas no ambiente, vão influenciar a próxima acção do agente que a realizou ou de outro que com ela interaja, levando assim a um comportamento coordenado, de forma distribuída, entre os diversos agentes. Note-se que a stigmergia pressupõe, tal como a selecção natural, a existência subjacente de uma população de indivíduos, ou, neste caso, agentes.

Um exemplo clássico de stigmergia na natureza envolve a procura de um caminho óp- timo entre a saída de uma colónia de formigas e qualquer fonte de alimento. À medida que se deslocam, as formigas deixam no solo uma marca química, denominada fero- mona. Se imaginarmos que existem dois caminhos, de comprimento diferente, entre a saída da colónia e a fonte de alimento, e se estes caminhos forem inicialmente escolhidos de forma aleatória pelas formigas, aquelas que acidentalmente escolherem o caminho mais curto, terminam mais rapidamente o seu trajecto, depositando aí feromona mais rapidamente, o que causa um ligeiro aumento da concentração desta em relação ao caminho mais longo.

É sabido que as formigas, quando presentes com a escolha entre dois caminhos, têm maior probabilidade de escolher o caminho com maior concentração de feromona. Con- sequentemente, o caminho mais curto, com uma pequena vantagem inicial em termos de concentração de feromona, irá ter maior probabilidade de atrair mais formigas, que, por sua vez, acabarão o trajecto mais rapidamente, aumentando ainda mais a diferença

de feromona entre os dois caminhos. O que se observa na realidade é que, enquanto de início 50% das formigas escolhe cada um dos caminhos, rapidamente começa a ha- ver uma maior proporção a seguir pelo caminho mais curto, e, passado algum tempo, já raramente uma formiga segue pelo caminho mais longo. A experiência tem iguais resultados com caminhos de complexidade arbitrária.

O algoritmo de optimização por colónias de formigas imita o processo descrito acima para resolver problemas de optimização combinatória, mais especificamente problemas de procura de um caminho óptimo num grafo, como o problema do caixeiro viajante. Para tal, uma população de agentes ("formigas"computacionais) vai modificando ite- rativamente um valor numérico, o qual simula a concentração de feromona, associado a cada arco do grafo. Também no algoritmo os agentes têm maior probabilidade de seguir por arcos com maior concentração de feromona, aumentando, por sua vez, essa mesma concentração, numa tradução mais ou menos directa do mecanismo stigmergé- tico observado na natureza.

Refira-se ainda que, embora as abordagens mais populares continuem a ser as que, tal como a proposta original, são vocacionadas para problemas de optimização combina- tória, também no caso da optimização por colónias de formigas já existem extensões que permitem utilizar estes algoritmos em problemas de optimização numérica [Dréo and Siarry, 2002; Socha and Dorigo, 2008].

Computação Evolucionária em Tarefas

de PLN

Neste capítulo fazemos um apanhado das contribuições da área da computação evo- lucionária em tarefas de processamento de língua natural (PLN). As referências estão agrupadas por temas representativos de tarefas de processamento de língua natural, sendo que, em cada grupo, são apresentados os vários trabalhos encontradas na pes- quisa bibliográfica realizada, não havendo aqui separação pelo tipo de algoritmo de inspiração biológica utilizado.

4.1 Segmentação de Palavras

A segmentação de palavras é uma sub-tarefa importante do processamento de língua natural, com um vasto leque de aplicações que vão desde a hifenização de palavras à conversão texto-fala. Em [Kazakov et al., 1998] é apresentada uma abordagem híbrida ao problema da segmentação de palavras, a qual combina técnicas de aprendizagem supervisionada e não-supervisionada, para geração de regras de segmentação, a partir de uma lista de palavras. Os autores utilizam um algoritmo genético para determinar a melhor segmentação de um conjunto de palavras, e usam-na como entrada de um algoritmo de indução de programação em lógica, para determinar um conjunto de regras de segmentação que possa ser usado em palavras desconhecidas.

O modelo de segmentação adoptado pelos autores limita o número de segmentos a dois: qualquer sub-cadeia à esquerda/direita da palavra é interpretada como pre- fixo/sufixo. O modelo baseia-se na "Teoria Naive da Morfologia"(do inglês Naive Theory of Morphology), TNM, definida pelos autores num trabalho anterior.

Assuma-se que, para um determinado conjunto de palavras, as posições dos limites 39

dos segmentos correspondem a um vector de inteiros, os quais variam entre zero e o tamanho da respectiva palavra. O conjunto de palavras, juntamente com um vector com estas características, introduz uma TNM. Uma TNM permite assim definir dois léxicos, definidos pelos conjuntos Prefixos e Sufixos, constituídos pelas correspondentes segmentações das palavras. Nestes conjuntos os prefixos (respectivamente os sufixos) são enumerados sem repetição.

A qualidade de uma TNM é estimada pela soma dos caracteres, n = p+s, no léxico dos prefixos (p) e sufixos (s). Quanto menor for o total, melhor é a TNM. O limite máximo, nmax, é dado pelo número w de caracteres de todas as palavras da lista de palavras. Este caso corresponde à situação em que nenhum prefixo, nem sufixo, é gerado mais do que uma vez pela teoria.

Com base nesta teoria, os autores definem um critério para efectuar a segmentação das palavras: entre o conjunto de TNMs, seleccione-se a que corresponde a um menor nú- mero de caracteres no correspondente par de léxicos. Este enviezamento é baseado na hipótese de que sub-cadeias compostas por morfemas reais, ocorrem nas palavras com uma frequência superior a qualquer outra sub-cadeia à esquerda, ou à direita, da pala- vra. Desta forma, uma TNM com um n pequeno, produzirá léxicos onde os "prefixos"e "sufixos"correspondem, frequentemente, a morfemas, ou combinações destes.

Os autores utilizam um algoritmo genético para evoluir a melhor teoria. Assim, cada indivíduo corresponde a um cromossoma, o qual é representado à custa de um vector de inteiros que define uma TNM. A função de desempenho usada mede a diferença nmax n. Desta forma, a função nunca assumirá valores negativos e o algoritmo evoluirá no sentido da maximização deste valor.

O operador de mutação é usado de duas forma distintas: fazendo um deslocamento, em uma posição, do morfema, à esquerda, ou à direita; ou escolhendo, aleatoriamente, uma nova posição dentro do intervalo de posições possíveis. O operador de recombi- nação escolhido, foi o operador de recombinação com um ponto de corte. O melhor indivíduo, em cada geração, é mantido ao longo das gerações. Ao fim de um número pré-estabelecido de gerações, o algoritmo devolve o melhor indivíduo encontrado que corresponderá à melhor teoria observada, durante o processo de evolução.

Numa segunda fase, a lista de palavras segmentadas obtida pelo algoritmo genético, é usada como entrada de dois algoritmos de aprendizagem indutiva, nomeadamente os sistemas FOIDL e CLOG [Suresh Manandhar and Erjavec, 1998]. O resultado final é um programa em lógica, representado sob a forma de uma lista ordenada de regras (cláusulas), precedida de uma lista de excepções, representadas sob a forma de factos. Os autores afirmam que o resultado deverá ser capaz de efectuar a segmentação de palavras desconhecidas.