“A inteligência artificial pode descobrir soluções para problemas do passado, que mudarão a nossa forma de resolver os mesmos problemas no futuro.” — Dawiny Bastos
Impressões Iniciais do Autor
“Creio que esta etapa do conteúdo de inteligência artificial seja uma das mais importantes, visto que, aparentemente, aprenderemos na prática como os algoritmos de solução de problemas são implementados no contexto da inteligência artificial. Contudo, mesmo tendo muito interesse, confeso que estou em dúvida quanto aos algoritmos que aprenderemos, pois tenho noção do quão dificil essa área da computação pode ser a medida em que nos aprofundamos em algoritmos mais sofisticados.” — Gustavo Martins Ribeiro
Introdução
A solução de problemas por meio de agentes de inteligência de artificial varia a depender da natureza do problema. Sendo assim, algumas etapas se fazem necessárias para chegar a uma solução satisfatória, assim como o conhecimento de algoritmos de computadores, como buscas, ordenação, complexidade, etc. Sendo assim, o presente artigo tem como finalidade investigar tal assunto de suma importância na era da tecnologia da informação.
Agente de Soluções de Problemas
Como dito no artigo Agentes e ambientes, um agente refere-se a uma entidade capaz tomar decisões com base em sua percepção do ambiente, a fim de executar ações para alcançar metas ou objetivos específicos. Sendo assim, é de suma importância a formulação do problema e de tais objetivos, para que o agente possa elaborar os estados e ações necessárias para atingi-los.
Somado a isso, antes de tomar qualquer ação, o agente simula sequências de ações em seu modelo para encontrar uma solução, sendo tais ações geralmente orientadas por algoritmos de busca. Diante disso, existem diversos algoritmos disponíveis, sendo o problema a ser resolvido determinante para a escolha de um algoritmo em específico. A Imagem 1 a seguir contem uma sequência de etapas necessárias para um agente solucionar problemas.
Problemas: Malha Aberta VS Malha Fechada
Ao analisar a etapa de formulação do problema, pode-se agrupar os diferentes problemas em dois tipos principais: malha aberta e malha fechada. O primeiro refere-se àqueles em que não há elementos de incerteza, isto é, tem-se conhecimento sobre todas as variáveis e condições, tornando previsível os resultados das ações (Determinístico). Por outro lado, problemas de malha fechada são aqueles onde os resultados podem variar devido a fatores de aleatoriedade, visto a presença de elementos de incerteza (Não Determinísticos). A Imagem 2 resume a diferença entre os dois tipos apresentados.
Algoritmos de Busca
Agora sobre a etapa de Busca, primeiro é importante entender o que seria um "algoritmo de busca". Na ciência da computação e na matemática, algoritmos de busca são aqueles utilizados para encontrar algo em específico dentro de um conjunto de dados, a fim de resolver um determinado problema. Na prática, há diversas aplicações para tais algoritmos, como encontrar elementos dentro de determinadas estruturas de dados, navegação em mapas como o Google Maps e Moovit, otimização, etc.
Diante do exposto, podemos dividir os algoritmos de busca tradicionais em dois grupos genéricos: algoritmos de busca cega e algoritmos de busca informada. Em resumo, a diferença fundamental entre os dois tipos consiste na utilização de informações específicas do problema durante a busca, sendo a busca informada mais eficaz para encontrar soluções em espaços de busca complexos devido ao fato de utilizar conhecimento, heurísticas e até mesmo medidas arbitrárias para orientar o processo, enquanto a busca cega utiliza abordagens mais genéricas. A Imagem 3 a seguir apresenta mais detalhes sobre a diferença entre os dois tipos apresentados.
Obs.: o artigo Algoritmos de Busca em AI apresenta alguns exemplos de algoritmos de busca utilizados em tecnologias de inteligência artificial.
Funções Heurísticas
Como mencionado no tópico anterior, as informações dentro de uma busca informada vêm por meio das Funções Heurísticas. Sendo assim, tas funções são utilizadas por algoritmos de busca informada para estimar o quão perto um estado ou ação está da solução almejada. Além disso, elas atribuem valores ou custos aos estados com base em conhecimento específico do problema, ajudando tais algoritmos à priorizada a exploração dos estados promissores , tornando o processo de busca mais eficaz.
Busca em Ambientes Complexos
Quando se fala sobre algoritmos de busca, geralmente preocupa-se em encontrar um caminho considerando um espaço de busca. Contudo, em determinados problemas, é mais interessante preocupar-se apenas com o estado final, e não com o caminho até ele. Sendo assim, pode-se entender buscas em ambientes complexos como uma procura por soluções ou informações em situações desafiadoras, onde múltiplos fatores, incertezas e interações complicam a tarefa.
Uma abordagem muito utilizada para busca nesse nível de complexidade é a Busca Local. Essa classe de algoritmo opera proucurando, a partir de um estado inicial, os estados vizinhos, sem acompanhar os caminhos nem o conjunto de estados que já foram alcançados. Em outras palavras, esse tipo de algoritmo é não sistemático, pois podem nunca explorar uma parte do espaço de busca que, por sua vez, pode conter a solução. Por outro lado, esses algoritmos utilizam muita pouca memória e podem encontrar soluções razoáveis onde algoritmos sistemáticos não funcionam bem.
Algoritmos Genéticos
Algoritmos genéticos são uma classe de algoritmos de otimização inspirados no processo de seleção natural de Darwin. Eles são usados para resolver problemas de otimização e proucura, particularmente em cenários complexos ou quando não é possível encontrar soluções ótimas usando abordagens tradicionais. Tais algoritmos partem do pressuposto que há uma população de indivíduos (estados), onde os mais aptos (valor mais alto de uma função, por exemplo) produzem descendentes (novos estados) que povoam a próxima geração de estados por meio de um processo denominado recombinação, o qual pode acabar gerando mutações (pequenas alterações ou perturbações aleatórias nas soluções candidatas). Tais algoritmos consideram as seguintes parâmetros:
- Tamanho da População Inicial: número de exemplos/amostras de soluções candidatas no início.
- Número de Parentes: refere-se ao número de soluções candidatas que serão selecionadas como pais para a reprodução em uma determinada geração. Em geral, considera-se o número de parentes como 2.
- Representação de cada indivíduo: cada indivíduo dentro da população é representada como uma solução candidata que será avaliada quanto à sua qualidade em relação ao objetivo do problema
- Seleção: as soluções melhores avaliadas são selecionadas para reprodução. Tais soluções possuem maior probabilidade de serem escolhidas, mas não exclui a seleção de soluções menos promissoras
- Procedimento de Recombinação (Cruzamento): os pares de soluções selecionadas são combinados para criar descendentes. Isso simula a troca de informações genéticas na reprodução, criando novas soluções por meio da mistura entre características de ambos os pais ou por meio de mutação.
- Taxa de Mutação: consiste em um parâmetro que controla a probabilidade de ocorrência de mutações nas soluções candidatas durante o processo de evolução. Essa mutação é aplicada de maneira aleatória em alguns descendentes, introduzindo variação genética na população.
- Nova Geração: refere à próxima população de soluções candidatas que será criada após a seleção, reprodução e substituição das soluções da geração anterior.
Conclusão
Diante do exposto, percebe-se que a solução de problemas por meio de agentes de inteligência artificial envolve diversos assuntos da ciência da computação e matemática, como buscas (cega, guiada ou complexa) e funções heurísticas. Não obstante, em relação às buscas, há um grande espectro de complexidade de problemas os quais demandam algoritmos específicos para solução, cada um deles apresentando vantagens e desvantagens que devem ser levadas em consideração para tomadas de decisão dentro de um projeto de inteligência artificial.