1Resumo — O método de busca em largura ou profundidade é
um alternativa para resolução de problemas por meio da geração de sistemática de novos estados, os quais são testados alguns pontos a fim de se certificar se correspondem à solução do problema, se existir. Essa estratégia basicamente segue uma ordem de expansão de nodos. Também se pode denominar como busca cega, que busca estritamente a informação disponível na formulação do problema principalmente na área de Inteligência Artificial. Com o intuito de desenvolver um código que auxilia a resolução de problemas com esta característica, foi utilizada a programação em VBA (Visual Basic for Applications) que é um Figura 1. Grafo de busca em Largura. – Fonte: Autores recurso disponível também no Excel e possibilita uma formatação mais estruturada e avançada, capaz de realizar A busca em profundidade é aquela que sempre expande o vários tipos de operações, cálculos, copiar, colar, fazer gráficos, nó seguinte, imediatamente mais profundo da borda atual da simulações, jogos, buscas, etc. No VBA, tratando-se de Excel, o principal objetivo é trabalhar diretamente com os dados árvore de busca até que este não tenha mais sucessores. À armazenados nas células das planilhas. medida que esses nós são expandidos, eles são retirados da Assim este trabalho foi desenvolvido com base em um código borda e então a busca “retorna” ao nó seguinte mais profundo de busca por largura e profundidade em determinadas células, e que tem sucessores inexplorados. O Algoritmo de busca em o intuito é automatizar tarefas repetitivas, proporcionando uma profundidade é uma instância do algoritmo de busca em grafo, maior rapidez na elaboração de algumas tarefas. sendo que a busca em largura utiliza uma fila FIFO e a busca em profundidade utiliza uma fila LIFO. Uma fila LIFO Paravras Chave — Visual Basic for Appliacations, Excel, significa que o nó gerado mais recente é o escolhido para código. expansão e deverá ser o nó mais profundo não expandido porque é mais do que o seu “pai”, que, por sua vez, era o nó não expandido mais profundo quando foi selecionado [2]. I. INTRODUÇÃO
Define-se Inteligência Artificial (IA) como “a parte da
ciência da computação envolvida no projeto de sistemas que exibem características que associamos com a inteligência do comportamento humano” [1] Busca em largura é uma estratégia simples em que o nó raiz é expandido primeiro, em seguida todos os sucessores do nó raiz são expandidos, depois os sucessores desses nós, e assim por diante. Em geral, todos os nós em dada profundidade na árvore de busca são expandidos, antes que todos os nós no Figura 2. Grafo de busca em Profundidade. – Fonte: Autores nível seguinte sejam expandidos. A busca em largura é uma instância do algoritmo de busca em grafo, em que o nó mais II. MATERIAIS E MÉTODOS raso não expandido é escolhido para a expansão. Isso é conseguido utilizando uma fila FIFO para a borda, assim os A codificação da aplicação foi realizada na linguagem novos nós vão para o fim da fila, e os nós antigos, que são Visual Basic for Applications (VBA) que é uma linguagem de mais rasos que os novos são expandidos primeiro. programação baseada no Visual Basic (VB) e está concebido para funcionar em conjunto com diferentes aplicativos da Microsoft, tais como o Excel, Word, Project, Access e outras aplicações desenvolvidas pela empresa [3]. Este trabalho trata do problema de busca de caminhos, assunto da área da Inteligência Artificial (IA), que é um estudo de como fazer os computadores realizarem tarefas em que, no Gomes. S, UNISOCIESC – Curitiba, Paraná, Brasil, momento, as pessoas são melhores [4]. gomessidnei@yahoo.com Algumas das ciências mais recentes que abrangem Luis. S, UNISOCIESC – Curitiba, Paraná, Brasil, marcelojustino75@gmail.com diversos seguimentos foram desenvolvidas dentro dos dois métodos de busca em espaços de estados sendo busca em profundidade e busca por largura. Também em um problema Com este novo formato reestruturado, dividiu-se o código baseado em um grafo, que é um conjunto de caminhos com em três módulos utilizando a função “Call” do VBA para pontos interligados pelos vértices e arestas, formando o que integrar-se os módulos de programação, conforme podemos chamar de nós. demonstrado na figura 5.
III. CÓDIGO DE BUSCA
O problema aqui descrito é a simulação de uma busca em
largura e também uma busca em profundidade em uma árvore na forma de grafo, mostrado na figura 3. O objetivo é selecionar um determinado valor, neste caso os numerais 10 e 20. Selecionar também o modo de busca em uma tabela e desenvolver um código em VBA para realizar a busca, retornando as coordenadas do nó procurado e o número de nós percorridos até encontrá-lo. Figura 5. Estrutura do Código VBA. – Fonte: Autores
No módulo 1 definiu-se a cor principal de todos os pontos,
no módulo 2 desenvolveu-se o código para realizar a busca por profundidade e no módulo 3 o código para a busca por largura. O botão de busca está atribuído ao módulo 1, que percorre por todas as células com conteúdo numérico e os colori com a cor definida na variável “cor”. Após todos os comandos do módulo 1 serem percorridos, o código desvia a operação para o módulo 2 (busca por profundidade) através do comando “Call profundidade”, e quando entra no primeiro comando “IF” ele compara se a variável “P” (atribuição de Figura 3. Grafo. – Fonte: Apresentação Professor Vitor. profundidade). Se esta for verdadeira, então percorrerá os comandos seguintes. Caso contrário, a função entra no Na tabela1 mostra-se as variáveis que auxiliam na resolução comando “Call Largura” e desvia a varredura para o módulo 3. do problema, tais como, número do nó procurado, tipo de procura (se é largura ou profundidade), o resultado encontrado mostrado em forma de coordenadas e a quantidade de nós percorridos até o ponto desejado.
Figura 6. Declarações do Código VBA. – Fonte: Autores
No código de busca encontram-se os dois primeiros
Tabela 1: Auxilio da busca – Fonte: Autores comandos como visto na figura 6. A variável “valor”, que recebe o valor digitado na linha 2, coluna 26, que faz Para dar início à programação, a árvore foi reorganizada de referência ao nó procurado da tabela 1. A variável “modo” forma que simplificasse o entendimento, mas mantendo a recebe o valor digitado na linha 3, coluna 26, que faz mesma característica anterior como mostrado na figura 4. Esta referência ao tipo de procura que o código vai realizar. reorganização também foi necessária devido ao ambiente VBA utilizar a estrutura de planilhas (linhas e colunas) do Na sequência, conforme figura 7, o código segue no Microsoft Excel, sendo então, esta abstração, uma das primeiro comando de decisão “IF”. primeiras ações para poder-se estruturar o código.
Figura 7. 1ª e 2ª tomada de decisão do Código VBA. – Fonte: Autores
Esta função limita a área de busca do código que está
definido no máximo em 23 colunas em “x” e quinze linhas em Figura 4. Grafo. – Fonte: Autores “y”. No segundo “IF”, soma-se 1 a cada célula percorrida se ela for diferente de vazio, e armazena esta contagem sequencial na variável “Z”. Este valor armazenado é exibido na figura 1 como “número de nós percorridos”. As variáveis algoritmo desenvolvido possa ser modificado e ou ampliado. “y” e “x” do código, representam as linhas e colunas Desta forma pode ser utilizado em outras aplicações práticas percorridas. envolvendo este tipo de problema de busca, economizando tempo e por sua estrutura de código ser amigável e de fácil compreensão. O presente artigo não tem como objetivo o aprofundamento em questões de implementação, nem de estudo de complexidade dos algoritmos, mas apresentar principalmente de forma conceitual como podem ser aplicados Figura 8. 3ª tomada de decisão do Código VBA. – Fonte: Autores tais algoritmos nestes sistemas de busca. Para um estudo mais aprofundado sobre a teoria dos grafos e buscas, existem boas Como visualizado na figura 8, quando o valor selecionado obras que abrangem melhor as questões de implementação, na tabela 1, célula (2, 26) é igual “Z”, significa que o valor outros métodos em função do ambiente de código utilizado e escolhido foi encontrado e esta variável transfere o valor exploram mais a fundo outras possibilidades de algoritmos. memorizado para a tabela 1, célula (5, 26) que mostra a quantidade de nós percorridos. Já a célula (4, 26) informa e escreve as coordenadas que se encontra o número procurado e armazena esta informação nas variáveis “y e x”. REFERÊNCIAS O quarto “IF” do código VBA, da figura 9, compara o valor encontrado em “y” e “x” com o “valor” e se este for igual ao [1] Feigenbaum E.A. “The Handbook of Artificial valor selecionado, o comando “with>interior>color” pinta esta Intelligence”, Vol. 1 (1981) célula com a cor amarela, que é definida pelo número 65535 do código. [2] Russel, Stuart J. “Inteligência Artificial” (2012)
[3] Peres, P. (2005), “Excel Avançado”, Edições Sílabo.
Figura 9. 4ª tomada de decisão do Código VBA. – Fonte: Autores
Os comandos do módulo 3 de busca por largura, seguem os
mesmos passos descritos acima.
IV. RESULTADOS E DISCUSSÃO
O algoritmo desenvolvido e descrito neste relatório, segue uma sequência de busca “cega”, não recursiva. Identifica-se o valor do nó desejado e quando a busca é selecionada por profundidade, ela é executada de cima para baixo e da direita para esquerda, sendo os extremos limitados pelos valores definidos, neste caso máximo de 15 linhas e 23 colunas. Quando selecionada a busca por largura, ela é executada da esquerda para direita e de cima para baixo, igualmente com os mesmos limites estabelecidos no modo anterior. Nesta busca cega, quando o valor do nó desejado é encontrado usando o modo selecionado, o endereço da sua célula (linha e coluna) é armazenado, preenchido com cor e exibido. As buscas serão sempre finitas com este código porque limitou-se o número de células visitadas por profundidade e largura.
V. CONCLUSÃO
A utilização do Visual Basic for Applications (VBA) para esta
resolução de um problema de busca em profundidade e largura na área de estudo de Inteligência Artificial (IA) mostrou-se eficiente. Porém, houve grande discussão em sala de aula, devido ao fato de que foi-se necessário “abstrair” para encontrar uma solução viável para a recursão no ambiente Microsoft Excel. Com isso os autores acreditam que o