WebQuest - Teoria da Computação
 
Emil Post
Maquina de Post
Computabilidade
IA
 
Grupo
Bibliografia
Home

 
 
 
 
IA

A Inteligência Artificial (IA) estuda técnicas para permitir ao computador exibir comportamentos considerados inteligentes quando observados em seres humanos. A pesquisa em IA tem se dividido em sub-áreas, as quais são: fundamentos, incluindo o uso da Lógica Matemática, investigando Lógicas Não-Clássicas e Provadores de Teoremas, sistemas baseados em conhecimento, que modelam o conhecimento e os métodos utilizados em um determinado domínio, com o auxílio de especialistas na área, criando sistemas que auxiliam usuários na solução de problemas desse domínio; apoio ao trabalho cooperativo, através do estudo das questões de cooperação, argumentação e negociação; interfaces cooperativas com interpretação e geração de textos no contexto de diálogo entre usuários e sistemas; representação do conhecimento impreciso, utilizando redes bayesianas e redes neuronais; e métodos de busca heurística para resolução de problemas de otimização combinatória e pesquisa operacional em engenharia, computação e automação.

As pesquisas em Inteligência Artificial são fortemente relacionadas com pesquisas em outras áreas, como por exemplo: Engenharia de Software, Multimedia e Teoria da Computação.

O ser humano sempre teve um impulso nato para criar outros seres. Embora ele tenha sempre tido a sua disposição um meio simples, e por que não dizer, agradável (o sexo), parece que na verdade ele nunca esteve satisfeito.

Provavelmente a Inteligência Artificial nasceu na antiga Grécia, onde procuravam criar autômatos que simulavam formas e habilidades do ser humano. Os gregos, criaram várias máqunias e dispositivos automáticos construídos por "Archimedes" para proteger "Siracura" do ataque dos romanos.

Já na Idade Moderna, nos séculos XVIII e XIX, com o surgimento da arte da relojoaria e da mecânica de precisão, surgiram vários dispositivos chamados de autômatos, como as figuras mecânicas que se moviam sozinhas para soar as badaladas dos relógios de grandes catedrais, e alguns prodígios como o desenhista Henri-Louiz Dros (que na época foi até acusado de feitiçaria, tal era a perfeição dos movimentos de seus autômatos); e o espetacular pato do mecânico francês Vaucanson, que reproduzia fielmente quase todos os movimentos de um pato de verdade!!! Embora fossem verdadeiras maravilhas da mecânica na época, esses mecanismos não passavam de relógios sofisticados, pois não tinham nenhum sistema de controle ou de sensoriamento que caracterizam os Robôs.

Nos anos 80, apareceu um novo pensamento na área de robótica, nascida nos laboratórios do MIT, em Massachussets. O cérebro por trás dessa corrente era de Rodney Brooks, que iniciou um caminho oposto ao qual a Inteligência Artificial estava caminhando e imaginou que um comportamento inteligente poderia ser o resultado de um ambiente complexo, e não de um raciocínio complexo. Ele criou um tipo de arquitetura de controle robótico, chamado de Arquitetura de Assunção.

Como podemos observar a Inteligência Artificial já vem se desenvolvendo a mais tempo do que poderíamos imaginar, agora com o alto avanço da tecnologia já podemos pensar em criaturas com capaxidade de aprendizado e de raciocínio lógico.

 Ecossistemas e Animais Virtuais.

Em se tratando do estudo de sistemas ecológicos e até de indivíduos, a Biologia quase sempre adotou uma abordagem reducionista: explicar um fenômeno global através do estudo detalhado de cada uma das partes, partindo de um nível mais alto do sistema até um mais baixo (top-down). Com o aparecimento dos computadores e da Vida Artificial, os cientistas têm agora a possibilidade de utilizar uma abordagem totalmente contrária, sintética: simular cada indivíduo, seu ambiente e as interações existentes, e observar as propriedades emergentes do sistema.

Pensando num intercâmbio entre Computação e Biologia:

Podemos aplicar técnicas da computação para entender melhor os processos biológicos (como simulações de ecossistemas), e da mesma maneira utilizar modelos biológicos para resolver problemas computacionais (como é o caso dos Algoritmos Genéticos).

Um pioneiro no estudo e simulação de ecossistemas virtuais foi o biólogo Thomas S. Ray, na segunda metade da década de 80. Certa vez, alguém do MIT comentou com ele que era possível construir um programa de computador que se reproduzisse (na mesma época os vírus de computador já estavam disseminando-se pelo mundo). Interessado, ele pediu explicações, que não foram suficientes (talvez o rapaz do MIT não tenha sido muito claro, ou Ray não tenha conseguido entender, visto que não sabia nada sobre computadores - ou ambos). Aquilo mexeu profundamente com ele, e a idéia de criar um ecossistema dentro do computador tornou-se uma obsessão. Ray pensou em colocar vários programas, como indivíduos de um ecossistema, rodando em um computador, e ver o que acontecia.

Passado algum tempo, ele já sabia trabalhar com uma linguagem de programação. Foi quando percebeu uma limitação óbvia: os códigos de máquina que compõe qualquer programa de computador são vulneráveis demais às mutações necessárias à evolução das espécies. Um erro apenas, um bit que seja estranho ao processador, e nada mais funciona. Além disso, havia o perigo de que, se daquele experimento realmente surgisse algo capaz de reproduzir-se, poderia tornar-se potencialmente um vírus poderoso (como nas experiências com vírus reais).

A solução encontrada foi criar uma máquina virtual, um computador dentro de um computador (muito parecido com as máquinas virtuais Java que rodam programinhas em linguagem Java nos navegadores Web): nada poderia escapar dali, pois as instruções da máquina virtual eram totalmente diferentes das do computador "real" no qual estavam rodando (vivendo?) os programas-criaturas . Emprestando algumas idéias da biologia, Ray criou uma arquitetura e um conjunto de instruções para essa máquina que eram resistentes à mutações que os programas sofreriam.

Então, uma certa noite, nosso amigo finalmente levou a cabo sua idéia: construiu um programa-criatura, de cerca de 80 instruções, que ele chamou de "ancestral". A função básica desse programa era reproduzir-se, e as outras criaturas que porventura viessem a existir deveriam competir entre si por memória e tempo de processamento (analogamente aos conceitos de espaço e energia no mundo real). Ray deixou que o programa funcionasse, rodando a noite toda, e foi dormir agitado, sabendo que alguma coisa interessante surgiria dali (alguns experimentos anteriores já haviam mostrado a potencialidade de Tierra, como ficou batizado o sistema).

No dia seguinte, Ray investigou o que havia sido criado e - bingo! - lá estavam eles: programas-criaturas, de diversas "espécies", populando a memória da máquina virtual. Mutações haviam transformado as gerações do programa-ancestral, e agora ele observava estratégias evolutivas e fenômenos com correspondentes naturais: haviam programas parasitas, com apenas 45 instruções, que se aproveitavam do trecho de código de outros programas para copiarem a si mesmos. Havia extinções em massa, e também períodos de grande diversidade "biológica" seguidos de estabilidade, em muito parecidos com o fenômeno natural da evolução puntuada de Stephen Jay Gould (com base em registros fósseis, foi possível constatar que a evolução não ocorre de maneira uniforme e linear com o tempo, mas sim através de períodos explosivos de diversidade de espécies - como a famosa explosão Cambriana).

 

Outro experimento interessante com relação aos ecossistemas virtuais aparece em PolyWorld, de Larry Yager.

PolyWorld é um ambiente virtual habitado por criaturas controladas por redes-neurais artificiais, ou seja, elas possuem uma certa capacidade de aprendizado e processamento de informações proveniente de "sentidos" (como a visão). Além disso, existe também um código genético em cada uma delas que define certas características, tanto "físicas", (seu tamanho, força, velocidade máxima) como "mentais" (dados relacionados à arquitetura de sua rede neural, como taxa de aprendizado, número de neurônios, etc). Um simples sistema de metabolismo simulado controla a taxa de energia de cada indivíduo, energia essa que se cair para zero significa sua morte. Cada criatura também pode realizar certas ações, como atacar, comer, cruzar, mover-se, entre outras. Esse mundo virtual é então preenchido com essas criaturas, e a simulação inicia-se. Vale lembrar que as criaturas são capazes de gerar descendentes (através da ação "cruzar"), e que assim acaba existindo uma "seleção natural", em que organismos mais aptos sobrevivem em detrimento dos menos adaptados.

Yager, assim como Tom Ray, observou o aparecimento de comportamentos bem definidos, como se houvesse diferentes "espécies" de criaturas. Alguns dos comportamentos observados:

  • Resposta aos estímulos visuais, através do aumento da velocidade
  • Algumas criaturas "fugiam", quando atacadas por outras, enquanto
  • Algumas criaturas respondiam a ataques, revidando

A principal lição que podemos tirar desses exemplos é que, independente da discussão (que acaba tornando-se até mesmo uma questão filosófica) se esses organismos virtuais estão ou não mesmo vivos, o principal objetivo da VIDA ARTIFICIAL é abstrair os mecanismos da Vida, independente do meio em que ela ocorra.

 

A visão de uma máquina é algumas vezes chamada de visão computacional, reconhecimento de padrões de imagem, análise automática de imagens, análise de cenas ou entendimento de imagem. O desenvolvimento de alguns conceitos gerais de Inteligência Artificial tem sido largamente utilizados no trabalho de pesquisa da visão computacional. A pesquisa em visão computacional pode ser dividida em duas categorias: Baseia-se no desenvolvimento de teorias e métodos voltados à extração automática de informações úteis contidas em imagens capturadas por dispositivos imageadores, tais como câmera de vídeo, scanner, etc. Como ilustrações em visão computacional podemos citar:

  • Modelos computacionais: que aumentam o nosso entendimento de como processamos as informações visuais;
  • Produção de sistemas: sistemas desenvolvidos e que são úteis para aplicações na indústria, medicina, comércio, etc.
  • Por que automatizar tarefas visuais? Existem muitas situações em que os computadores se mostram como a melhor opção para desempenhar tarefas visuais do que os humanos.
  • Locais perigosos: tarefas que colocam os seres humanos em situações de perigo são fortes candidatas a serem automatizadas, por exemplo, inspeção em usinas nucleares.
  • Fadiga: tarefas que levam à exaustão, por exemplo, inspeção industrial e sistemas de segurança baseados em vídeo.
  • Gastos: tarefas que requeiram treinamento especializado, resultando em mão de obra mais cara, por exemplo, análise médica de imagens de tumores e análise de imagens de satélites.
  • Quantificação: tarefas que necessitam de acuidade visual maior, por exemplo, a contagem do número de células em uma amostra ao microscópio.
  • Dados excessivos: tarefas nas quais existam um número excessivo de dados , por exemplo, inspeção dos produtos em uma linha de produção em massa.

Visão por computador (Visão Computacional) é á área da ciência que se dedica a desenvolver teorias e métodos voltados à extração automática de informações úteis contidas em imagens. Tais imagens são capturadas por dispositivos imageadores, tais como câmera de vídeo, scanner, etc. Por este motivo, a recente evolução tecnológica dos computadores e dispositivos imageadores, a preços acessíveis, tem possibilitado a crescente aplicação de visão computacional nas mais diversas áreas.

Como ilustrações em visão computacional, podemos citar: análise automática de sêmem humano, medição computadorizada do dimensional de peças, rastreio de alvos para detectação de intrusos, análise morfológica de células, reconhecimento e sintetização de faces humanas, entre outras. A criação de sistemas de visão computacional, seja para aplicações em inspeção industrial ou para navegação de robôs móveis, envolve, quase sempre, a execução de um determinado conjunto de transformações em dados obtidos de sensores como câmeras e sonares. Para esta classe de problemas é possível a determinação de uma arquitetura de software que suporte as principais etapas do desenvolvimento deste tipo de sistemas, enfatizando o reaproveitamento de código e minimizando o esforço dispendido em atividades repetitivas.