Logo Passei Direto
Buscar
Material
páginas com resultados encontrados.
páginas com resultados encontrados.

Escolha uma das opções e acesse esse e outros materiais sem bloqueio. 🤩

Cadastre-se ou realize login

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Escolha uma das opções e acesse esse e outros materiais sem bloqueio. 🤩

Cadastre-se ou realize login

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Escolha uma das opções e acesse esse e outros materiais sem bloqueio. 🤩

Cadastre-se ou realize login

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Escolha uma das opções e acesse esse e outros materiais sem bloqueio. 🤩

Cadastre-se ou realize login

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Escolha uma das opções e acesse esse e outros materiais sem bloqueio. 🤩

Cadastre-se ou realize login

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Escolha uma das opções e acesse esse e outros materiais sem bloqueio. 🤩

Cadastre-se ou realize login

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Escolha uma das opções e acesse esse e outros materiais sem bloqueio. 🤩

Cadastre-se ou realize login

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Escolha uma das opções e acesse esse e outros materiais sem bloqueio. 🤩

Cadastre-se ou realize login

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Escolha uma das opções e acesse esse e outros materiais sem bloqueio. 🤩

Cadastre-se ou realize login

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Escolha uma das opções e acesse esse e outros materiais sem bloqueio. 🤩

Cadastre-se ou realize login

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Prévia do material em texto

INTELIGÊNCIA ARTIFICIAL 
APLICADA 
AULA 1 
 
 
 
 
 
 
 
 
Prof. Luciano Frontino de Medeiros 
 
 
2 
 
 
CONVERSA INICIAL 
Nesta aula você verá uma introdução sobre Inteligência Artificial, como 
podemos classificar as definições básicas, o conceito de agente inteligente e um 
breve histórico da Inteligência Artificial. Estes conceitos iniciais dão subsídios 
para se estudar na sequência as linhas de pesquisa e o detalhamento de cada 
uma destas abordagens. 
TEMA 1: INTRODUÇÃO À INTELIGÊNCIA ARTIFICIAL 
 Quando falamos das criações tecnológicas construídas pelo ser humano 
ao longo da sua história, a Inteligência Artificial (IA) surge como uma das áreas 
de conquistas mais importantes alcançadas pela humanidade. Quando dirigimos 
um carro, fazemos uma busca na Internet, acionamos um eletrodoméstico, 
conversamos com um celular, controlamos uma fábrica automatizada, já estão 
envolvidos vários algoritmos e dispositivos criados para simular em certa medida 
o pensamento ou a ação humana de maneira a facilitar diversas operações. A IA 
permite que as ferramentas criadas pelo ser humano alcancem um alto nível de 
complexidade. 
 Quando a IA surgiu, em meados da década de 1950, havia uma grande 
expectativa de que em pouco tempo, com o avanço da tecnologia dos 
computadores, chegaríamos a máquinas que teriam o mesmo patamar de 
inteligência da humanidade. Apesar desta expectativa, o que aconteceu foi a 
constatação de uma série de fracassos e decepções obtidos nos projetos de 
construção de IA, muito disso em função da subestimação dos processos 
inteligentes que acontecem em nosso cérebro ou mente. Entretanto, mesmo com 
tais fracassos, surgiram uma série de produtos durante as pesquisas, que 
fizeram outros campos da Ciência da Computação evoluir, surgindo áreas tais 
como a Engenharia de Software, Bancos de Dados e Processamento 
Compartilhado. Podemos afirmar que a IA representa o ápice da história da 
tecnologia, desde as ferramentas manipuladas em pedra pelos primeiros 
 
3 
 
hominídeos, passando pelas idades dos metais, os primeiros dispositivos e 
relógios que utilizavam rodas dentadas, até o advento da computação. O homem 
exterioriza as ferramentas a partir do seu intelecto como forma de adaptar-se 
melhor ao ambiente ou mesmo alterá-lo. A tecnologia conta, a partir da IA, com 
a simulação de processos inteligentes que auxiliam no reconhecimento de 
padrões, na tomada de decisão ou na execução de 
tarefas repetitivas. 
 Entretanto, as pesquisas relacionadas à IA têm características 
diferenciadas, de acordo com a forma com a qual se abordam as questões de 
inteligência. Por um lado, pode-se considerar a forma como os neurônios se 
comunicam, própria da fisiologia do cérebro. Por outro, pode-se considerar a 
maneira como a mente lida com símbolos e abstrações. Antes, é necessário 
conceituar a IA e, para isso, é preciso saber primeiro o que é inteligência. Como 
podemos definir a inteligência? Todos os seres vivos que possuem um cérebro 
são, de certa forma, inteligentes? Ou apenas o ser humano que tem este 
privilégio? Máquinas podem ser inteligentes? Mas a que tipo de inteligência nos 
referimos? Pode-se notar que a intenção de definir “inteligência” não parece ser 
algo simples ou trivial. 
TEMA 2: DEFINIÇÕES DE INTELIGÊNCIA ARTIFICIAL 
Não há uma maneira única de conceituar a Inteligência Artificial, por 
termos uma série de elementos que se manifestam de maneira diferenciada e 
também quanto às diferentes interpretações em como os processos de IA se 
correlacionam com os mecanismos do cérebro e da mente humana. 
Russel e Norvig (2004, p. 5) compilam diferentes definições a partir da 
classificação em processos de pensamento, relativos aos mecanismos de 
raciocínio e processos de ação ou comportamento, relativos ao 
comportamento do artefato. Transversalmente a estes processos, considera-se 
também a similaridade com relação ao ser humano ou a alguma racionalidade 
envolvida. Dessa forma, produz-se quatro quadrantes em que as definições 
podem ser classificadas. 
 
 
4 
 
 
Figura 1: Definições de IA classificadas em quatro quadrantes 
 
Ser humano Racionalidade 
P
e
n
s
a
r 
Sistemas que pensam como seres 
humanos 
Sistemas que pensam 
racionalmente 
A
g
ir Sistemas que agem como seres 
humanos 
Sistemas que agem racionalmente 
Fonte: adaptado de Russel e Norvig (2005, p. 5). 
 
Quadro 1: Definições conforme os quatro quadrantes 
Quadrante Definições 
Pensar como ser 
humano 
“O novo e interessante esforço para fazer os computadores 
pensarem...máquinas com mentes, no sentido total e literal”. 
(HAUGELAND, 1985). 
“[Automatização de] atividades que associamos ao 
pensamento humano, atividades como a tomada de 
decisões, a resolução de problemas, o aprendizado”. 
(BELLMAN, 1978). 
Pensar 
racionalmente 
“O estudo das faculdades mentais pelo uso de modelos 
computacionais”. (CHARNIAK; MCDERMOTT, 1985). 
“O estudo das computações que tornam possível perceber, 
raciocinar e agir”. (WINSTON, 1992). 
 
5 
 
Agir como ser 
humano 
“A arte de criar máquinas que executam funções que exigem 
inteligência quando executadas por pessoas”. (KURZWEIL, 
1990). 
Agir racionalmente 
“A Inteligência Computacional é o estudo do projeto de 
agentes inteligentes”. (POOLE et al., 1998). 
Fonte: adaptado de Russel e Norvig (2004, p. 5). 
 
Enquanto o “pensar” se refere aos mecanismos implícitos existentes no 
cérebro/mente, o “agir” se refere à manifestação no mundo real de um 
comportamento inteligente. Por exemplo, quando falamos de um software 
inteligente que envolva tomada de decisões baseadas em um ser humano 
especialista, estamos de acordo com a definição sobre “pensar como 
um ser humano”. 
Já no caso de um sistema inteligente, que execute raciocínios de acordo 
com regras da lógica (por exemplo, utilizando um programa PROLOG – 
programação lógica), caracteriza a definição do “pensar racionalmente”. 
Um sistema de jogo de xadrez, que execute as regras de acordo com regras 
definidas, também se caracteriza por esta definição. 
Para saber mais... 
O computador Deep Blue, desenvolvido pela IBM na 
década de 1990, tornou-se famoso por vencer o 
campeão mundial de xadrez Garry Kasparov. Veja 
no link a seguir ou por meio do QR Code ao lado. 
<http://operamundi.uol.com.br/conteudo/noticias/97
27/hoje+na+historia+1996++kasparov+derrota+o+c
omputador+deep+blue+da+ibm.shtml>. 
 
 
 
 
6 
 
O comportamento inteligente requer que exista uma ação sobre o 
ambiente, sendo característico da automação e da robótica. No caso de um robô 
antropomórfico, que execute movimentos similares ao ser humano 
(por exemplo, o robô Asimo, desenvolvido pela Honda, que caminha, corre, 
empurra carrinho de supermercado e serve cafezinho), é classificado na 
definição do “agir como um ser humano”. 
 
Para saber mais... 
Conheça o robô Asimo, um projeto 
desenvolvido pela empresa japonesa Honda, 
idealizado para executar diversas tarefas do 
cotidiano feitas pelo ser humano, por meio do 
endereço abaixo, ou do QR Code ao lado. 
<https://www.youtube.com/watch?v=Mp0lJz78
zEM>. 
 
 
No caso de robôs que executem alguma atividade no ambiente, 
de forma diferente de como um ser humano faria, caracteriza a definição do “agir 
racionalmente”. Por exemplo, um robô aspirador de pó executa um algoritmo de 
limpeza desviando de obstáculos de acordo com sensoriamento de proximidade 
feito por ele. Um robô de solda em uma fábrica também pode ser considerado 
nesta definição. 
 
7 
 
Parasaber mais... 
O conceito de robô (do inglês robot) provém da 
palavra robota, cunhada pelo escritor nascido 
onde é hoje a República Tcheca, Karel Capek, 
significando trabalho compulsório ou escravo. 
Karel Capek escreveu a peça de teatro R.U.R., 
contando a história do cientista Rossum, que 
desenvolveu uma substância utilizada na 
história para a fabricação de humanoides. 
Acesse no link “Robôs do Passado”, 
http://www.select.art.br/robos-do-passado/, ou 
por meio do QR Code ao lado. 
 
 
TEMA 3: LINHAS DE PESQUISA 
Os estudos na área de Inteligência Artificial são o resultado de uma 
confluência de pesquisadores de diversas áreas do conhecimento, sejam da 
Filosofia, Matemática, Engenharia de Computação, Ciências Cognitivas, 
Psicologia, Cibernética, dentre outras. Muitos cientistas começaram as 
pesquisas nas suas áreas de origem e depois foram avançando em outras 
pertinentes à pesquisa de IA. 
Mas a própria dúvida que permanece referente ao funcionamento do 
cérebro, ou da mente, que tem suas ramificações na Filosofia e na Psicologia 
Cognitiva, influencia na forma como se constrói os dispositivos inteligentes. 
Se formos pela perspectiva de que existe o cérebro e seus elementos 
mais básicos, os neurônios e as sinapses conectando-os, então o desejo é o de 
construir cérebros artificiais, com neurônios artificiais que simulem a forma como 
a eletroquímica dos cérebros biológicos funcionam. Mas no caso da perspectiva 
de que existe uma mente que funciona a partir do processamento de símbolos, 
como um software que é executado sobre um hardware (o cérebro fisiológico), 
 
 
8 
 
então o desejo é o de construir dispositivos que lidem com estes símbolos da 
mesma forma que a mente humana funciona. 
No primeiro caso, temos uma linha de pesquisa dentro da IA que se 
denomina conexionista, a qual está interessada na arquitetura de dispositivos 
que simulem as células biológicas que interagem para o surgimento de 
processos inteligentes. Dentro da linha conexionista, temos como exemplo as 
redes neurais artificiais e os sistemas imunológicos artificiais. As redes 
neurais artificiais (RNA) constituem um campo de pesquisa em que a 
preocupação é lidar com tarefas tais como o reconhecimento de padrões, a 
previsão e a tomada de decisão utilizando redes de unidades conectadas, 
treinadas a partir de algoritmos que funcionam baseados em amostras do mundo 
real e podem assim aprender a classificar padrões (HAYKIN, 2001). 
Os sistemas imunológicos artificiais são baseados no funcionamento do sistema 
imunológico que aprende de uma forma muito rápida sobre elementos estranhos 
(antígenos) que entram em um sistema vivo e que desencadeiam uma reação 
contrária, com a produção de anticorpos para eliminar os antígenos (MEDEIROS 
et al., 2008). 
No segundo caso, temos a linha de pesquisa denominada simbólica. 
A linha simbólica busca lidar com processos inteligentes, utilizando linguagens 
baseadas em lógica e construção de redes semânticas para solucionar 
problemas e simular conhecimento especialista para contextos de diagnóstico. 
Os sistemas derivados desta linha de pesquisa se denominam ainda de 
sistemas baseados em conhecimento. Nessa linha são derivadas as 
pesquisas sobre a linguagem LISP (BITTENCOURT, 1998, p.169), que trabalha 
com representação de conhecimento na forma de listas, e a linguagem de 
programação lógica PROLOG, (PALAZZO, 1997, p. 2), que permite a 
manipulação de símbolos por meio de representação de conhecimento na forma 
de fatos e regras. Os sistemas especialistas (RUSSELL; NORVIG, 2004, p. 24) 
são uma das áreas mais relevantes dentro da linha simbólica, referindo-se a 
sistemas em que o conhecimento de um especialista humano em uma área bem 
delimitada é representado em uma linguagem, de forma a permitir o diagnóstico 
de situações e a execução de ações que seriam feitas como se fosse por um ser 
 
9 
 
humano. Portanto, é importante salientar que na linha simbólica, a preocupação 
se volta à forma como a mente pensa, e não como o cérebro nas suas partes e 
divisões funciona. 
Ainda na área simbólica, temos as pesquisas que são feitas na área de 
ontologias. As ontologias se referem a representações de conhecimento 
alcançadas por consenso, em áreas específicas de domínio do conhecimento 
humano, que podem ser manipuladas tanto por seres humanos quanto por 
agentes inteligentes. As ontologias permitem tanto a representação quanto os 
procedimentos para inferência e raciocínio sobre tal representação, 
possibilitando o desenvolvimento da Web Semântica (CORCHO et al., 2008). 
Outra linha de pesquisa que se soma às linhas simbólica e conexionista e 
que foge do esquema mente-cérebro é a denominada linha evolucionária. As 
pesquisas da IA na linha evolucionária se baseiam na forma como se processa 
a evolução biológica sobre o planeta, e busca simular tais processos 
evolucionários em sistemas de computador para a resolução de problemas. 
Dentro desta linha de pesquisa, podemos encontrar uma das áreas mais 
exploradas que são os algoritmos genéticos. Os algoritmos genéticos são 
caracterizados como uma classe de algoritmos de busca. Eles implementam o 
conceito de uma solução inicial, a qual evolui ao longo da execução do algoritmo, 
em que são aplicados operadores que simulam a seleção natural biológica, o 
cruzamento de cromossomos e a mutação genética, produzindo soluções 
melhores ao longo de várias gerações (LINDEN, 2012). Outra área bastante 
estudada é a programação genética. Aqui não há a preocupação de se fazer 
programas, mas o próprio algoritmo cria programas iniciais e blocos de 
programas que vão se combinando e evoluindo de acordo com o objetivo a ser 
alcançado, até chegar em programas capazes de executar a tarefa. Também 
são aplicados à programação genética processos equivalentes à seleção natural 
biológica e à mutação genética (KOZA,1992). 
 
 
 
 
10 
 
Figura 1: Inteligência Artificial e suas linhas de pesquisa 
 
TEMA 4: BREVE HISTÓRICO 
A Inteligência Artificial tem o seu surgimento oficial como um campo de 
pesquisas científicas a partir de 1956, por ocasião da Conferência de 
Darthmouth. A proposta era de uma conferência de verão de 2 meses no 
Darthmouth College (Hanover, New Hampshire) sobre temas como computação 
automática, computação com uso da linguagem natural, redes neurais, 
aleatoriedade e criatividade e abstrações. Os proponentes eram John McCarthy 
(Darthmouth College), Marvin Minsky (Harvard University), Nathaniel Rochester 
(IBM) e Claude Shannon (Bell Laboratories). No Quadro 2, temos uma biografia 
desses proponentes e mais alguns pesquisadores da então nascente área de IA. 
 
Quadro 2: Algumas personalidades e pesquisadores que auxiliaram a criação do campo da IA 
Personalidade Descrição 
John McCarthy 
(1927-2011) 
 
Considerado um dos fundadores, foi o primeiro a cunhar o 
termo Inteligência Artificial, um dos organizadores da 
Conferência de Dartmouth. Desenvolveu a família de 
linguagens de programação LISP, que trabalha basicamente 
com listas de dados. Teve influência no desenvolvimento da 
linguagem ALGOL e popularizou a ideia de compartilhamento 
de tempo (time sharing). 
 
11 
 
Marvin Minsky 
(1927-2016) 
Cientista cognitivo, considerado cofundador da área de 
Inteligência Artificial e organizador da Conferência de 
Dartmouth. Foi cofundador do laboratório de Inteligência 
Artificial do MIT. Tem como principal contribuição a 
construção do primeiro computador baseado em redes 
neurais. Escreveu com Seymour Papert o livro “Perceptrons”, 
no qual descreveu a incapacidade do perceptron simples 
para resolvercertos problemas, como o problema do XOR. 
Desenvolveu uma teoria da mente como uma sociedade de 
agentes, em que a inteligência surge como um produto da 
interação de partes 
não inteligentes. 
Nathaniel Rochester 
(1919-2001) 
Considerado cofundador da Inteligência Artificial, engenheiro 
e pesquisador da IBM. Liderou um grupo de estudos em 
vários projetos na área de reconhecimento de padrões e 
teoria da informação. Dentre outros projetos, o grupo simulou 
o comportamento de redes neurais abstratas em um 
computador IBM 704. 
Claude Shannon 
(1916-2001) 
Matemático americano, engenheiro eletrônico e criptógrafo, é 
considerado o pai da teoria da informação. Propôs uma 
medida de incerteza de informação que é o fundamento da 
teoria matemática da comunicação. Também foi participante 
e organizador da Conferência de Darthmouth, e é 
considerado como um dos inventores do circuito digital e do 
computador digital. 
Norbert Wiener 
(1894-1964) 
Foi um matemático estadunidense, conhecido como o 
fundador da cibernética. O primeiro a visualizar que a 
informação como uma quantidade era tão importante quanto 
a energia ou a matéria. Trabalhou para o governo americano 
no desenvolvimento de sistemas de mira automática. 
Desenvolveu o estudo dos sistemas 
autorregulados e o conceito de retroalimentação negativa. 
Foi integrante das conferências Macy, entre 1946 e 1953, 
contribuindo para a consolidação da teoria cibernética. 
 
 
12 
 
Frank Rosenblatt 
(1928-1971) 
Psicólogo americano, considerado uma espécie de "homem 
da renascença" devido à sua excelência em várias áreas, 
incluindo computação, matemática, neurofisiologia, 
astronomia e música. Inventou o Perceptron em 1957, um 
dispositivo eletrônico construído de acordo com princípios 
biológicos e que mostrava capacidade de aprendizado. 
Desenvolveu e estendeu a ideia do perceptron em diversos 
artigos e no seu livro "Princípios de Neurodinâmica". 
 
Conforme a divisão das linhas de pesquisa, também podemos dividir o 
histórico da IA em diferentes eventos. De forma geral, nos dias de hoje as 
aplicações em mecatrônica e robótica não utilizam apenas elementos derivados 
de uma teoria ou outra, mas abordagens híbridas, buscando explorar o que de 
melhor cada técnica ou algoritmo pode oferecer, de acordo com os problemas 
em questão. 
Para saber mais... 
O link com o documento sobre a chamada do 
projeto de pesquisa de verão em Inteligência 
Artificial, de autoria de John McCarthy, Marvin 
Minsky, Nataniel Rochester e Claude 
Shannon está disponível em: <http://www-
formal.stanford.edu/jmc/history/dartmouth/dar
tmouth.html>, ou por meio do QRCode 
ao lado. 
 
 
Na Figura 2 temos uma linha do tempo demonstrando alguns dos eventos 
que aconteceram no desenvolvimento da linha conexionista. Basicamente, os 
neurônios foram descobertos no início do século XX pelo neurofisiologista 
espanhol Santiago Ramon y Cajal (1852-1934). Em 1943 nasce a área de redes 
neurais com a primeira modelagem de McCulloch e Pitts de um neurônio artificial. 
 
13 
 
As redes neurais se disseminam a partir da pesquisa de Frank Rosenblatt, com 
a criação do seu perceptron, um classificador binário baseado em entradas 
provenientes de sensores e que podia decidir se tais entradas pertenciam a uma 
classe específica. 
 
Figura 2: Linha do tempo com alguns eventos relativos à linha conexionista da Inteligência 
Artificial 
 
 
 
 
14 
 
Para saber mais... 
Frank Rosenblatt fez uma série de 
contribuições com os estudos sobre o 
perceptron. Acesse em: 
<http://csis.pace.edu/~ctappert/srd2011/rosenb
latt-contributions.htm>, ou por meio do 
QRCode ao lado. 
 
Figura 3: Linha do tempo com alguns eventos relativos à linha simbólica da Inteligência Artificial 
 
 
 De forma geral, durante o desenvolvimento da IA, o otimismo quanto à 
decifração dos mecanismos da inteligência humana induziu muitas promessas 
 
15 
 
e, na sequência, decepções. Isso se deu tanto pelo um desconhecimento dos 
princípios que fundamentam a inteligência quanto pelos limites práticos relativos 
à capacidade de processamento dos computadores que estavam disponíveis à 
época das pesquisas (RUSSELL; NORVIG, 2004). 
Os pesquisadores da área de Inteligência Artificial eram bastante ousados 
quanto às previsões do sucesso das pesquisas. Em 1957, Herbert Simon previa 
que em dez anos um jogo de xadrez seria campeão mundial e um teorema 
matemático relevante seria provado por um computador. Ainda que não tenham 
levado dez, tais previsões se realizaram em quarenta anos. 
Na Figura 3, temos descrita uma linha do tempo com alguns eventos 
relacionados à linha simbólica. 
A história da IA simbólica é dividida em três períodos: clássica, 
romântica e moderna. A era clássica (1956-1970) tinha como objetivo a 
simulação da inteligência humana, utilizando solucionadores gerais de 
problemas e sistemas baseados em lógica proposicional e de primeira ordem. O 
principal motivo do fracasso foi a subestimação da complexidade computacional 
dos problemas. 
Na era romântica (1970-1980), o objetivo já era o de simular a inteligência 
humana em situações predeterminadas, utilizando formalismos de 
representação do conhecimento adaptados ao problema, e não mais gerais 
como proposto na era anterior. Mesmo assim, o motivo do fracasso foi a 
subestimação da quantidade de conhecimento necessária para resolver mesmo 
o problema mais banal do cotidiano. Entretanto, surgiram vários conceitos que 
impulsionaram algumas áreas da ciência da computação como a orientação a 
objeto, os ambientes de desenvolvimento e software e o processamento de 
tempo compartilhado. 
Na era moderna (1980 até este momento), o objetivo foi o de simular o 
comportamento de um especialista humano ao resolver problemas em domínios 
bem específicos. Como metodologias, utilizavam-se sistemas de regras de 
produção, modelos de representação de conhecimento com incerteza e também 
algumas abordagens conexionistas. Ainda assim, o motivo do fracasso 
continuou sendo o das subestimações do problema de aquisição de 
 
 
16 
 
conhecimento. Porém outras áreas da computação foram beneficiadas com as 
pesquisas, tais como a engenharia de software e bancos de dados. 
A linha evolucionária se caracteriza pelo uso da teoria da evolução natural 
e seus conceitos em simulações de computador e algoritmos para resolução de 
problemas. Os modelos mais conhecidos são relativos à área de algoritmos 
genéticos, programação genética, autômatos celulares e vida artificial. 
Algoritmos genéticos são aplicados em problemas de otimização, na busca de 
soluções ótimas em problemas intratáveis. Hoje se utiliza os conceitos de 
algoritmos genéticos e programação evolucionária em arquitetura de circuitos 
eletrônicos, programação de jogos, previsão do tempo, descoberta de 
identidades matemáticas e modelagem de sistemas planetários extrassolares. 
Na Figura 4, temos descrita uma linha do tempo com alguns eventos 
relacionados à linha evolucionária da Inteligência Artificial. 
Figura 4: Linha do tempo com alguns eventos relativos à linha evolucionária da Inteligência 
Artificial 
 
 
17 
 
 
SÍNTESE 
Nesta primeira aula iniciamos com a introdução ao estudo da Inteligência 
Artificial, sua importância como área de pesquisa em franca expansão reunindo 
conhecimentos de diversas áreas e pesquisadores. Aprendemos sobre as 
diferentes definições de Inteligência Artificial conforme os quatro quadrantes 
originados dos critérios dos processos de raciocínio e processos de 
comportamento. Foramabordadas também as linhas de pesquisa 
da IA: simbólica, conexionista e evolucionária, as quais demonstram diferentes 
perspectivas na construção de sistemas inteligentes de acordo, 
respectivamente, com a mente, o cérebro ou a teoria da evolução de Darwin. Um 
breve histórico da Inteligência Artificial foi apresentado, enfatizando alguns dos 
principais pesquisadores, tais como Marvin Minsky, John McCarthy, Nathaniel 
Rochester, Claude Shannon, Frank Rosenblatt. Para cada linha de pesquisa em 
detalhe foram evidenciados alguns dos principais eventos e pesquisadores. A 
partir deste preâmbulo, estamos aptos a começar o estudo dos diferentes 
conteúdos e técnicas de Inteligência Artificial, a começar pelo próximo capítulo, 
abordando os agentes inteligentes. 
 
 
REFERÊNCIAS 
BITTENCOURT, G. Inteligência Artificial – Ferramentas e Teorias. 
Florianópolis: Ed. da UFSC, 1998. 
CORCHO, O.; FERNÁNDEZ-LÓPEZ, M.; GÓMEZ-PÉREZ, A. Ontologías. In: 
Inteligencia Artificial. McGraw-Hill. 2008. 
HAYKIN, S. Redes Neurais: Princípios e prática. Porto Alegre, Bookman, 2001. 
KOZA, J. Genetic Programming. Boston-MA: MIT Press, 1992. 
 
 
18 
 
LINDEN, R. Algoritmos Genéticos. Rio de Janeiro: Ciência Moderna, 2012. 
MEADOWS, M. S. Nós, Robôs: Como a ficção científica se torna realidade. São 
Paulo: Cultrix, 2011. 
MEDEIROS, L. F. Redes Neurais em Delphi. 2. ed. Florianópolis: Visualbooks, 
2007. 
______; RAUTENBERG, S.; BASTOS, R. C.; TODESCO, J. L. A Strategy for 
Minimizing the Processing Time of the AINET Algorithm in the Construction of 
Radial Basis Function Networks. In: DAGLI, C. H.; ENKE, D. L.; 
BRYDEN, K. L.; CEYLAN, H.; GEN, M. (Org.). Intelligent Engineering Systems 
through Artificial Neural Networks: Computational Intelligence in Architecting 
Engineering System. New York: ASME, 2008, v. 18, p. 479-484. 
PALAZZO, L. A. M. Introdução a Prolog. Pelotas: Editora UCPel, 1997. 
RUSSEL, S.; NORVIG, P. Inteligência Artificial. tradução da 2. edição. Rio de 
Janeiro: Campus, 2004. 
 
 
 
 
 
 
 
 
 
 
 
INTELIGÊNCIA ARTIFICIAL 
APLICADA 
AULA 2 
 
 
 
 
 
 
 
 
 
 
 
 
Prof. Luciano Frontino de Medeiros 
 
 
 
2 
CONVERSA INICIAL 
Nesta aula você estudará os agentes inteligentes. Estes conceitos iniciais 
dão subsídios para se entender as diferentes abordagens das linhas de pesquisa 
e o detalhamento de algumas implementações. 
 
TEMA 1: AGENTES INTELIGENTES 
Na perspectiva da definição de IA do agir racionalmente, podemos definir 
um agente como sendo um artefato equipado com sensores com capacidade 
de perceber o ambiente e com capacidade de ação sobre o ambiente por meio 
de atuadores (RUSSELL; NORVIG, 2004, p. 33). Se compararmos com um ser 
humano, os sensores podem ser os olhos, ouvidos, nariz e aqueles que 
permitem o tato. Quanto aos atuadores, podemos relacionar as mãos, pernas e 
a boca, bem como outras partes. 
Hoje em dia os robôs são construídos tendo sensores, tais como câmeras, 
dispositivos de infravermelho, de som e ultrassom, de gás, de temperatura e de 
umidade, dentre outros. Como atuadores, podemos relacionar os servomotores, 
motores de passo, pistões hidráulicos e relês. Mas um agente precisa também 
processar os sinais provenientes dos sensores para efetuar alguma ação que 
seja caracterizada como inteligente sobre o seu ambiente. 
A interação do agente inteligente com o ambiente pode ser visualizada na 
Figura 1. Podemos definir, portanto, como percepções os sinais que são 
captados do ambiente pelos sensores do agente, que são processados em 
algum mecanismo de raciocínio, para depois transformarem-se em ações sobre 
o ambiente por meio dos atuadores. Contudo um agente não deve considerar 
apenas o que está sendo percebido no momento, mas também considerar a 
memória do que já foi percebido por ele, o que podemos definir como uma 
sequência de percepções. Dessa forma, uma ação a ser escolhida e executada 
irá depender da sequência completa de percepções que um agente observou até 
o momento presente. Em matemática, diz-se que o comportamento de um 
 
 
3 
agente é definido pela função do agente. A função do agente tem o objetivo de 
mapear as possíveis ações com as sequências de percepções disponíveis no 
armazenamento do agente (RUSSELL; NORVIG, 2004, p. 34). 
 
Figura 1: Um agente inteligente e sua interação com o ambiente 
 
 
Uma das dificuldades de construção de agentes inteligentes está em quão 
completa pode ser a descrição do comportamento de um agente. Agentes que 
desenvolvem tarefas simples, como um robô aspirador, têm uma função de 
agente bem delimitada de forma a produzir um comportamento que pode ser 
aplicado a uma gama bem definida de ambientes sobre os quais pode fazer a 
limpeza. Por outro lado, um robô destinado a jogar xadrez representa um desafio, 
pois a quantidade de jogadas possíveis chega a valores astronômicos 
(aproximadamente 10120 possibilidades – o número estimado de átomos no 
Universo chega a 1080). Dessa forma, um agente inteligente para o jogo de 
xadrez deve ter a sua função de agente limitada, de forma que não leve milhões 
de anos para fazer uma jogada, e que tenha memória suficiente para armazenar 
jogadas possíveis considerando um horizonte de poucas jogadas à frente. 
Uma função de agente pode ser implementada por meio de uma tabela 
de possíveis ações relacionadas a uma sequência de percepções. Esta tabela é 
 
 
4 
pensada como uma caracterização externa do agente. Já dentro dos limites do 
agente, a sua função é implementada por meio de um programa de agente. 
Dessa forma, entende-se a função do agente como uma descrição matemática 
abstrata, enquanto que um programa de agente é uma implementação 
concreta, ligada à forma que o agente é construído, ou seja, à sua arquitetura 
(RUSSELL; NORVIG, 2004, p. 34). 
Utilizando um exemplo bastante simples, na Figura 2 temos um robô 
aspirador e a representação do seu mundo. Esta abstração considera que o robô 
está em um quadrado central que se refere ao estado inicial. Nos quadrados 
restantes pode haver ou não sujeira. A partir daí uma sequência de ações deve 
ser pensada de forma que o robô cumpra o seu objetivo de limpar o ambiente. 
Note a identificação de cada quadrado como sendo um elemento de uma matriz. 
Figura 2: Representação do ambiente de um robô aspirador, alguns quadrados contendo sujeira 
ou não 
 
 
Quadro 1: Mapeamento de ações para as sequências de percepções do robô aspirador. 
Ord Sequência de Percepções Ação 
1 [(2,2),Limpo] Mova-se em frente 
2 [(3,2),Limpo] Mova-se à direita 
 
 
5 
3 [(3,1), Sujo] Aspire a sujeira 
4 [(3,1), Limpo] Mova-se à direita 
5 [(2,1), Limpo] Mova-se em frente 
6 [(1,1),Sujo] Aspire a sujeira 
7 [(1,1),Limpo] Mova-se à direita 
8 [(1,2),Sujo] Aspire a sujeira 
9 [(1,2),Limpo] Mova-se em frente 
10 [(1,3),Limpo] Mova-se à direita 
11 [(2,3),Sujo] Aspire a sujeira 
12 [(2,3),Limpo] Mova-se em frente 
13 [(3,3),Sujo] Aspire a sujeira 
14 [(3,3),Limpo] Mova-se à direita 
15 [(3,2),Limpo] Mova-se à direita 
16 [(2,2),Limpo] Pare 
 
Figura 3: Representação do ambiente de um robô aspirador com as ações mapeadas de acordo 
com as sequências de percepções 
 
 
 
6 
É possível, com este exemplo de mundo do robô aspirador de pó, imaginar 
uma série de variações. Para a construção da tabela (a função do agente), foram 
escolhidas apenas quatro ações possíveis: mover-se para frente, mover-se à 
direita, aspirar o pó e parar. Pode-se conceber outra sequência que contemple 
mover-se à esquerda, ou mover-se aleatoriamente, etc. 
Há uma maneiracorreta de se executar a tarefa? O que faz um agente ser bom 
ou não, que possa ser considerado “inteligente”? Para isso, precisamos 
conceituar o agente racional: o agente que, a partir das suas ações, obterá o 
maior sucesso. Assim, é necessário algum método para quantificar o sucesso de 
um agente. 
Por meio de medidas de desempenho, pode-se verificar se um agente 
teve sucesso na execução da sua tarefa. Como visto na Figura 3 e no Quadro 1, 
a sequência de ações fez com que o robô aspirador passasse por uma sequência 
de estados. Se esta sequência é a desejável, então pode ser dito que o robô 
funcionou bem. A medida de desempenho precisa ser uma medida objetiva, 
que seja planejada pelo projetista na construção do robô (RUSSELL; NORVIG, 
2004, p.36). Nem sempre a definição de uma medida de desempenho é uma 
tarefa fácil. Por exemplo, uma medida para o robô aspirador poderia ser o 
número de ações ou o tempo consumido para executar a tarefa ou a qualidade 
de limpeza em relação ao tempo consumido. 
Com isso, podemos, agora, definir um agente racional da seguinte forma: 
“Para cada sequência de percepções possível, um agente racional deve 
selecionar uma ação que se espera venha a maximizar sua medida de 
desempenho, dada a evidência fornecida pela sequência de percepções e por 
qualquer conhecimento interno do agente” (RUSSELL; NORVIG, 2004, p. 36). 
Assim, a racionalidade em qualquer instante depende de quatro fatores 
(RUSSELL; NORVIG, 2004, p. 36): 
 A medida de desempenho como critério para obtenção do 
sucesso da tarefa; 
 O conhecimento prévio do agente com relação ao ambiente; 
 
 
7 
 As ações que o agente pode executar; 
 A sequência de percepções que o agente tem até o momento. 
Analisando-se o exemplo do robô aspirador, uma medida de desempenho 
pode ser feita a partir de uma pontuação para cada quadrado limpo em um 
período definido de tempo (por exemplo, 9 quadrados limpos a cada minuto). 
O ambiente do robô é previamente conhecido, ainda que a sujeira possa variar 
de quadro a quadro. As ações que o robô pode executar são: mover-se à frente, 
mover-se à direita, aspirar e parar. Na sequência de percepções, o robô percebe 
o quadrado no qual se encontra (a partir de um leitor de posição ou acelerômetro, 
por exemplo) e se neste há sujeira ou não (utilizando uma câmera). Assim, 
podemos definir o robô aspirador como um agente racional. 
A racionalidade em um agente significa que ele buscará maximizar o 
desempenho esperado, não o desempenho real. Mas não quer dizer que ele 
realizará de fato a melhor ação quando esperado. As situações no ambiente 
podem mudar e outras variáveis que não sejam consideradas poderão 
interferir, modificando o comportamento. A racionalidade é uma medida de quão 
inteligente o agente poderá ser, mas não quer dizer que seu comportamento será 
robusto o bastante para abarcar todas as possibilidades, quando exigido o seu 
desempenho real. 
Em outras situações, é necessário que o agente não reaja apenas às 
informações que são coletadas, mas também possa aprender a partir das suas 
percepções. O agente pode iniciar a sua tarefa tendo algum conhecimento prévio 
e, à medida que vai interagindo com o ambiente, vai adquirindo mais experiência. 
Nas situações em que o ambiente é completamente conhecido, o agente pode 
apenas agir de acordo com a sua função de agente. Em ambientes que mudam 
ao longo do tempo, é necessário projetar o agente de forma que esse possa 
guardar novas regras que venham surgir. 
Aliado a isso, temos o conceito de autonomia. A autonomia significa o 
quanto o agente depende de um conhecimento prévio ou deve aprender ao longo 
da sua tarefa para compensar premissas incorretas que foram planejadas. 
 
 
8 
Um agente que aprende novas regras do ambiente demonstra a sua autonomia. 
Por exemplo, o robô aspirador, que prevê a probabilidade de aparecer mais 
sujeira trabalhará melhor do que aquele que tenha as regras de atuação 
predefinidas (RUSSELL; NORVIG, 2004, p. 38). 
TEMA 2: NATUREZA DOS AMBIENTES 
A caracterização do ambiente no qual o agente irá atuar determinará o 
sucesso da sua execução. Quando o robô aspirador foi caracterizado como um 
agente racional, foi preciso especificar a medida de desempenho, o ambiente 
onde seria feita a limpeza e os sensores e atuadores do robô. Na modelagem de 
um agente racional, precisamos definir de maneira tão completa e precisa 
possível o ambiente de tarefa (RUSSELL; NORVIG, 2004, p. 39). O ambiente 
de tarefa pode ser definido por meio do PEAS (Performance, Environment, 
Actuators and Sensors – Desempenho, Ambiente, Atuadores e Sensores). 
No Quadro 2 estão descritos alguns exemplos de tipos de agentes e as 
descrições do PEAS. 
Quadro 2: Exemplos de agentes racionais e as descrições do PEAS 
Tipo de Agente 
Medida de 
desempenho 
Ambiente Atuadores Sensores 
Sistema de 
diagnóstico 
médico 
Paciente 
saudável, 
minimizar custos 
Quarto de 
hospital, 
paciente, 
equipe 
Mostrar 
perguntas, 
testes, 
diagnósticos, 
tratamentos 
Entrada por 
teclado, voz, 
descoberta de 
informação 
Sistema de 
xadrez 
Calcular a 
jogada ótima, 
ganhar a partida 
Tabuleiro 8x8, 
peças de 
xadrez, 
posições 
iniciais, jogadas 
possíveis 
Braço articulado 
para mover as 
peças 
Câmera para 
ver as posições 
das peças 
Tutor 
inteligente 
Maximizar as 
notas dos alunos 
nos testes 
Área de 
interação do 
software, chat 
de mensagens 
Mostrar 
conteúdos, 
exibir exercícios 
Entrada pelo 
teclado 
Robô de solda Efetuar os 
pontos de solda 
no tempo 
Linha de 
montagem. 
Braço articulado 
para 
movimentos no 
Identificação de 
novo objeto a 
ser soldado, 
 
 
9 
previsto, 
qualidade da 
solda 
espaço, ponteira 
de solda 
quantidade de 
solda, 
temperatura de 
solda 
Fonte: adaptado de Russell e Norvig (2004, p. 40). 
 
TEMA 3: PROPRIEDADES DOS AMBIENTES DE TAREFAS 
Em IA, a variedade de ambientes para atender a diferentes tipos de 
problemas é muito grande. Por isso, é interessante classificar os ambientes de 
tarefas conforme categorias que influenciam na definição dos parâmetros dos 
projetos. No Quadro 3, temos em detalhes a descrição de como os agentes 
podem ser classificados de acordo com diversos critérios. No Quadro 4, estão 
descritos alguns exemplos relativos a essas propriedades, que ilustram como 
diferentes agentes inteligentes podem ser caracterizados. 
Quadro 3: Descrição das propriedades dos ambientes de tarefa 
Critérios Descrição Exemplo 
Completamente 
observável x 
parcialmente 
observável 
Se os sensores do agente acessam de 
forma completa os estados do ambiente 
em cada instante, o ambiente é 
completamente observável. Se houver 
ruído, sensoriamento impreciso ou 
lacunas nos estados, é parcialmente 
observável. 
Um jogo de xadrez á 
completamente observável. 
Um sistema de busca na 
internet é parcialmente 
observável. 
Determinístico x 
Estocástico 
Se o próximo estado é completamente 
determinado pelo estado atual e pela 
ação executada pelo agente, o ambiente 
é dito determinístico, senão, é 
estocástico. Se o sistema é 
determinístico mas apresenta elementos 
estocásticos, o ambiente é dito 
estratégico. 
O exemplo do robô aspirador 
de pó é determinístico. Um 
carro com direção autônoma 
é estocástico. 
Episódico x 
Sequencial 
Num ambiente de tarefa episódico, o 
agente experimenta os eventos de 
maneira atômica, com os episódios 
Um jogo de xadrez é 
sequencial. Um robô10 
começando com a percepção do agente 
e na execução de uma única ação. Num 
ambiente sequencial, há a dependência 
dos estados atuais com os estados 
anteriores. 
aspirador de movimento 
aleatório é episódico. 
Estático x 
Dinâmico 
Caso o ambiente se altere enquanto o 
agente está executando a tarefa, ele é 
dinâmico. Se o ambiente não se modifica 
ao longo da execução, é estático (Há 
situações em que os ambientes podem 
ser caracterizados como 
semidinâmicos) 
Um jogo de xadrez é estático. 
Um carro com direção 
autônoma é dinâmico (ou 
semidinâmico, considerando 
as rotas predefinidas). 
Discreto x 
Contínuo 
Refere-se ao modo como o tempo é 
considerado, e também ao estado do 
ambiente e das percepções e ações. 
Uma sequência de estados discretos 
muda de forma brusca de um estado 
para outro. Uma sequência de estados 
contínua muda de forma suave. 
Um jogo de xadrez é 
considerado discreto. Um 
sistema de refrigeração de 
temperatura pode ser 
contínuo. 
Individual x 
Multiagente 
Se no ambiente existe apenas um 
agente atuando para resolver o 
problema, ou se o sistema considerado 
é multiagente. 
Um jogo de xadrez pode ser 
um agente individual (Se um 
agente joga contra outro, é 
multiagente). Um sistema de 
busca na internet pode ser 
multiagente por utilizar vários 
bots que encontram e 
organizam a informação. 
Fonte: adaptado de Russell e Norvig (2004, p. 41-42). 
Quadro 4: Alguns exemplos com ambientes de tarefa e as propriedades 
Ambientes Observável Determinístico Episódico Estático Discreto Agentes 
Palavras 
Cruzadas 
Completamente Determinístico Sequencial Estático Discreto Individual 
 
 
 
11 
Jogo de 
Xadrez 
Completamente Estratégico Sequencial Semi Discreto Multi 
Jogo de 
pôquer 
Parcialmente Estratégico Sequencial Estático Discreto Multi 
Carro 
autônomo 
Parcialmente Estocástico Sequencial Dinâmico Contínuo Multi 
Diagnóstico 
médico 
Parcialmente Estocástico Sequencial Dinâmico Contínuo Individual 
Analista de 
imagens 
Completamente Determinístico Episódico Semi Contínuo Individual 
Robô 
seletor de 
peças 
Parcialmente Estocástico Episódico Dinâmico Contínuo Individual 
Controlador 
de 
manufatura 
química 
Parcialmente Estocástico Sequencial Dinâmico Contínuo Individual 
Sistema 
Tutorial 
Inteligente 
Parcialmente Estocástico Sequencial Dinâmico Discreto Multi 
Fonte: Russell e Norvig (2004, p. 44). 
 
TEMA 4: ESTRUTURAS DE AGENTES 
O estudo da natureza do ambiente de tarefa e as suas propriedades 
envolveu apenas as questões de comportamento, ou seja, as ações que são 
executadas para uma sequência de percepções determinada. A partir de agora, 
é necessário estudar o funcionamento interno dos agentes. O programa do 
agente faz parte do trabalho envolvendo IA, que implementa a função do agente 
por meio do mapeamento das percepções com as ações. Assim, o agente 
funciona por meio de uma arquitetura que implementa os sensores e atuadores 
com algum processador que executa o programa do agente (RUSSELL; 
NORVIG, 2004, p. 44). 
 
 
12 
Os agentes podem ser classificados em quatro tipos (RUSSELLL; NORVIG, 
2004, p. 48): 
 Agentes reativos simples; 
 Agentes reativos baseados em modelo; 
 Agentes baseados em objetivos; 
 Agentes baseados na utilidade. 
Agentes reativos simples 
Os agentes reativos simples selecionam as ações a serem executadas 
com base na percepção atual, desconsiderando o histórico de percepções. 
No exemplo do robô aspirador de pó, o agente se baseia na sua posição atual 
após o movimento e verifica se existe ou não sujeira. 
Agentes reativos podem ser implementados utilizando as regras de produção 
ou regras se-então (BITTENCOURT, 1998, p. 252). Uma regra faz o teste de 
uma condição envolvendo as variáveis alimentadas pelos sensores e executa 
uma ação específica quando esta condição é verdadeira. 
SE <condição> ENTÃO <ação> 
Por exemplo, o robô aspirador mostrado anteriormente pode possuir 4 
(quatro) regras quanto à execução da limpeza e da movimentação: 
1. SE estado = Sujo ENTÃO Aspirar 
2. SE estado = Limpo ENTÃO faça movimento = SIM SENÃO faça 
movimento = NÃO 
3. SE faça movimento = SIM E quadrado na frente = SIM ENTÃO 
direção do movimento = FRENTE 
4. SE faça movimento = SIM E quadrado na frente = NÃO ENTÃO 
direção do movimento = DIREITA 
 
 
13 
Neste sistema de quatro regras, a regra 1 se encarrega da limpeza do 
quadrado por meio da variável estado. No caso de o quadrado estar limpo, então 
a variável faça movimento recebe o valor SIM, o que é feito pela regra 2. Com 
isso, as regras 3 e 4 ficam habilitadas para operarem. É testada então a variável 
quadrado na frente (ou seja, armazena o valor do sensor que identifica o 
quadrado). Se houver um quadrado à frente, então a variável de ação direção do 
movimento recebe o valor FRENTE. Caso não houver (ou seja, o 
quadrado estará à direita), então a variável direção de movimento recebe o valor 
DIREITA. 
É claro que essas regras são simples e presumem outras situações. Uma 
destas pode ser quando o robô não encontra um quadrado à frente e assim ele 
vai primeiro para a direita, para depois ficar na mesma direção do movimento. 
Porém, servem para demonstrar de forma clara o agente reativo simples. O 
programa do agente fica explícito na forma de regras que são executadas 
durante a movimentação do robô. Entretanto, o robô deve ficar em constante 
movimentação para fazer a limpeza, continuando a executar os movimentos 
mesmo quando não existir sujeira. Se o robô puder manter um estado interno 
relativo a todas as posições (ou seja, puder fazer uma varredura antes do 
movimento), ele pode se movimentar de forma mais eficiente para executar a 
tarefa de limpeza. 
Figura 4: Esquema de um agente reativo simples 
 
Fonte: adaptado de Russell e Norvig (2004, p. 47). 
 
 
14 
Agentes reativos baseados em modelos 
Em um ambiente caracterizado por ser observável parcialmente, se o 
agente puder manter internamente estados internos que sejam dependentes da 
sequência de percepções, ele pode lidar de forma mais efetiva na resolução do 
problema. Nesse caso, o agente trabalha com um estado interno que é 
dependente das informações sobre como o mundo (ambiente) evolui. Voltando 
ao robô aspirador, se ele tiver uma forma de armazenar o histórico das 
percepções dos quadrados que ficam mais sujos que outros, então o programa 
pode ser melhorado no sentido de o robô se movimentar mais pelos quadrados 
nos quais é mais provável de aparecer sujeira. Outra situação é fazer com que 
o robô consiga se atualizar, em um único momento, com relação à informação 
de todos os quadrados. 
Um agente que tem o conhecimento de “como o mundo funciona”, possui 
o que se denomina de modelo do mundo. Assim, o agente que utiliza este 
modelo é chamado de agente reativo baseado em modelo. 
 
Figura 5: Esquema de um agente reativo baseado em modelo 
 
Fonte: adaptado de Russell e Norvig (2004, p. 49). 
 
 
15 
Agentes baseados em objetivos 
Ter o conhecimento do estado atual do ambiente não é condição 
suficiente para que se decida o que fazer. Além de o agente saber uma descrição 
do estado atual, é necessário ainda alguma informação quanto aos objetivos 
que se relacionam a situações ou cenários desejáveis. Uma tomada de decisão 
baseada em objetivos é diferente da utilização de regras se-então, por envolver 
uma consideração sobre o futuro. O agente então se pergunta: “o que vai 
acontecer se eu fizer esta ação ou aquela outra?” ou “isso irá me fazerfeliz?”. 
Tais informações nos agentes reativos não são representadas de maneira 
explícita, devido ao mapeamento direto das percepções para as ações. Ainda 
que o agente baseado em objetivos possa parecer menos eficiente, ele tende a 
ser mais flexível. O conhecimento que dá o suporte às suas decisões é 
representado explicitamente, podendo ser atualizado ou modificado 
(RUSSELLL; NORVIG, 2004, p. 49). 
Aprimorando o exemplo um pouco mais, o robô aspirador pode ter um 
objetivo de executar a sua tarefa, porém levando em consideração o custo de 
operação ou consumo de energia. Com a execução ao longo do tempo, o robô 
pode calcular a frequência com que as limpezas são feitas, e nos intervalos ele 
pode entrar em modo de economia de energia para alcançar este objetivo. 
Os objetivos permitem que se distingam entre estados “felizes e “infelizes” 
de forma binária. Quando um agente precisa lidar com mais de um objetivo, 
diferentes objetivos podem entrar em contradição ou nenhum deles pode ser 
alcançado com certeza, então é necessário especificar o programa com uma 
função que possa lidar com situações de forma mais adequada ou útil 
(RUSSELLL; NORVIG, 2004, p. 50). 
 
 
 
 
 
 
16 
Figura 6: Esquema de um agente baseado em objetivo 
 
Fonte: adaptado de Russell e Norvig (2004, p. 50). 
 
Agentes baseados em utilidade 
Uma função de utilidade permite quantificar o mapeamento de um estado 
ou uma sequência de estados em um número que descreve o grau de “felicidade” 
alcançado. Dessa forma, uma especificação de uma função de utilidade permite 
a tomada de decisões racionais em dois casos em que os objetivos são 
inadequados (RUSSELL; NORVIG, 2004, p. 50): 
 Quando são contraditórios e apenas alguns deles podem ser 
alcançados; 
 Quando há vários objetivos e nenhum deles pode ser alcançado 
com certeza. 
No primeiro caso, uma função de utilidade pode especificar o grau de 
compromisso mais apropriado. No segundo caso, uma função de utilidade pode 
 
 
17 
fornecer um número que expresse um grau de probabilidade de sucesso que 
possa ponderar a importância dos objetivos. 
TEMA 5: AGENTES COM APRENDIZAGEM 
Até agora, temos visto a estrutura de diferentes agentes, alguns cujos 
programas respondem diretamente às percepções, e outros com estados 
internos que permitem a representação de algum conhecimento da evolução do 
ambiente, tornando os agentes mais flexíveis às variações externas. 
Estes agentes são criados com conhecimento prévio. Porém, é possível imaginar 
uma situação na qual o agente possa atuar em um ambiente 
que seja desconhecido inicialmente e ao longo do tempo ele possa 
adquirir conhecimento? 
O agente com aprendizagem permite ir além do conhecimento prévio na 
construção do agente, dotando-o de mecanismos para que possa aprender na 
experiência com o ambiente, tornando-se mais competente ao longo da sua 
operação. Um agente de aprendizado pode ser dividido em quatro elementos 
conceituais (RUSSELLL; NORVIG, 2004, p. 51-52): 
 Elemento de desempenho: é a parte considerada até agora sobre 
agentes, que recebe as percepções e decide qual ação executar. 
 Crítico: elemento do agente que informa como o agente está se 
comportando em relação ao seu padrão constante de desempenho. 
 Elemento de aprendizado: utiliza a informação proveniente do 
crítico para modificar o elemento de desempenho em direção a um melhor 
funcionamento no futuro. 
 Gerador de problemas: elemento responsável para sugestão de 
novas regras e ações que podem levar a novas experiências. 
 
 
 
 
18 
Figura 7: Esquema de um agente com aprendizagem 
 
Fonte: adaptado de Russell e Norvig (2004, p. 52). 
 
Por exemplo, um carro autônomo pode dirigir numa estrada de acordo 
com o elemento de desempenho embutido em sua programação, numa 
velocidade definida e em uma faixa à esquerda. O crítico recebe informações do 
mundo e vai repassando-as ao elemento de aprendizado. Caso algum carro que 
está posicionado logo atrás esteja buzinando, o elemento de aprendizado pode 
formular uma regra definindo que este cenário de direção em uma faixa central 
ou à esquerda seja uma situação ruim, e assim o elemento de desempenho é 
modificado para fazer com que o carro autônomo siga na 
faixa da direita. 
 
SÍNTESE 
O conceito de agente inteligente é um dos mais importantes, pois é por 
meio dele que iremos executar alguma tarefa que necessite de um processo de 
 
 
19 
pensamento ou de ação inteligente. Vimos também que um agente possui 
sensores para monitorar o ambiente e atuadores para agir sobre ele. Assim, um 
agente trabalha com percepções e ações. O comportamento do agente é 
definido pela função do agente, a qual mapeia as possíveis ações com as 
sequências de percepções à disposição no armazenamento de memória do 
agente. A função do agente é entendida como o mapeamento abstrato, enquanto 
que o programa do agente é uma implementação concreta deste mapeamento. 
Foi estudado também que a racionalidade do agente depende da medida de 
desempenho, do conhecimento prévio que este possui, da sequência de 
percepções e das ações que o agente está apto a executar. Vimos também que 
os ambientes possuem diferentes naturezas e propriedades que os definem. De 
acordo com a estrutura, os agentes podem ser classificados em reativos simples, 
reativos baseados em modelo, baseados em objetivos e baseados na utilidade. 
Os agentes com aprendizagem podem ampliar o seu conhecimento prévio de 
forma que ele tenha capacidade de aprender conforme executa a sua operação. 
 
REFERÊNCIAS 
RUSSELL, S.; NORVIG, P. Inteligência Artificial – tradução da 2. ed. Rio de 
Janeiro: Campus, 2004. 
MEDEIROS, L. F. Redes Neurais em Delphi. 2. ed. Florianópolis: Visualbooks, 
2007. 
LINDEN, R. Algoritmos Genéticos. Rio de Janeiro: Ciência Moderna, 2012. 
BITTENCOURT, G. Inteligência Artificial – Ferramentas e Teorias. 
Florianópolis: Ed. da UFSC, 1998. 
PALAZZO, L. A. M. Introdução a Prolog. Pelotas: Editora UCPel, 1997. 
MEADOWS, M. S. Nós, Robôs: Como a ficção científica se torna realidade. São 
Paulo: Cultrix, 2011. 
 
1 
 
 
 
 
 
 
 
INTELIGÊNCIA ARTIFICIAL 
APLICADA 
AULA 3 
 
 
 
 
 
 
 
 
 
Prof. Luciano Frontino de Medeiros
 
2 
 
CONVERSA INICIAL 
Nesta aula você estudará sobre os elementos relacionados à resolução de 
problemas de busca, à formulação de problemas e exemplos, bem como às 
estratégias de busca categorizadas em dois tipos: a busca sem informação e a 
busca com informação, finalizando com a escolha de funções heurísticas. 
 
CONTEXTUALIZANDO 
Resolver problemas é uma das atividades mais nobres desenvolvidas pelo 
intelecto humano (e mesmo outros seres vivos). Um dos tipos de agentes 
inteligentes mais utilizados se refere aos que estão relacionados à resolução de 
problemas. Encontramos tais problemas em diversas situações do dia a dia: 
programar uma linha de produção em uma fábrica, encontrar a rota mais curta entre 
um conjunto de cidades, programação de robôs que precisam operar buscando 
mínimo custo, etc. Várias são as situações nas quais o agente precisa aplicar a 
racionalidade para encontrar uma solução. Os problemas variam conforme o 
número de elementos envolvidos e as regras que estes propõem. Portanto, o 
conhecimento dos processos de resolução de buscas é um dos tópicos mais 
importantes, estudados desde o início da Inteligência Artificial, os quais serão 
abordados a partir de agora. 
 
TEMA 1: RESOLUÇÃO DE PROBLEMAS POR BUSCA 
Os agentes inteligentes mais simples, os reativos, conferem as suas ações 
ao mapeamentodireto dos estados. Em ambientes nos quais tal mapeamento é 
grande demais, tanto em termos de memória quanto de tempo de processamento, 
os agentes não são eficientes. Nestes casos, os agentes que são baseados em 
objetivos saem-se melhor por considerarem os possíveis cenários e o quanto os 
resultados são bons ou não. 
 
3 
 
Os agentes de resolução de problemas tomam decisões sobre os próximos 
passos, encontrando as sequências de ações que resultam estados desejáveis 
(RUSSELL; NORVIG, 2004, p. 62). Por exemplo, um dos problemas presentes em 
várias situações é o de roteirização. Este problema está presente na área de 
logística e turismo, dentre outras. Quando se tem um conjunto de locais que 
precisam ser visitados, considerando a existência de rotas definidas para estes 
locais, um dos problemas típicos é como percorrer todos os locais considerando 
um custo mínimo ótimo. Este problema foi descrito inicialmente na IA como o 
problema do viajante. 
Se considerarmos um mapa rodoviário, tal como o da Figura 1, se o objetivo 
é sair da cidade de Foz do Iguaçu em direção até a cidade de Curitiba, o agente 
deve escolher aquelas rotas ou cursos de ação que permitem chegar ao destino, e 
aqueles que não permitem chegar em um tempo aceitável podem ser rejeitados, 
simplificando assim a tarefa do agente. Dessa forma, a formulação de objetivos se 
baseia na situação atual do agente e na sua medida de desempenho, configurando 
o primeiro passo para a resolução do problema. 
Aliado a este passo, a formulação de problemas é outro ponto essencial, 
pois é o processo no qual se decidem quais estados e ações deverão ser 
considerados na abordagem do problema, dado um determinado objetivo 
(RUSSELL; NORVIG, 2004, p. 62). Supondo que, no exemplo anterior, o agente 
esteja considerando as ações de dirigir de uma cidade até a próxima, os estados 
da rota adotada corresponderão a estados do problema. 
 
 
 
 
 
 
 
 
4 
 
Figura 1: Mapa rodoviário simplificado do Estado do Paraná 
 
Supondo-se que o agente esteja em Cascavel, ele considera qual caminho 
pegar, podendo decidir ir por Campo Mourão, Guarapuava ou por União da Vitória. 
Entretanto, nenhuma destas cidades é o objetivo, que é o de chegar até Curitiba. 
Se o agente não tiver familiaridade com o trajeto, ele não saberá qual dos caminhos 
seguir. Em suma, o agente não poderá escolher um curso de ação porque não terá 
o conhecimento de qual estado resulta na execução de uma determinada ação. 
Caso ele não tenha nenhum conhecimento, se o agente não for programado para 
escolher aleatoriamente um caminho, ele ficará paralisado. 
Se o agente possui um mapa, ele pode obter informações sobre os estados 
em que pode entrar e quais ações ele pode perfazer. O agente considera então as 
possíveis rotas a partir das cidades consideradas. Dessa forma, um agente que 
possua uma série de opções imediatas de valor desconhecido pode decidir o que 
fazer, avaliando primeiro as diferentes sequências de ações possíveis que irão 
levar a estados de valor conhecido, tendo condições de escolher a melhor 
sequência. O processo de procurar esta sequência é denominado de busca 
(RUSSEL; NORVIG, 2004, p. 62). 
Um algoritmo de busca recebe na sua entrada um problema e apresenta na 
sua saída uma solução, descrita sob a forma de uma sequência de ações definidas. 
A partir da obtenção da solução, as ações recomendadas por ela são colocadas 
 
5 
 
em execução. O algoritmo para a resolução de problemas simples pode ser então 
descrito nos seguintes passos (RUSSELL; NORVIG, 2004, p. 63): 
 formulação do objetivo e do problema; 
 busca de uma sequência de ações que resolvem o problema; 
 execução das ações uma por uma. 
Quando a sequência se completa, o agente formula outro objetivo e então 
recomeça. É importante observar que na execução da sequência, ele não leva em 
conta as percepções, baseia-se na suposição de que a solução que encontrou na 
busca sempre irá funcionar. 
Um problema pode ser definido de maneira formal em quatro componentes: 
Um estado inicial: o estado no qual o agente começa. Por exemplo, se o 
agente do exemplo da viagem estiver em Foz do Iguaçu, o estado inicial pode ser 
descrito como Origem(Foz do Iguaçu). 
Uma função sucessor: Dado um estado particular x, SUCESSOR(x) retorna 
um conjunto de pares ordenados <ação,sucessor> em que cada ação é uma das 
ações válidas no estado x, e cada sucessor pode ser alcançado partindo-se de x. 
Como exemplo, no caso do estado inicial ser Origem(Foz do Iguaçu), a função 
sucessor para o problema retornaria 
{<Destino(Cascavel), Origem(Foz do Iguaçu)>, 
<Destino(Pato Branco), Origem(Foz do Iguaçu)>} 
O estado inicial e a função sucessor definem o espaço de estados do 
problema, ou seja, o conjunto de todos os estados acessíveis, tendo como partida 
o estado inicial. O espaço de estados representa um grafo no qual os nós são os 
estados e os arcos entre os nós são as ações. 
O teste de objetivo: determina se um estado é um estado objetivo. 
O objetivo do exemplo é o estado final Origem(Curitiba). Em alguns casos, um 
objetivo pode ser definido como uma propriedade abstrata e não por um estado ou 
 
6 
 
conjunto de estados específicos. Por exemplo, num jogo de xadrez, o objetivo é 
alcançar o xeque-mate. 
A função de custo: também chamada de função de custo de caminho, que 
atribui um custo numérico a cada caminho. O agente irá escolher, portanto, uma 
função de custo que irá significar a sua própria medida de desempenho. No caso 
do agente do exemplo, a função de custo seria a distância em quilômetros 
(Figura 1). Há então um custo de passo para ir de um estado a outro. 
Definidos os quatro elementos da formulação do problema, uma solução 
para um problema é um caminho que leva o agente desde o estado inicial até o 
estado objetivo. Considerando a qualidade da solução, a qual é medida pela função 
custo, uma solução ótima é aquela que apresenta o menor custo dentre todas as 
soluções possíveis (RUSSELL; NORVIG, 2004, p. 64). 
 
Exemplos de Problemas 
Para efeito de estudo, os problemas podem ser classificados em: 
 Miniproblema: destina-se a ilustrar ou praticar métodos de resolução 
de problemas, podendo ter descrições conscisas e exatas. Pode ser 
utilizado por diversos métodos para comparação de desempenho. 
 Problemas do Mundo Real: são aqueles que não tendem a ter uma 
descrição concisa e exata, abstraída de situações da realidade. 
Em geral são problemas complexos, que podem ser divididos em 
problemas simples que possuem um método de solução conhecida. 
Esta estratégia é denominada de “dividir-para-conquistar”. 
 
Miniproblemas 
O primeiro miniproblema é o exemplo do robô aspirador, tratado no tópico 
sobre agentes inteligentes. 
 
 
 
7 
 
Tabela 1: Formulação do miniproblema do robô aspirador 
Formulação Descrição 
Estados O agente se posiciona em uma de 9 posições 
diferentes que podem conter sujeira ou não. A 
quantidade de espaços possíveis (contando que todos 
contenham sujeira) é de 9 x 2 estados mais 2 do 
estado inicial resultando em 20 estados. 
Estado inicial Robô na posição (2,2) 
Função sucessor Gera os estados válidos resultantes da tentativa de 
ação (Para-frente, Para-direita, Aspirar). Ver na Figura 
3. 
Teste de objetivo Verificar se todos os quadrados estão limpos 
Custo de caminho Cada passo custa 1 unidade; o custo do caminho é o 
número de passos. 
 
Esse miniproblema tem as posições discretas, sujeira discreta, limpeza 
confiável e não é desorganizado após o término da tarefa. 
O puzzle (quebra-cabeças) de 8 peças consiste em um pequeno tabuleirode tamanho 3 x 3 casas, com peças numeradas de 1 a 8 e um espaço vazio para 
permitir um deslocamento de uma peça. O objetivo do puzzle de 8 peças é atingir 
um determinado estado. 
O puzzle de 8 peças pertence à família de quebra-cabeças deslizantes, 
utilizados com frequência em testes de algoritmos de IA. O quebra-cabeça de 8 
peças possui 181440 estados acessíveis e pode ser resolvido com facilidade. O 
puzzle de 15 peças (um tabuleiro 4x4) possui cerca de 1,3 trilhão de estados. Já o 
puzzle de 24 peças (tabuleiro 5x5) possui aproximadamente 1025 estados, sendo 
ainda bastante difícil de resolver de forma ótima com computadores e algoritmos 
atuais (RUSSELL; NORVIG, 2004, p. 67). 
 
8 
 
 
Tabela 2: Formulação do miniproblema do puzzle de 8 peças 
Formulação Descrição Exemplo 
Estados Uma disposição específica das 8 
peças sobre o tabuleiro 3x3. 
 
Estado inicial Qualquer estado pode ser 
definido como o estado inicial 
(Ver Figura 4). 
 
Função sucessor Gera os estados válidos para 
execução das quatro ações 
possíveis: Esquerda, Cima, 
Baixo, Direita. 
 
Teste de objetivo Verifica-se que o estado 
alcançado é o mesmo que foi 
definido como objetivo. 
 
Custo de caminho Cada passo custa 1 unidade; o 
custo do caminho é o número de 
passos. 
 
 
Descrevendo um problema do mundo real, o problema de roteirização ou 
roteamento baseia-se em uma série de pontos ou nós e ligações entre estes nós. 
Esta tarefa está presente em várias aplicações, tais como o roteamento de redes 
de computadores, planejamento de manufatura, operações militares, sistemas de 
planejamento de vôos e distribuição geográfica de produtos. 
 
 
 
 
 
9 
 
Figura 3: Expansão da árvore de estados do problema do robô aspirador 
 
A formulação do roteamento pode ser aplicada posteriormente a qualquer 
caso real que atenda a estes pressupostos. Por exemplo, no caso de descobrir qual 
a melhor rota aérea entre duas cidades, os estados seriam as cidades pelas quais 
os vôos passam; o estado inicial seria a cidade de origem; a função sucessor 
retorna o próximo destino a partir de uma cidade sendo considerada; o teste de 
objetivo é saber se já se encontra na cidade destino; o custo do caminho pode ser 
o tempo de viagem, o valor monetário de cada trajeto entre cidades, dentre outros. 
 
 
 
10 
 
Figura 4: Expansão da árvore de estados do problema do puzzle de 8 peças 
 
Tabela 4: Formulação do problema do roteamento 
Problema de Roteamento 
Formulação Descrição 
Estados Representação de uma posição ou nó 
Estado inicial Especificado de acordo com o problema 
Função sucessor Os nós ou posições que estão adjacentes 
Teste de objetivo Verificar se pela movimentação por meio dos nós, 
chega-se ao nó destino 
Custo de caminho Dado pelo somatório do custo de cada ligação entre os 
pares de nós 
 
O problema do caixeiro viajante é uma extensão do problema de roteirização, 
em que todos os pontos de uma rede precisam ser visitados, em vez de apenas 
alguns. Este problema demonstra a explosão combinatória que pode acontecer, 
 
11 
 
mesmo o problema tendo poucas instâncias para resolução. 
A quantidade de possibilidades de rotas por todos os pontos é da ordem de (n-1)! 
– fatorial de n-1. Para um conjunto de rotas com poucos pontos, o problema pode 
ser resolvido pela “força bruta” (calculando todas as rotas). Mas o problema cresce 
exponencialmente com a quantidade de pontos. Para o exemplo considerado do 
mapa do Paraná, no qual temos 11 cidades, a quantidade de rotas possíveis 
passando por todos os pontos é dada por aproximadamente 10! (fatorial de 10), 
quase 3,62 milhões de rotas. A tabela abaixo demonstra a complexidade deste 
problema, em que podemos identificar na segunda coluna o total de permutações 
possíveis de pontos a serem visitados e o tempo de execução, considerando que 
o cálculo de cada possibilidade leve 1 nanossegundo (1 bilionésimo de segundo). 
Pode-se identificar o salto que representa de 20 para 25 pontos em termos de 
alguns anos para milhões de anos de processamento! 
 
Tabela 5: Demonstração da complexidade exponencial do problema do caixeiro viajante 
Pontos ou 
nós 
(n-1)! Tempo 
5 24 Insignificante 
10 362880 Insignificante 
15 87,17 bilhões 9 segundos 
20 1,2.1017 3,9 anos 
25 6,2.1023 19,6 milhões de anos 
 
Outros problemas do mundo real podem ser enumerados, tais como o layout 
de circuitos integrados e processadores de computador, a navegação de robôs, 
sequência automática de montagem em fábricas robotizadas, projeto de proteínas 
e a pesquisa na internet (RUSSELL; NORVIG, 2004, p. 70). 
 
12 
 
Para saber mais... 
O Problema do Caixeiro Viajante (chamado 
também de PCV) é um dos problemas mais difíceis de 
resolução. Assista ao vídeo produzido pela Sociedade 
Portuguesa de Matemática para entender um pouco 
mais a respeito deste problema. 
Disponível em: 
<https://www.youtube.com/watch?v=_vKMyRj855A>. 
 
 
TEMA 2: BUSCA DE SOLUÇÕES 
Para a resolução dos problemas expostos no tópico anterior, é necessário 
fazer uma busca no espaço de estados dos problemas. Nos problemas do robô 
aspirador e do puzzle de 8 peças descritos, não foi acidental a representação em 
forma de árvore nas figuras 3 e 4. Certas técnicas utilizam árvores de busca, que 
são geradas a partir do estado inicial e pela função sucessor, configurando assim 
o espaço de estados. Um nó de busca é a raiz da árvore, relativa ao estado inicial. 
Para a resolução, acontece então a expansão do estado atual nos estados 
possíveis a partir da função sucessor, que gera por sua vez um novo ramo ou 
conjunto de estados (Figura 5). No exemplo do mapa geográfico do Paraná, se 
estivermos no estado Origem(Campo Mourão), a expansão produziria um ramo 
com os nós Destino(Maringá), Destino(Guarapuava) e Destino(Cascavel). 
Assim, o propósito da busca é fazer esta expansão de forma contínua, 
avaliando os nós gerados, escolhendo um especificamente e verificando se o nó é 
um estado objetivo ou não. Nesse processo, a escolha de qual estado expandir é 
determinada pela estratégia de busca (RUSSEL; NORVIG, 2004, p. 70). 
 
 
 
13 
 
Figura 5: Exemplo de expansão de uma árvore de busca para o problema da rota entre cidades 
 
É importante notar a diferença entre espaço de estados e a árvore de busca. 
Os estados se referem aos nós possíveis do problema, mas pode existir árvores de 
busca com número infinito de nós. 
Medidas de desempenho 
Um algoritmo de resolução de problemas resulta uma solução ou uma falha. 
As falhas podem acontecer devido ao algoritmo ficar paralisado em um loop infinito 
e, assim, nunca retornar uma saída. A avaliação de desempenho 
de um algoritmo pode ser feita a partir de quatro aspectos (RUSSELL; NORVIG, 
2004, p.73): 
Completeza: o algoritmo de busca oferece a garantia de encontrar uma 
solução quanto ela existir? 
Otimização: A estratégia encontra a solução ótima? 
Complexidade de tempo: Quanto tempo é dispendido para encontrar uma 
solução? 
 
14 
 
Complexidade de espaço: Quanto de memória é necessária para a execução 
da busca? 
TEMA 3: ESTRATÉGIAS DE BUSCA 
As estratégias de busca dividem-se em duas classes: estratégias sem 
informação ou estratégias cegas e estratégias com informação ou busca heurística. 
As estretégias se diferenciam conforme a ordem de expansão dos nós da árvore 
de busca. As estratégias sem informação dividem-se em: 
 Busca em extensão ou amplitude; 
 Busca de custo uniforme; 
 Busca em profundidade; 
 Busca em profundidade limitada; 
 Busca de aprofundamento iterativo; Busca bidirecional; 
 Busca em Extensão ou Amplitude. 
A busca em extensão ou amplitude é uma estratégia simples na qual o nó 
raiz é expandido inicialmente, depois os sucessores do nó raiz, depois os 
sucessores dos sucessores do nó raiz e assim por diante (RUSSEL; NORVIG, 
2004, p. 74). 
A busca em extensão é completa: se o nó objetivo estiver em uma 
profundidade finita d, a busca em extensão encontrará após a expansão de todos 
os nós mais rasos, considerando que o fator de ramificação b seja finito. O nó 
objetivo mais raso não significa que seja o nó ótimo. A busca em extensão será 
ótima se o custo do caminho for uma função não decrescente da profundidade do 
nó, como por exemplo, se o custo for o mesmo para todas as ações. 
Se a árvore gera b nós no primeiro nível, o segundo nível subsequente gera 
também b nós, totalizando b2 nós na árvore; no terceiro nível totalizará b3 nós e 
assim sucessivamente. Se a solução estiver no nível d, o algoritmo se expandiria 
até o nível d+1, gerando então (bd+1-b) nós. A soma total dos nós 
será, então: 
 
15 
 
N = 1 + b + b2 + b3 + b4 + ... + bd + (bd+1-b) = O(bd+1) 
Utilizamos a notação O, à direita da equação, para indicar a complexidade 
do algoritmo de busca em extensão, onde indicamos o expoente mais significativo. 
Com um fator da ramificação b elevada ao expoente d, a complexidade se 
caracteriza como exponencial. Para poucos nós, o problema da busca em extensão 
é fácil de resolver. Mas se adicionarmos mais nós, a complexidade de tempo e 
memória aumenta significativamente. 
Tabela 6: Análise da complexidade de tempo e espaço da busca em extensão ou amplitude 
Profundidade 
(d) 
Quantidade 
de nós 
Tempo Memória 
2 1101 0,11 segundos 1 megabyte 
4 111.101 11 segundos 106 megabytes 
6 ~107 18,5 segundos 10 gigabytes 
8 ~109 30,9 horas 1 terabyte 
10 ~1011 128,6 dias 101 terabytes 
12 ~1013 35,2 anos 10 petabytes 
14 ~1015 3523 anos 1 exabyte 
20 ~1021 3,5 bilhões de anos 1 yottabyte 
 
A tabela 6 mostra a análise da complexidade de tempo e memória, 
considerando um fator de ramificação de 10 nós para vários valores de 
profundidade d. Para o cálculo do tempo é considerado que 10000 nós podem ser 
gerados por segundo, e para o cálculo de memória cada nó exigindo 1000 bytes de 
armazenamento. 
Ao lidar com um problema de profundidade 12, ainda levariam 35 anos para 
que a busca em extensão possa encontrar a solução. De forma geral, os problemas 
 
16 
 
de busca com complexidade exponencial não podem ser resolvidos por métodos 
sem informação, para qualquer instância, a não ser os problemas com instâncias 
menores. 
 Busca de Custo Uniforme 
A busca de custo uniforme difere da busca em extensão por considerar a 
expansão do nó com o custo mais baixo. Este tipo de busca não se importa com o 
número de passos em um caminho, mas apenas com o custo total. Pode-se garantir 
a completeza desde que o custo em cada passo seja maior ou igual a um valor 
constante positivo pequeno denominado aqui de ε. Esta condição garante o caráter 
ótimo, significando que o custo é crescente à medida que se percorre o caminho. 
Se denominarmos C* o custo da solução ótima, a complexidade do pior caso do 
algoritmo será de O(b┌C*/ ε ┐). Quando todos os custos de passos forem iguais, o 
algoritmo volta à complexidade O(bd+1). 
Busca em Profundidade 
A estratégia de busca em profundidade expande sempre o nó mais profundo 
na borda atual da árvore de busca. Na Figura 8 podemos ver como este algoritmo 
se desenvolve. A busca vai prosseguindo até o nível mais profundo da árvore, onde 
não existem mais nós sucessores. Após visitar os nós mais profundos, a busca 
retorna ao nível mais raso, que ainda possui nós não explorados (RUSSEL; 
NORVIG, 2004, p. 76). 
Uma das vantagens da busca em profundidade é que ela possui requisitos 
de memória pequenos em relação às outras estratégias. Só é necessário 
armazenar um único caminho do nó raiz até o nó sendo visitado. À medida que os 
nós e seus descendentes são explorados, eles podem ser removidos da memória. 
A desvantagem da estratégia de busca em profundidade é que ela pode 
descer um caminho muito longo (ou ainda infinito), podendo ficar paralisada, 
quando o nó objetivo poderia estar bem próximo do nó raiz da árvore de busca. 
Busca em Profundidade Limitada 
A abordagem da busca em profundidade limitada permite que atenuemos o 
problema das árvores muito grandes ou ilimitadas, delimitando a profundidade a 
 
17 
 
um valor máximo . Ou seja, os nós na profundidade  são tratados como se não 
tivessem nós sucessores. Ele permite resolver o problema dos percursos infinitos, 
mas pode trazer um fator de incompleteza, ou seja, se  < d, então o objetivo mais 
raso estaria além do limite imposto. A complexidade de tempo desta estratégia seria 
de O(b). 
Quando se tem algum conhecimento sobre o problema, pode-se impor um 
limite à estratégia de busca em profundidade. Citando um exemplo, o mapa 
geográfico do Paraná, apresentado na Figura 2, tem 11 cidades. Então poderíamos 
definir a profundidade 11 para a busca em profundidade de um percurso específico. 
Entretanto, se analisarmos melhor o mapa, podemos ver que uma cidade qualquer 
pode ser alcançada em 5 passos, podendo-se definir então o limite para o problema 
com =5. Mas na maior parte dos problemas não possuímos conhecimento da 
profundidade das soluções antes de resolvermos. 
Busca de aprofundamento iterativo em profundidade 
Esta estratégia é uma variação da busca em profundidade, que procura 
aumentar gradualmente o limite de profundidade a partir do nó raiz, depois 1, depois 
2, e assim sucessivamente, até que encontre um objetivo. Isso deverá ocorrer 
quando o limite da profundidade alcançar d, a profundidade do nó objetivo mais 
raso. A estratégia de aprofundamento iterativo combina os benefícios da busca em 
profundidade e da busca em extensão. Os requisitos de memória também são 
modestos, exigindo O(bd). Assim como na busca em extensão ou amplitude, o 
algoritmo é completo quando o fator de ramificação for finito, e ótimo quando o 
custo do caminho é uma função não decrescente em relação à profundidade do nó 
(RUSSELL; NORVIG, 2004, p. 79). A complexidade de tempo da busca em 
aprofundamento iterativo é melhor que a da busca em extensão. 
De forma geral, a busca por aprofundamento iterativo em profundidade é o 
método de busca sem informação preferido quando há um espaço de busca muito 
grande e a profundidade da solução dentro da árvore não é conhecida 
(RUSSEL; NORVIG, 2004, p. 80). 
 
 
18 
 
Busca bidirecional 
A noção na estratégia de busca bidirecional é a execução de duas buscas 
que acontecem simultaneamente, uma de forma direta, partindo do estado inicial 
como temos visto até agora, e outra que parte do objetivo, acontecendo a parada 
quando as buscas se encontram em um estado intermediário. A motivação principal 
é que uma busca que tenha uma expansão bd/2 + bd/2 é bem menor do que bd. 
Por exemplo, se o fator de ramificação b = 10 e a profundidade d = 6, numa busca 
em extensão padrão, teríamos um total de N = 11.111.101 nós (mais de 11 milhões 
de nós), enquanto que na busca bidirecional (considerando agora a profundidade 
d = 3, duas vezes) teríamos N = 22.202 nós. A complexidade de tempo da busca 
bidirecional é também igual a O(bd/2). 
A tabela 7 resume a comparação entre as estratégias de busca de acordo 
com os quatro critérios de avaliação (completeza, otimização, complexidade de 
tempo e de espaço). 
Tabela 7: Tabela comparativa entre as estratégias de busca sem informação. 
O cabeçalho da coluna tem a sigla com as primeiras letras do tipo debusca (b é o 
fator de ramificação, d é a profundidade, m a profundidade máxima da árvore de 
busca e  é o limite de profundidade. As anotações que estão em sobrescrito: a 
completa se b é finito; b completa se o custo do passo é >= ε, com ε positivo; c 
ótima se os custos dos passos são todos idênticos; d se ambos os sentidos utilizam 
a busca em extensão). 
Critério BE BCU BP BPL BAIP BB 
Completa? Sima Sima,b Não Não Sima Sima,d 
Tempo O(bd+1) O(b┌C*/ ε┐) O(bm) O(b) O(bd) O(bd/2) 
Espaço O(bd+1) O(b┌C*/ ε┐) O(bm) O(b) O(bd) O(bd/2) 
Ótima? Simc Sim Não Não Simc Simc,d 
Fonte: adaptado de Russell e Norvig (2004, p. 81). 
 
 
19 
 
Buscas com Informação 
As estratégias de busca sem informação tendem a ser ineficientes na maioria 
dos casos. Estratégias de busca que utilizam algum conhecimento específico do 
sistema pode ser uma melhor opção mais eficiente. As estratégias neste caso 
apresentam uma abordagem denominada de busca pela melhor escolha. Esta 
busca considera um algoritmo que é uma especialização do algoritmo geral da 
busca em árvore, em que um nó é selecionado para 
expansão com base em uma função de avaliação f(n). Na verdade, não há de fato 
uma melhor escolha, mas a escolha que parece ser a melhor, conforme a função 
de avaliação. 
Há uma outra família de algoritmos com funções de avaliação diferentes, na 
qual um componente fundamental desta avaliação é uma função heurística h(n). 
Por meio das funções heurísticas podemos aplicar o conhecimento relativo ao 
problema no algoritmo de busca. Por exemplo, podemos fazer com que a função 
heurística seja representada pela distância que o nó expandido está do objetivo. 
Existem dois tipos de busca com informação: a busca gulosa e o algoritmo A* 
(chamado de “A-estrela”). 
A busca gulosa é uma estratégia que tenta expandir o nó mais próximo à 
meta, na suposição de que levará provavelmente a uma solução de forma rápida, 
avaliando apenas a função heurística: f(n) = h(n). No caso do mapa rodoviário do 
Paraná apresentado anteriormente, podemos utilizar a heurística da distância em 
linha reta. Apesar de não ser a distância pela estrada em quilômetros, o uso da 
distância em linha reta pode ser uma heurística útil para resolver o problema. 
Entretanto, isso não garante que se encontre a melhor solução quando aplicando 
para todos os casos. 
A busca A* é a estratégia mais conhecida de busca pela melhor escolha. A 
avaliação da busca combina o custo para alcançar cada nó, dado por g(n), e o custo 
para ir do nó em questão até o objetivo h(n) na forma: 
f(n) = g(n) + h(n) 
 
20 
 
Assim, f(n) representa o custo estimado da solução de custo mais baixo 
passando pelo nó n. 
 
Tabela 8: Tabela comparativa entre as estratégias de busca gulosa e A*. O 
cabeçalho da coluna tem a sigla com as primeiras letras do tipo de busca (b é o 
fator de ramificação, m a profundidade máxima da árvore de busca. As anotações 
que estão em sobrescrito: a pode ficar presa em loops; b desde que não exista uma 
quantidade infinita de nós. 
Critério Busca Gulosa A* 
Completa? Nãoa Simb 
Tempo O(bm) O(bm) no pior caso 
O(log h*(n)) se o espaço de busca 
é uma árvore com um objetivo 
apenas 
Espaço O(bm) O(bm), expande todos os nós 
Ótima? Não Sim 
Fonte: adaptado de Russell e Norvig (2004, p. 97-101). 
 
TEMA 4: FUNÇÕES HEURÍSTICAS 
A definição de uma função heurística h(n) irá depender da natureza do 
problema de busca. Vimos que uma boa função heurística requer uma heurística 
admissível, cujo comportamento nunca superestime o custo para se alcançar o 
objetivo (RUSSELL; NORVIG, 2004, p. 97). Assim, a modelagem de uma 
função heurística requer uma dose de bom senso no estudo das características do 
problema. 
 
21 
 
A função h(n) do problema do mapa rodoviário é utilizada em grande parte 
dos problemas que possuem características geográficas ou espaciais, ligada ao 
conceito de distância euclidiana. A distância euclidiana é calculada a partir das 
coordenadas cartesianas dos pontos relacionados aos nós do problema. 
Considerando a definição de uma função heurística para o problema do 
puzzle de 8 peças, podemos ver pela Figura 6, a seguir, que, a partir de um estado 
qualquer, as peças devem ser movimentadas para se alcançar o objetivo. Podemos 
então listar mais duas funções possíveis: 
Número de peças fora de posição: Na figura 6, todas as peças no estado (a) 
estão fora de posição, ou seja, a função heurística assume o valor h(n) = 8. 
Distância de Manhattan: calcular a distância em quadras de cada peça até a 
sua posição no objetivo. Na figura 13, as peças estão fora da sua posição conforme 
o seguinte: h(n) = 3+2+2+2+2+2+2+1 = 16 (a peça “1” precisa de 3 movimentos até 
o objetivo, a peça “2” precisa de 2 movimentos até o objetivo, e assim 
sucessivamente). 
Figura 6: Estados referentes ao problema do puzzle de 8 peças: (a) um estado qualquer; (b) objetivo 
 
 Russell e Norvig (2004, p. 106) compararam o custo da busca do algoritmo 
A* com as duas funções heurísticas anteriores com a busca por aprofundamento 
iterativo (BAI), gerando 1.200 problemas. Com a profundidade da árvore d = 12, a 
BAI obteve um custo de 3,644 milhões de movimentos, enquanto que a busca A* 
obteve o custo médio de 227 para a heurística das peças fora de posição, e o custo 
médio de 73 para a função heurística utilizando a distância Manhattan. 
 
 
 
22 
 
SÍNTESE 
Neste capítulo foram estudados os agentes de resolução de problemas, que 
precisam tomar decisões sobre os próximos passos a serem dados na sequência 
de ações. Ao se fazer a formulação do objetivo, o próximo passo é a formulação do 
problema. Geralmente o processo de encontrar uma solução significa perfazer uma 
busca no espaço de soluções possíveis. Um problema pode ser definido a partir do 
seu estado inicial, de uma função sucessor, o teste de alcance do objetivo e a 
função custo de caminho. Uma solução leva o agente do estado inicial até o 
objetivo. Uma solução ótima apresenta o menor custo de caminho dentre todas as 
soluções possíveis. Foram estudados diversos miniproblemas, tais como o do robô 
aspirador, o quebra-cabeça de 8 peças e o problema de roteamento. Para se fazer 
a busca, certas técnicas usam as árvores de busca. É necessário adotar estratégias 
de busca que possam ser sem informação e com informação. 
 
REFERÊNCIAS 
RUSSEL, S.; NORVIG, P. Inteligência Artificial. Tradução da 2. ed. Rio de 
Janeiro: Campus, 2004. 
BITTENCOURT, G. Inteligência Artificial – Ferramentas e Teorias. Florianópolis: 
Ed. da UFSC, 1998. 
 
1 
 
 
 
 
 
 
 
INTELIGÊNCIA ARTIFICIAL 
APLICADA 
AULA 4 
 
 
 
 
 
 
 
 
 
 
Prof. Luciano Frontino de Medeiros 
 
2 
 
CONVERSA INICIAL 
Nesta aula você estudará duas técnicas que fazem parte da linha de 
pesquisa simbólica, os Sistemas Especialistas e a Programação em Lógica. 
São abordados elementos comuns às duas técnicas, o uso de fatos e regras 
para representar o conhecimento, bem como exemplos práticos que auxiliarão 
na compreensão dos aspectos dinâmicos de cada técnica. 
 
CONTEXTUALIZANDO 
A linha de pesquisa simbólica da IA é uma das mais tradicionais, 
presentes desde as primeiras pesquisas, envolvendo a manipulação de 
símbolos para alcançar objetivos ao resolver algum problema específico. Dois 
dos representantes mais significativos desta linha são os sistemas especialistas 
e a programação em lógica. Os sistemas especialistas já eram pesquisados 
mesmo antes de haver computadores pessoais, evidenciando a possibilidade 
do conhecimento de profissionais especialistas ser representadoem um 
sistema de computador de maneira a proporcionar informações, como se o 
sistema estivesse aconselhando a melhor alternativa para uma tomada de 
decisão, ou a descrição de um quadro sintomático. A programação em lógica 
permite a um agente raciocinar de acordo com a lógica de primeira ordem, 
permitindo a resolução de uma série de problemas da IA. Vamos agora ao 
estudo destas duas técnicas, representantes-chave da linha de 
pesquisa simbólica. 
TEMA 1: SISTEMAS ESPECIALISTAS 
Dentro da linha de pesquisa simbólica da IA, os Sistemas Especialistas 
(SE) são programas de computador que imitam o comportamento de 
especialistas humanos dentro de um domínio específico de conhecimento. Os 
sistemas especialistas podem ser classificados quanto às definições da IA no 
quadrante “agir como humanos”. Consiste assim numa ferramenta que possui 
 
3 
 
a capacidade de entender o conhecimento sobre um problema específico e 
usar esse conhecimento de maneira inteligente para sugerir alternativas 
de ação. 
Podemos afirmar que SE é uma técnica da IA desenvolvida para 
resolver problemas em um determinado domínio, cujo conhecimento utilizado 
é obtido de pessoas que são especialistas naquele domínio. 
No início, a ideia central dos sistemas especialistas foi originada do 
sistema DENDRAL, em 1965, desenvolvido a partir de uma grande soma de 
conhecimento heurístico manipulado por regras, procurando resolver o 
problema de se inferir estruturas moleculares a partir da informação 
espectrográfica de massa. A partir de 1968 até o presente, o DENDRAL foi 
utilizado em diversas pesquisas relacionadas à química orgânica, sendo alguns 
resultados derivados considerados melhores do que obtidos por especialistas 
humanos (BITTENCOURT, 1998, p. 276). 
Desenvolvido por Edward Shortlife, da Universidade de Stanford, na 
década de 1970, o MYCIN é um sistema especialista para a área médica, o 
qual teve um papel fundamental no desenvolvimento dos futuros sistemas 
especialistas. O MYCIN foi desenvolvido para resolver o problema do 
diagnóstico e tratamento de doenças infecciosas do sangue por meio de um 
conjunto de 450 regras que permitiam o diagnóstico e a prescrição de 
tratamentos. A utilidade deste tipo de sistema é que nem sempre um médico é 
também especialista na área de infecções, ainda mais considerando um 
ambiente hospitalar (BITTENCOURT, 1998, p. 274). 
As regras do MYCIN eram codificadas na linguagem LISP. As regras 
eram formadas por premissas com combinações booleanas denominadas de 
cláusulas, Cada cláusula era composta de um predicado e uma tripla de 
parâmetros objeto-atributo-valor. Um exemplo de clausula do MYCIN pode ser 
entendido da seguinte forma: 
 
 
 
4 
 
SE 
 
1) A infecção é do tipo bacteremia primária E 
2) O local da cultura é um dos locais estéreis E 
3) A entrada para o organismo foi pelo trato gastrointestinal 
 
ENTÃO 
 
Existe evidência sugestiva (0.7) que a identidade do organismo seja um 
bacteroide. 
 
As regras no MYCIN eram associadas a um coeficiente de certeza, 
variando na faixa de valores entre -1 e 1. Os coeficientes eram utilizados para 
propagar a incerteza inicial por meio do raciocínio do programa em uma cadeia 
de inferências. 
 
TEMA 2: COMPONENTES DE UM SISTEMA ESPECIALISTA 
De forma geral, um sistema especialista pode ser dividido em três 
módulos: uma base de conhecimento, um quadro negro e um mecanismo de 
inferência (também chamado de motor de inferência). A base de 
conhecimento é onde fica armazenado o conhecimento obtido do domínio no 
qual atua o SE, traduzido na forma de regras, e também uma memória de 
trabalho. No quadro negro, as informações são alimentadas ao sistema com 
relação às variáveis que são lidas do ambiente. O mecanismo de inferência é 
o responsável pelo encadeamento e teste das regras, fornecendo um resultado 
em função dos fatos alimentados ao sistema especialista. 
 
 
 
5 
 
Figura 1: Esquema básico de um sistema especialista 
 
 
A base de conhecimento contém as condições expressas nas regras que 
se referem às perguntas. Estas perguntas envolvem variáveis que precisam ser 
instanciadas (receber valores) e passar logo após por um processo de 
inferência. O motor de inferência controla, portanto, a atividade do sistema 
especialista, ocorrendo em ciclos que se constituem de três fases: 
1) A seleção das regras a partir dos dados correspondentes de 
entrada; 
2) A resolução de conflitos indicando quais regras serão efetivamente 
executadas, a partir de priorização e ordenação; 
3) A ação propriamente dita. 
 
 
 
6 
 
TEMA 3: ETAPAS PARA CONSTRUÇÃO DE UM SISTEMA 
ESPECIALISTA 
O processo de construção de um sistema especialista costuma seguir os 
passos descritos abaixo: 
1) Identificação e definição do domínio do problema; 
2) Aquisição do Conhecimento; 
3) Organização e Representação do Conhecimento; 
4) Implementação do SE; 
5) Testes e Validação. 
 
Com relação à identificação e definição do domínio do problema, o 
desenvolvimento de um SE se inicia com a especificação do domínio do 
problema, que geralmente ocorre a partir da consulta a algumas fontes de 
conhecimento, tais como: livros, manuais, relatórios técnicos e principalmente 
da experiência e conhecimento dos especialistas. Dessa forma, são 
identificadas possíveis variáveis e possibilidade de divisão do problema a ser 
abordado em subproblemas. 
Na aquisição de conhecimento é considerada a parte mais sensível no 
desenvolvimento de um SE, muitas vezes o gargalo do processo. Essa 
dificuldade está relacionada muitas vezes com a dificuldade de transmissão do 
conhecimento por parte do especialista; ou porque o conhecimento não é bem 
definido, ou porque é difícil expressar este conhecimento em palavras. 
A aquisição de conhecimento é realizada geralmente por meio de entrevistas e 
interações com especialistas do domínio. A aquisição de conhecimento 
consiste, assim, na coleta e análise de informações de um ou mais 
especialistas e qualquer outra fonte, possibilitando a produção de documentos. 
 
7 
 
Esses documentos formam a base de funcionamento da base de conhecimento 
do SE. 
A organização do conhecimento de um SE é feita de fatos e regras. Um 
fato é uma forma de conhecimento declarativo. Fatos são usados para 
descrever relacionamentos entre estruturas de conhecimento mais complexas 
e controlar o uso destas estruturas durante a resolução de problemas. Em IA e 
SE, um fato é às vezes referenciado como uma proposição. 
Uma proposição é uma declaração que pode ser verdadeira ou falsa. 
Por exemplo: 
“Está chovendo” 
A frase é uma declaração de algo que acontece no mundo. Dependendo 
do que acontece no mundo, se está chovendo na realidade, a proposição acima 
recebe o valor “verdadeiro”. Caso esteja fazendo sol, então recebe o valor 
“falso”. Outro exemplo: 
“A cor da bola é vermelha” 
Neste caso, a proposição está organizada na forma objeto-atributo-
valor (OAV). O objeto é “bola”, “cor” é o atributo e “vermelha” é o valor. Se 
olhamos uma bola azul e emitimos esta afirmação, o valor dela é “falso”. No 
caso de a cor ser vermelha, o valor da proposição será “verdadeiro”. 
A representação do conhecimento em um SE utiliza, como visto 
anteriormente, regras. Regras são sequências lógicas compostas por 
premissas (antecedentes) e conclusões (consequentes). É comum o uso da 
expressão condicional SE-ENTÃO para representar regras dentro de um 
sistema especialista. Por exemplo 
SE (distância à frente < 10 cm) ENTÃO (vire 180 graus) 
SE (temperatura > 50 graus) ENTÃO (desligue aquecedor) 
Estes exemplos deregras são ditas determinísticas, pois quando a 
premissa for verdadeira, sempre acontecerá a ação da conclusão da regra. 
 
8 
 
Regras podem ainda ter um coeficiente de confiança ou de probabilidade. 
Dessa forma, as regras se tornam probabilísticas, e a ação está condicionada 
a um fator que indica a probabilidade ou confiança de que a ação irá acontecer. 
Regras probabilísticas são importantes para SEs que trabalham com 
informações incertas, que farão inferências sobre diagnósticos para indicar 
ações com mais “força’ que outras. 
Para a fase de implementação, é realizada aqui a escolha de uma 
linguagem de programação ou pacote (muitas vezes chamado de shell) pelo 
analista, na implementação do sistema. As linguagens utilizadas para codificar 
sistemas especialistas geralmente diferem das linguagens convencionais, tais 
como C ou Java, e tal escolha pode implicar no desenvolvimento do próprio 
mecanismo de inferência do SE. As shells apresentam vários benefícios no 
desenvolvimento de um SE, pois já implementam o motor de inferência. Um 
exemplo de shell é o Expert SINTA. 
A última etapa na elaboração do SE são os testes e validação do 
sistema por meio de análise de casos conhecidos. Estes testes, geralmente 
também são realizados para a validação das regras na base de conhecimento. 
 
TEMA 4: EXEMPLO DE SISTEMA ESPECIALISTA 
Para ilustrar a operação de um sistema especialista, o exemplo a seguir 
refere-se a uma análise de perfil financeiro para concessão de crédito. Esse 
tipo de sistema pode ser entendido como uma regra de negócio de uma 
empresa financeira, podendo ser estendido para outros domínios, tais como 
companhias de seguro e planos de saúde. 
O sistema especialista tem como objetivo a concessão de crédito que irá 
depender de uma série de variáveis que precisam ser informadas ao sistema. 
A modelagem do SE pode ser vista na Figura 2. A primeira regra se refere à 
comparação da variável renda. Caso seja maior que 5000, então o próximo 
passo é perguntar sobre o percentual da prestação do carro; caso seja menor 
 
9 
 
do que 10% da renda, então segue para a próxima regra, que é a comparação 
da prestação da casa; caso seja menor do que 20% da renda, então o crédito 
será concedido. 
A partir daí o interesse agora é o de verificar qual o valor do crédito que 
será concedido. Para isso, uma regra compara o tempo de trabalho; caso seja 
maior ou igual a 4 anos, então o limite a ser concedido é de 10000. Se for menor 
ou igual a 4 anos, então é necessário comparar a variável outras dívidas; caso 
seja menor do que 5% da renda, então o limite concedido será um pouco 
menor, de 3000. 
 
Figura 2: Diagrama de fluxo das regras do sistema especialista para análise de perfil de 
cliente visando a concessão de crédito 
 
 
 
 
 
10 
 
Figura 3: Tela demonstrando a implementação do sistema especialista de concessão de 
crédito no Expert SINTA 
 
 
Para saber mais... 
O expert SINTA foi desenvolvido 
pelo Laboratório de Informática Aplicada 
da UFC – Universidade Federal do Ceará. 
Para o download do arquivo instalador do 
Expert SINTA, acesse o link 
<ftp://ftp.lia.ufc.br/sinta/sinta.zip>, ou por 
meio do QR Code ao lado. 
 
 
Para implementar esse exemplo no Shell Expert SINTA, primeiro 
deve-se identificar quais as variáveis a serem testadas durante a execução do 
SE. Dessa forma, e analisando o diagrama do fluxo das regras, verificamos que 
é necessário trabalhar com as seguintes variáveis: 
 
11 
 
 conceder linha; 
 limite de crédito (objetivo); 
 outras dívidas; 
 prestação de imóvel; 
 prestação do carro; 
 renda; 
 tempo no emprego. 
 
No Expert SINTA, após criar uma nova base, as variáveis devem ser 
digitadas, devendo ser definida também a faixa de valores possíveis que a 
variável deverá receber. Veja a tela de variáveis na Figura 4. 
No Expert SINTA, as variáveis podem ser de três tipos: numérica, 
univalorada e multivalorada. A faixa da variável numérica deve ficar na 
forma min;max (o valor mínimo, depois ponto e vírgula, e depois o valor 
máximo). A variável univalorada irá tratar valores “sim” ou “não”. No caso 
de a variável assumir uma série de valores discretos (uma lista de opções), 
então será multivalorada. Neste caso, as opções deverão ficar separadas 
por ponto e vírgula. Exemplo: para uma variável que assume valores 
relativos a cores primárias, a faixa deveria ser especificada como: 
vermelha;azul;amarela. 
 
Após a digitação das variáveis, deve ser acessada a tela para a definição 
de objetivos. Na Figura 5 temos ilustrado o procedimento, de maneira que a 
variável objetivo (no caso, “limite de crédito”) deve ser colocada no box à direita 
da lista de variáveis. 
 
12 
 
Figura 4: Tela de entrada de variáveis e faixas de valores do Expert SINTA 
 
 
Figura 5: Definição da variável objetivo “limite de crédito”, no Expert SINTA 
 
Após a definição do objetivo, as regras do SE já podem ser criadas. Ao 
clicar em Nova Regra, devemos adicionar a regra digitando primeiro a premissa 
da regra e depois a conclusão da regra. Como as variáveis já foram digitadas 
previamente, elas aparecem numa lista, facilitando a digitação. Veja na Figura 
6 uma regra criada no Expert SINTA. 
 
13 
 
Figura 6: A regra com o teste das três variáveis renda, prestação do carro e prestação da 
casa (conforme o diagrama de fluxo na figura 2). Ao invés de digitar uma regra para cada 
teste, coloca-se todas numa regra apenas, adicionado a operação lógica “E” (ou seja, o teste 
de cada variável precisa ser verdadeiro simultaneamente para as três variáveis). 
 
Após a digitação de todas as regras, a tela principal do Expert SINTA 
ficará como mostrado na Figura 7. Constatamos então que foram criadas 5 
regras para a execução deste SE. Na Figura 8 temos o detalhamento de todas 
as regras (quando clicamos em “Visualizar”). A primeira regra se refere ao teste 
das variáveis renda, prestação do carro e prestação da casa, habilitando a 
variável conceder linha. 
Figura 7: Tela principal com as regras digitadas 
 
 
14 
 
 
Figura 8: Listagem das regras digitadas no Expert SINTA. 
 
 
A segunda, terceira e quarta regras se referem à definição do limite de 
crédito que será concedido. Conforme o diagrama do fluxo das regras, a regra 
2 testa para o caso positivo para o tempo de trabalho maior ou igual a 4 anos. 
No caso dessa regra falhar, a regra 3 e 4 comparam também a variável outras 
dívidas. Existe ainda a regra 5 para o caso de a variável conceder linha receba 
o valor “Não” na falha da regra 1. 
Para executar o SE, ao clicar em Iniciar consulta, as telas com as 
perguntas para a entrada dos valores das variáveis são apresentadas 
sucessivamente. Ao final, o Expert SINTA apresenta a variável objetivo e o 
valor que foi obtido em função de uma execução específica. 
 
 
 
 
15 
 
Figura 9: Parte da execução do SE, com a tela de entrada da variável renda 
 
 
 
Figura 10: Uma execução específica do SE implementado, mostrando a concessão do valor 
de 10000 para a variável limite de crédito 
 
Implementação em Linguagem Java 
A implementação de sistemas especialistas pode ser feita também em 
uma linguagem de programação procedural, tal como o C++ ou Java. Dessa 
forma, uma regra de negócio que implementa o conhecimento de um 
especialista pode ser colocada em um sistema de informação para auxiliar o 
trabalho. O exemplo do SE para análise de crédito pode ser implementado 
utilizando classes ou de maneira mais simples utilizando chamadas de função. 
Na figura 11 temos o código emJava do programa na forma de uma função 
 
16 
 
com as variáveis de entrada como parâmetros da função e uma variável para o 
valor do limite de crédito como retorno. As regras podem ser implementadas na 
forma de condicionais com o teste das variáveis. No caso de regras que tenham 
grau de confiança, o código precisa ser alterado para contemplar o 
processamento dos graus de confiança para cada regra que é analisada. 
 
TEMA 5: PROGRAMAÇÃO LÓGICA COM PROLOG 
Dentro da linha simbólica, os estudos da lógica e da sua aplicação 
prática revestiram-se de fundamental importância para o aparecimento de 
sistemas inteligentes. Ainda que a lógica seja uma área de conhecimento com 
raízes na Filosofia, a partir do século XIX, os estudos de Boole (1815-1864) 
deram origem ao que se denomina atualmente de “álgebra booleana”. O 
matemático alemão Gottlob Frege (1848-1925) lançou a primeira versão de um 
cálculo de predicados da lógica, auxiliando a formalização exata do raciocínio 
dedutivo sobre conceitos matemáticos (PALAZZO, 1997, p.1). 
 
 
 
 
 
 
 
 
 
17 
 
Figura 11: Implementação em Java utilizando chamada de função para o exemplo de 
concessão de crédito. Abaixo, diferentes chamadas da main produzindo os valores de limites 
respectivos. 
 
 
 
 
18 
 
No início da Segunda Guerra Mundial, praticamente a fundamentação 
teórica da lógica computacional estava pronta. Entretanto, não havia um meio 
prático para implementar a lógica e toda a sua necessidade de computações 
para a realização dos procedimentos de prova, ficando restrito a exemplos bem 
simplificados. Com a evolução dos computadores nos anos 1950, o potencial 
para implementação de programas para o raciocínio lógico começa a se tornar 
realidade (PALAZZO, 1997, p.1). 
Na década de 1960, com a prova automática de teoremas, um 
procedimento que permitiu a interpretação procedimental da lógica, possibilitou 
que fossem estabelecidas as condições para compreendê-la como uma 
linguagem de programação de amplo uso. Mas o primeiro interpretador aparece 
somente em 1972, desenvolvido pela equipe do pesquisador Alain Colmerauer 
na Universidade de Aix-Marseille, com o nome de Prolog (acrônimo em francês 
para “Programmation em Logique”). Pesquisadores da Universidade de 
Edimburgo formalizaram a linguagem que se tornou referência para as 
implementações atuais e ficou conhecida como o “Prolog de Edimburgo” 
(PALAZZO, 1997, p. 2). 
Uma das principais ideias subjacentes da programação em lógica é de 
que um algoritmo é constituído por dois elementos disjuntos: a lógica e o 
controle. O componente lógico corresponde à definição do que deve ser 
solucionado. O componente de controle estabelece como a solução pode ser 
obtida. 
Quando programando em PROLOG, o programador precisa somente 
descrever o componente lógico de um algoritmo, deixando o controle da 
execução para ser exercido pelo sistema de programação em lógica utilizado. 
A atividade do programador passa a ser simplesmente a especificação do 
problema que deve ser solucionado. 
Assim, um programa em lógica é a representação de um problema 
expresso por meio de um conjunto finito de um tipo especial de sentenças 
lógicas denominadas de cláusulas. O programador simplesmente especifica o 
 
19 
 
problema que deve ser solucionado. O controle fica a cargo do sistema de 
programação em lógica utilizado (PALAZZO, 1997, p. 3). 
Ao contrário de um programa em linguagens como C ou Java, um 
programa em lógica não é a descrição de um procedimento para se obter a 
solução de um problema; o sistema é inteiramente responsável pelo 
procedimento a ser adotado na execução. Por isso, é dito que o paradigma 
fundamental da programação em lógica é o da programação declarativa, em 
oposição à programação procedural, típica das linguagens convencionais 
como C ou Java. O ponto focal da programação em lógica consiste em 
identificar a noção de computação com a noção de dedução. 
Ao longo dos anos, a programação em PROLOG tem sido aplicada a 
diversas áreas, tais como: 
 Sistemas de apoio à decisão; 
 Simulações educacionais; 
 Tutoriais inteligentes; 
 Problemas matemáticos; 
 Planejamento e roteirização; 
 Resolução de problemas; 
 Uso em regras de negócio; 
 Processamento de linguagem natural. 
 
Cláusulas em PROLOG 
Um programa em lógica pode ser visto alternativamente como uma base 
de dados. Bases de dados convencionais descrevem apenas fatos (por 
exemplo, “Totó é um cão”). Além disso, sentenças em um programa em lógica 
 
20 
 
possuem, porém, um alcance maior, permitindo a representação de regras (por 
exemplo, “Todo cão é mamífero”). 
Uma cláusula em PROLOG pode ser de três tipos: 
 Fatos: Denotam uma verdade incondicional; 
 Regras: Definem as condições que devem ser satisfeitas para 
que uma declaração seja considerada verdadeira; 
 Consulta: Interrogação ao programa para verificar a verdade do 
conhecimento nele contido. 
Na Tabela 1 temos um exemplo de cada cláusula, mostrando também 
um pouco da sintaxe de PROLOG. Num primeiro momento, os fatos e as regras 
precisam ser alimentados ao sistema PROLOG. Logo após, são 
feitas as consultas como se fossem perguntas relativas à dedução de 
novos conhecimentos, a partir dos conhecimentos que existem na 
base de conhecimento. 
Tabela 1: Tipos de cláusulas em PROLOG 
Cláusula Exemplo Descrição 
Fato pai(joão, luiz). Este fato é traduzido como 
“João é o pai de Luiz”. 
Regra filho(X,Y) :- pai(Y,X). 
 
Se X é filho de Y, então Y é pai 
de X. O sinal “:-“ funciona 
como uma “seta à esquerda”, 
donde a conclusão à direita é 
obtida a partir das premissas 
que estão na direita. 
Consulta ?- filho(luiz, joão). 
True 
A consulta tenta obter se, a 
partir dos fatos e das regras 
existentes na base de 
conhecimento, Luiz é filho de 
João. A regra acima deduz um 
 
21 
 
novo fato, a partir do fato e da 
regra anterior. 
 
Uma cláusula é dividida nos seguintes componentes: 
 Corpo: lista de objetivos separados por vírgulas, que devem ser 
interpretadas por conjunções; 
 Cabeça: contém o resultado do corpo, inferido a partir dos 
objetivos. 
Um fato contém apenas “cabeça”. A consulta só possui o “corpo”. Uma 
regra contém tanto cabeça quanto corpo. 
Vimos pelo exemplo da regra na Tabela 1 que PROLOG trabalha com 
variáveis. Uma variável é composta de uma cadeia de letras, dígitos e do 
caractere “_”. O caractere “_” sozinho significa uma variável anônima, que é 
utilizada no caso de uma determinada variável não ter importância para o 
processo de dedução de uma solução. O fator chave que diferencia em 
PROLOG uma variável de uma constante é a primeira letra da variável sempre 
estar em maiúsculas (“caixa alta”). Caso esteja em letras minúsculas, o 
elemento é uma constante. Na tabela 1, “joão” e “luiz” estão em letras 
minúsculas, indicando que são constantes, e “X” e “Y” são variáveis. Mais 
alguns exemplos de variáveis: 
X1 
Resultado 
Objeto2 
Lista_Extensa 
_var35 
_344 
 
Um dos ambientes para execução de PROLOG mais utilizados hoje em 
dia é o SWI-PROLOG. Desenvolvido desde 1987, é muito utilizado em 
 
22 
 
pesquisa, educação e também para aplicações comerciais. O software 
SWI-PROLOG é disponibilizado para uso concomitante com outras linguagens 
de programação, tais como C++, C#, Java, Python, etc. 
Após instalado, podemos carregar os programas PROLOG codificados 
em arquivos de texto com o sufixo “.pl”, e executar as consultas diretamente no 
interpretador, conforme a Figura 12. 
Para saber mais... 
O SWI-PROLOGpode ser baixado 
diretamente do site: <http://www.swi-
prolog.org/>, ou por meio do QR Code ao 
lado. Existem versões para diferentes 
sistemas operacionais e plataformas. 
 
Figura 12: Tela do interpretador SWI-PROLOG com exemplo de um programa de cálculo de 
fatorial. 
 
 
SÍNTESE 
Neste capítulo foram estudadas técnicas dentro da linha simbólica de 
pesquisa da IA: os sistemas especialistas e a programação em lógica. Sistemas 
 
23 
 
Especialistas foram desenvolvidos para a resolução de problemas em um 
domínio bem específico, cujo conhecimento é coletado de pessoas 
especialistas em tal domínio. Portanto, os Sistemas Especialistas utilizam 
conhecimento heurístico manipulado por regras Se-Então. Dois SEs bastante 
citados na literatura são o MYCIN, utilizado para a área de diagnóstico de 
doenças infecciosas; e o DENDRAL, para prospecção geológica. Um Sistema 
Especialista é composto de uma base de conhecimento, de um mecanismo de 
inferência e de um quadro negro. A Programação em Lógica, tratada aqui com 
relação à linguagem PROLOG, deriva dos estudos da lógica de primeira ordem. 
O algoritmo é constituído dos componentes de controle e do componente 
lógico. Um programa em lógica é a representação de um problema expresso 
por meio de um conjunto finito de um tipo especial de sentenças lógicas 
denominadas de cláusulas. Programas em PROLOG têm sido utilizados em 
sistemas de apoio à decisão, simulações educacionais, tutoriais inteligentes, 
problemas matemáticos, planejamento e roteirização, resolução de problemas, 
uso em regras de negócio e processamento de linguagem natural. Uma 
cláusula em PROLOG pode ser um fato, uma regra ou uma consulta. Uma 
cláusula pode ser composta de corpo e cabeça. 
 
REFERÊNCIAS 
RUSSEL, S.; NORVIG, P. Inteligência Artificial. Tradução da 2. ed. Rio de 
Janeiro: Campus, 2004. 
BITTENCOURT, G. Inteligência Artificial – Ferramentas e Teorias. 
Florianópolis: Ed. da UFSC, 1998. 
PALAZZO, L. A. M. Introdução a Prolog. Pelotas: Editora UCPel, 1997. 
 
 
 
 
 
 
 
 
INTELIGÊNCIA 
ARTIFICIAL APLICADA 
AULA 5 
 
 
 
 
 
 
 
 
 
 
 
Prof. Luciano Frontino de Medeiros 
 
2 
 
CONVERSA INICIAL 
Nesta aula você estudará sobre as Redes Neurais Artificiais, uma área de 
pesquisa dentro da linha conexionista da Inteligência Artificial. Estudaremos 
sobre a estrutura das RNA dividida em camadas de neurônios, a função de 
ativação e um dos tipos clássicos de RNA, o Perceptron Simples e o Perceptron 
Multicamada. 
CONTEXTUALIZANDO 
Do lado da linha de pesquisa conexionista da IA, temos um dos 
representantes-chave, que são as Redes Neurais Artificiais. De forma análoga 
ao comportamento das células inteligentes dos seres vivos, os neurônios, as 
RNA são capazes de diferenciar padrões quando um conjunto de sinais de 
diversos padrões são apresentados à sua entrada. Diferente das técnicas da 
linha simbólica, as RNA aprendem com o ambiente, a partir de conjuntos de 
amostras representantes dos padrões, de forma bem similar ao que acontece 
nos seres vivos. Em várias atividades em que é necessário proceder uma análise 
de padrões complexos, até difíceis para seres humanos, técnicas de RNA são 
bastante importantes para evidenciar novos conhecimentos. Veremos agora os 
conceitos importantes relacionados às RNA. 
TEMA 1: INTRODUÇÃO A REDES NEURAIS ARTIFICIAIS 
O trabalho em Redes Neurais Artificiais (RNA) tem sido motivado desde 
o começo pelo reconhecimento de que o cérebro humano processa informações 
de uma forma inteiramente diferente de um computador convencional. O cérebro 
é um computador altamente complexo, não linear e paralelo possui a capacidade 
de organizar seus constituintes estruturais, os neurônios, de forma a realizar 
certos processamentos tais como reconhecimento de padrões, percepção e 
controle motor, de forma mais rápida que o mais rápido computador existente 
(HAYKIN, 2004, p. 27). 
 
3 
 
Considere um exemplo da natureza: o sonar de um morcego é um sistema 
ativo de localização por eco. Além de fornecer informações sobre a distância até 
o alvo, o sonar transmite também informação sobre a velocidade relativa do alvo, 
tamanho de várias características do alvo e a elevação do alvo. Toda a complexa 
computação ocorrendo num cérebro do tamanho de uma ameixa! (HAYKIN, 
2004, p. 27). 
Os neurônios são as unidades fundamentais dos tecidos do sistema 
nervoso, incluindo o cérebro. Cada neurônio consiste de um corpo celular, 
também designado como soma, o qual contém um núcleo. Partindo do corpo da 
célula existem um número de filamentos denominados dendritos, e um filamento 
mais longo que é denominado de axônio (Figura 1). Os dendritos ligam-se ao 
redor da célula a outras células e o axônio faz uma conexão mais longa. A estas 
conexões dá-se o nome de sinapses. 
O sinal de uma célula a outra se faz mediante uma complicada reação 
eletroquímica. Substâncias químicas transmissoras são lançadas das sinapses 
e entram pelos dendritos, aumentando ou baixando o potencial elétrico do corpo 
da célula. Quando o potencial chega a um limiar, um pulso elétrico ou potencial 
de ação é mandado pelo axônio. O pulso espalha-se ao longo das conexões 
existentes pelo axônio, eventualmente chegando a outras sinapses e lançando 
transmissores ao corpo de outras células. 
Sinapses que incrementam o potencial de outras células são 
denominadas excitatórias, enquanto que as que decrementam são denominadas 
inibitórias. Os neurônios podem formar novas conexões com outros neurônios, 
e tais mecanismos são por meio dos quais se forma a base para o aprendizado 
do cérebro. 
 
 
 
 
 
4 
 
Figura 1: Ilustração de um neurônio biológico 
 
Fonte: adaptado de Medeiros (2007). 
 
Uma rede neural biológica pode, dessa forma, ser abstraída para simular 
o seu comportamento. Dessa forma, podemos conceituar uma rede neural 
artificial como um processador maciçamente e paralelamente distribuído 
constituído de unidades de processamento simples, que têm a propensão natural 
para armazenar conhecimento experimental e torná-lo disponível para o uso 
(HAYKIN, 2004). 
Uma rede neural artificial tem uma série de propriedades 
(HAYKIN, 2004, p.30): 
Não linearidade: neurônios podem ser lineares ou não lineares, dessa 
forma, permitem aproximações robustas de funções de mapeamento que 
tenham característica não linear. 
Mapeamento Entrada-Saída: A rede aprende a partir de exemplos, 
estabelecendo mapeamento entre os padrões apresentados na entrada com as 
saídas dadas pelos exemplos. 
Adaptabilidade: redes neurais podem ser treinadas e armazenar o 
conhecimento nos pesos sinápticos, podendo se adaptar caso o conjunto de 
amostras utilizado para o treinamento se modifique ao longo do tempo. 
 
5 
 
Resposta a Evidências: uma rede neural pode perfazer uma tarefa de 
seleção de um padrão, mas também informar sobre o grau de confiança ou 
crença referente ao padrão escolhido. 
Informação Contextual: o conhecimento é armazenado na própria 
estrutura e pela ativação da rede neural. 
Tolerância a falhas: redes que sejam implementadas em hardware são 
tolerantes a falhas, em caso de neurônios ou conexões que possam ser 
danificados, ou mesmo em software utilizando técnicas de poda de redes, que 
reduzem a quantidade de neurônios ou sinapses, mantendo a mesma condição 
de performance. 
Uma rede neural artificial tem a sua construção dependente de alguns 
elementos: 
Número de camadas: as RNA possuem pelo menos uma camada de 
entrada, de onde recebe os sinais ou características das amostras, e uma 
camadade saída que apresenta os padrões ou classes, mapeados para os 
conjuntos de treinamento. Também podem possuir uma ou mais camadas 
ocultas, como no caso do perceptron multicamada e das redes de base radial. 
Quantidade de neurônios por camada: a quantidade de neurônios irá 
depender da natureza do problema sendo abordado. A camada de entrada terá 
tantos neurônios conforme as características das amostras do conjunto de 
treinamento. A camada de saída terá os neurônios referentes às classes a que 
pertencem as amostras do conjunto de treinamento. A camada oculta ou 
escondida pode ter a quantidade de neurônios variável, conforme a 
característica do mapeamento que se deseja. 
Tipo de função de transferência: a função de transferência define a 
ativação do neurônio. Podem ser utilizadas funções discretas (tais como a função 
degrau, utilizada no perceptron a ser explicado adiante) ou funções contínuas 
(como a função sigmoide para o perceptron multicamada). 
Método de treinamento: ao longo dos anos foram desenvolvidos 
diversos métodos ou algoritmos de treinamento. Dentre os métodos mais 
 
6 
 
utilizados está o algoritmo de retropropagação (backpropagation), que utiliza a 
informação do erro na atualização dos pesos. 
As RNA podem aprender de diversas formas: 
Aprendizagem por correção de erros: a informação do erro é utilizada 
para modificar os pesos sinápticos. 
Aprendizagem baseada em memória: um grande número de exemplos 
de entrada e saída são armazenados, e uma amostra é comparada com a sua 
vizinhança para se identificar a classe à qual pertence. 
Aprendizagem hebbiana: com base nos estudos de Hebb, utiliza uma 
regra associativa, que aumenta a força dos pesos positivamente correlacionados 
ou diminui daqueles negativamente correlacionados. 
Aprendizagem competitiva: neste tipo de aprendizagem, os neurônios 
competem entre si, tendo-se um vencedor que estará ativo em um certo instante 
(aprendizagem denominada também de winner-takes-all). 
Aprendizagem de Boltzmann: aprendizagem com características 
estocáticas derivada das ideias da mecânica estatística. Nesse caso, os 
neurônios constituem uma estrutura recorrente e operando de maneira binária, 
controlados por uma função de energia. A atualização dos pesos se dá por 
correlação, operando em duas condições: uma condição presa (os neurônios 
visíveis estão presos a estados específicos) e outra condição livre (todos os 
neurônios podem operar livremente). 
A aprendizagem ainda pode ser caracterizada como supervisionada (em 
que há o feedback que retorna à rede para orientar o treinamento) e não 
supervisionada (a rede aprende de forma auto-organizada). Quanto às tarefas 
que podem ser executadas por uma RNA estão: 
 Associação de padrões; 
 Reconhecimento de padrões; 
 Aproximação de funções; 
 Controle; 
 
7 
 
 Filtragem. 
 
TEMA 2: O PERCEPTRON 
O perceptron foi um dispositivo eletrônico inventado em 1957 por Frank 
Rosenblatt (1928-1971), psicólogo americano, considerado uma espécie de 
"homem da renascença" devido à sua excelência em várias áreas, incluindo 
computação, matemática, neurofisiologia, astronomia e música. O perceptron foi 
construído de acordo com princípios biológicos e que mostrava capacidade de 
aprendizado. Era organizado em três camadas de unidades (ou neurônios): 
unidades sensoriais (S), associativas (A) e geradoras de respostas (R), 
alimentada à frente (Ver figura 2). 
Um dos protótipos construídos por Rosenblatt foi o Mark I. O Mark I era 
um perceptron implementado em hardware com 400 unidades fotosensoras, 
camada de associação de 512 unidades e camada de saída de 8 unidades. 
 
Figura 2: Esboço do perceptron Mark I 
 
 
 
 
8 
 
Figura 3: Arquitetura de um perceptron. As variáveis significam: x – valores de entrada; w – 
valores dos pesos; d – saída intermediária; o – saída ativada 
 
Fonte: adaptado de Medeiros (2007). 
 
Para saber mais... 
Frank Rosenblatt contribuiu para o campo 
das redes neurais de forma significativa com o 
invento do perceptron. Para conhecer um pouco 
mais sobre seu trabalho, acesse o link: 
<http://csis.pace.edu/~ctappert/srd2011/rosenblat
t-contributions.htm>, ou por meio do QR Code 
ao lado. 
 
 
O perceptron obtém os sinais do ambiente por meio das 
entradas, nas quais são apresentados os valores correspondentes aos 
padrões que queremos classificar, por exemplo, valores de pixels de 
imagem ou características de um produto. Na figura 3 o perceptron possui 
5 (cinco) entradas. 
 
9 
 
Fazendo parte da estrutura interna do perceptron, temos os pesos ou 
sinapses. Os pesos assumirão valores tais que, quando aplicarmos um padrão 
na entrada, obteremos uma saída intermediária d. O aprendizado da rede ficará 
armazenado nos pesos e seus valores são obtidos mediante um processo de 
treinamento. O valor w0. é chamado de bias, sendo fixo e entendido como uma 
espécie de ajuste fino, o qual não multiplica com entrada nenhuma. 
A saída intermediária d é calculada mediante o somatório da multiplicação 
entre cada entrada e seu peso. Ou seja, 
d = w1x1 + w2x2 + w3x3 + w4x4 + w5x5 + w0 
 
ou, de forma genérica (com n=5), 
 
Em linguagem de programação (Pascal), poderíamos construir o 
algoritmo a seguir representando este cálculo: 
 
function Soma: double; 
var w, x: array[0..5] of double; 
 d: double; 
 i: integer; 
begin 
... 
// Aqui seriam associados os valores para os vetores w e x 
... 
d := w[0]; 
for i := 1 to 5 do 
 d := d + w[i]*x[i]; 
 Result := d; 
end; 
(1) 
 
10 
 
Após o cálculo da saída intermediária d, precisamos então calcular agora 
a saída ativada o (do inglês output). Como visto na figura 3, a saída ativada o 
depende do resultado da saída intermediária d. Caso o resultado obtido em d for 
maior ou igual a 0 (zero), o será igual a +1(um); se d for menor que 0 (zero), o 
será igual a –1 (menos um). Ou, em forma de código, 
 
TEMA 3: PERCEPTRON MULTICAMADA 
O perceptron multicamada se diferencia do perceptron simples por incluir 
camadas escondidas ou ocultas na RNA. Com a inclusão de camadas ocultas, 
o número de pesos ou sinapses aumenta consideravelmente (Figura 4). 
A consequência disso é a possibilidade de melhorar o mapeamento das entradas 
com as saídas. Um perceptron simples trabalha de forma linear, enquanto que o 
perceptron multicamada tem condições de lidar com conjuntos de treinamento 
cuja separabilidade seja não linear. 
A arquitetura com camadas ocultas requer algoritmos de aprendizagem 
que contemplem a atualização dos pesos relacionados às camadas internas. 
O processo de ativação acontece primeiramente nas camadas ocultas para 
depois chegar até a camada de saída. A retroalimentação do erro também é feita 
nos pesos que conectam a(s) camada(s) oculta(s). 
 
 
function SaidaAtivada(d: double): integer; 
var i: integer; 
begin 
 if d > = 0 then 
 i := 1 
 else 
 i := -1; 
 Result := i; 
end; 
 
11 
 
Figura 4: Representação de uma rede perceptron multicamada (MLP), com uma camada 
oculta, com todos os nós conectados. 
 
A dinâmica do perceptron multicamada envolve o processamento 
de dois tipos de sinais (figura 5) se propagando pela rede 
(HAYKIN, 2004, p. 186-187): 
Sinal funcional: é o sinal apresentado à camada de entrada referente aos 
atributos do vetor de amostras, que propaga-se para a frente na rede, nó por nó, 
ativando os neurônios até a camada de saída. 
Sinal de erro: tem origem em um neurônio da camada de saída, porém 
se propagando para trás na rede, ajustando os valores dos pesos ou sinapses.O algoritmo de retropropagação para o perceptron multicamada envolve 
a seguinte notação constante na Tabela 1. O algoritmo envolve o processo 
chamado de descida de gradiente. Esse processo busca calcular o gradiente 
local do erro (a direção para onde tende a crescer o valor do erro médio 
calculado), utilizando-o para corrigir os pesos sinápticos na direção contrária a 
esse gradiente, em busca do erro mínimo local. 
 
 
12 
 
Figura 5: Representação do sinal funcional, que se propaga à frente, e do sinal de erro, que 
retropropaga na rede. 
 
 
Tabela 1: Descrição das variáveis nas fórmulas correspondentes ao algoritmo de 
retropropagação do percetpron multicamada, relacionadas ao grafo de propagação do sinal na 
figura 22 
Variável Descrição 
i, j, k Índices para os neurônios. Usando a notação em que o sinal 
funcional se propaga da esquerda para a direita, O neurônio i está 
numa camada mais à esquerda; o índice j. 
E Soma dos erros quadráticos. 
ej Sinal de erro na saída do neurônio j. 
dj Sinal desejado no neurônio de saída j. 
yj Sinal funcional que aparece na saída do neurônio j. 
 
13 
 
xj Sinal da amostra apresentada no neurônio j da camada de 
entrada. 
wji Peso sináptico conectando a entrada do neurônio i à saída do 
neurônio j. 
Δwji Correção aplicada ao peso sináptico que conecta a entrada do 
neurônio i à saída do neurônio j. 
vj Soma ponderada de todas as entradas sinápticas no neurônio j 
acrescida do bias. 
δj Gradiente local para o neurônio j. 
f Função de ativação. 
η Taxa de aprendizado. 
α Taxa de momentum 
 
De forma geral, as etapas referentes ao algoritmo de retropropagação são 
descritas a seguir: 
1. Construa uma rede MLP totalmente conectada, com N neurônios na camada 
de entrada, M neurônios na camada de saída e P neurônios na camada 
oculta, conforme as características do problema. 
 
2. Inicialize os pesos com valores aleatórios e os pesos w0 (bias) com 
valor +1. 
 
 
3. Escolha uma amostra na forma de um par entrada-saída desejada 
(xi, di). Assim, tal como na Figura 6, na camada de entrada, os valores do 
neurônio yi serão iguais aos xi. 
 
 
14 
 
4. Propague o sinal dos neurônios da camada de entrada yi para a camada 
intermediária por meio do somatório ponderado pelos pesos sinátpicos wji 
para calcular vj (também chamado de campo local induzido) e utilize a função 
de ativação para calcular os valores de entrada yj para a camada 
intermediária: 



N
i
ijij ywv
0 e )( jj vfy  
Uma função bastante utilizada para perceptrons multicamada é a função 
sigmoide. A função sigmoide tem um comportamento mais “suave” do que a 
função degrau, utilizada no exemplo do perceptron simples. Enquanto que a 
função degrau possui apenas duas opções (+1 ou -1), a função sigmoide 
calcula valores infinitos dependendo do argumento da função. Assim, 
enquanto que a função degrau é uma função discreta, a função sigmoide é 
considerada uma função contínua. Veja o gráfico desta função na Figura 7. 
A fórmula da função sigmoide1 é 
0,
1
1
)( 



a
e
vf
jav
j
 
 
5. Propague o sinal dos neurônios da camada intermediária yj para a camada 
de saída por meio do somatório ponderado pelos pesos sinátpicos wkj para 
calcular o campo local induzido vk, utilizando a função sigmoide para calcular 
os valores de entrada yk para a camada de saída: 
 



P
j
jkjk ywv
0 e )( kk vfy  
 
 
1 O símbolo e utilizado é o número de Euler (aproximadamente 2,71828...). Não onfundir com o 
valor do erro ej. A variável a regula a inflexão da curva sigmoide, sendo comum adotar a=1. 
 
15 
 
6. Calcule o gradiente local para os neurônios da camada de saída δk de 
acordo com a fórmula (no caso de se utilizar a função sigmoide) 
  kkkkk yyday  1 
 
7. Calcule o gradiente local para os neurônios da camada intermediária δj 
conforme a fórmula: 
 


M
k
kjkjjj wyay
0
1 
 
 
 
8. Atualize o valor dos pesos conforme os valores dos gradientes locais 
calculados para a camada de saída e a camada intermediária. O índice 
sobrescrito t+1 indica o próximo valor das atualizações dos pesos, sendo o 
índice sobrescrito t o valor atual. 
kk
t
kj
t
kj yww   1 
e 
jj
t
ji
t
ji yww   1 
O valor de atualização compõe-se de duas partes: uma referente ao valor 
atual do peso, multiplicado pela taxa de momento α; e outra referente à 
modificação calculada pelo gradiente local, multiplicada pela taxa de 
aprendizagem η. Os pesos sinápticos devem ser atualizados então: 
t
kj
t
kj
t
kj www 
1
 
e 
t
ji
t
ji
t
ji www 
1
 
 
 
16 
 
9. Retorne ao passo 3 e escolha outro par entrada-saída. Quando todos os 
pares forem apresentados à rede, significa que uma época de treinamento 
foi alcançada. Dessa forma, refaz-se o processo para várias épocas até que 
o valor global de erro alcance um valor que possibilite a classificação ótima 
pela rede MLP. O erro global pode ser calculado pela fórmula seguinte, em 
que C indica o somatório para todas as amostras apresentadas ao 
perceptron multicamada: 
  
C C
kkk ydeE
22 )(
2
1
2
1
 
 
Figura 6: Representação da propagação do sinal funcional à frente na rede MLP, a partir da 
entrada, passando pela ativação até chegar à camada de saída 
 
Fonte: adaptado de Haykin (2004, p. 192). 
 
Este processo do algoritmo de retropropagação foi descrito utilizando uma 
camada intermediária, mas pode ser estendido para o caso de a rede ter mais 
camadas ocultas. 
 
 
 
17 
 
Figura 7: Gráfico da função de ativação sigmoide, que permite obter a ativação dos neurônios 
da rede MLP de forma suave 
 
 
Normalização 
A utilização do perceptron multicamada para vários tipos problemas 
requer que os valores dos neurônios das camadas de entrada e saída sejam 
modificados para trabalhar numa faixa específica, que facilite a codificação do 
algoritmo e evite possíveis erros relacionados com overflow de variáveis. 
Utilizando um exemplo de segmentação relativo a investidores de um 
banco, a Figura 8 mostra algumas variáveis que podem ser utilizadas para 
segmentar os clientes. Pode-se notar que elas têm condições de assumir valores 
distintos. Enquanto um valor para o prazo de investimento chega a ter um valor 
máximo de 35, a faixa para a variável renda pode chegar a 30000. Quando 
alimentamos a camada de entrada da rede MLP, precisamos fazer com que a 
rede entenda tais valores como se pertencessem a uma faixa específica. Isso é 
conseguido a partir da normalização. 
 
 
 
18 
 
Figura 8: Variáveis utilizadas no exemplo de segmentação de clientes investidores, mostrando 
a variabilidade das faixas para as diferentes variáveis 
 
Podemos normalizar os valores para uma faixa específica, por exemplo, 
[0,1]. Ou seja, os neurônios assumirão apenas valores dentro dessa faixa. 
É necessário então transformar os valores de entradas para que fiquem dentro 
dessa faixa. A Figura 9 mostra como a variável renda pode ser normalizada. O 
valor mínimo que a variável pode assumir é zero; então, o neurônio assumirá o 
valor “0”. O valor máximo que ele poderá assumir será de 30000; então, este 
valor corresponderá ao valor do neurônio “1”. Para esse tipo de normalização, 
podemos calcular por regra de três simples. No caso de um valor qualquer, 
digamos, 5000, o cálculo mostra que na proporção da faixa normalizada [0,1], ovalor correspondente será de 0,16. Na Figura 10 temos mais exemplos, 
que já induzem como expressarmos a fórmula para se utilizar dentro do algoritmo 
de treinamento. 
 
 
 
 
 
 
19 
 
Figura 9: Ilustração da normalização para a variável renda. Os valores mínimos e máximos são 
utilizados numa regra de três para obter os valores normalizados na faixa [0,1] 
 Diagrama Cálculo 
Exemplo 
 
Pega-se o valor atual da renda 
(digamos, 5000) 
Faz-se a diferença 5000 – 0 (0 é o 
valor mínimo) = 5000 
Divide-se pela diferença 30000 – 0 
(máximo – mínimo) = 30000 
5000 / 30000 = 0,16 
Mínimo 
 
Quando o valor é o valor mínimo: 0 – 
0 = 0 
Divide-se pela diferença (máximo – 
mínimo) = 30000 – 0 = 30000 
Calculando: 0 / 30000 = 0 
 
Máximo 
 
Quando o valor é o valor mínimo: 
30000 – 0 = 30000 
Divide-se pela diferença (máximo – 
mínimo) = 30000 – 0 = 30000 
Calculando: 30000 / 30000 = 1 
 
 
 
 
20 
 
Figura 10: Mais exemplos mostrando o valor original da variável renda, e o valor normalizado 
para ser alimentado à rede neural 
 
A fórmula que poderemos utilizar para a normalização será: 
minmax
min
xx
xx
x entradaonormalizad



 
 
SÍNTESE 
Neste capítulo foi vista uma introdução ao estudo das Redes Neurais 
Artificiais, as quais fazem parte da linha de pesquisa conexionista. A base para 
o estudo é a forma como os neurônios se conectam em uma rede neural, 
trocando informações entre si para a resolução de algum problema tal como 
reconhecimento de padrões. Uma rede neural tem as propriedades de 
não linearidade, mapeamento entrada-saída, adaptabilidade, resposta a 
evidências e tolerância a falhas. Uma RNA depende da quantidade de camadas 
de entrada, ocultas ou de saída, da quantidade de neurônios por camada, do tipo 
de função de transferência e do método de treinamento. 
RNAs podem aprender de diversas formas: por correção de erros, baseada em 
memória, aprendizagem hebbiana, aprendizagem competitiva ou aprendizagem 
 
21 
 
de Boltzmann. A aprendizagem pode ser supervisionada ou não supervisionada. 
RNAs podem executar diferentes tarefas tais como reconhecimento, associação 
de padrões, aproximação de funções, controle e filtragem. O perceptron é um 
modelo clássico de RNA. 
O treinamento de um perceptron exige a definição de uma taxa de 
aprendizagem. O algoritmo básico para treinamento de um perceptron consiste 
em calcular o erro e propagar o erro para trás na rede de forma a atualizar os 
valores das sinapses. Se um perceptron precisa aprender a classificar 
corretamente duas classes, se tais classes forem separáveis linearmente, o 
perceptron sempre aprenderá a classificar corretamente. O valor ótimo dos 
pesos é aquele que irá minimizar o erro global. O problema do XOR demonstrou 
restrições do perceptron simples original estudado por Rosenblatt, que poderia 
ser resolvido adicionando-se camadas ocultas e tornando-o um perceptron 
multicamadas. O algoritmo de treinamento de um perceptron multicamadas é 
denominado algoritmo de retropropagação. Geralmente 
adota-se como função de transferência para um perceptron multicamadas a 
função sigmoide. A normalização é um passo importante adotado antes de se 
fazer o treinamento de uma RNA. 
 
 
 
REFERÊNCIAS 
RUSSEL, S.; NORVIG, P. Inteligência Artificial. Tradução da 2. ed. Rio de 
Janeiro: Campus, 2004. 
MEDEIROS, L. F. Redes Neurais em Delphi. 2. ed. Florianópolis: Visualbooks, 
2007. 
HAYKIN, S. Redes Neurais: Princípios e prática. Porto Alegre, Bookman, 2001. 
 
 
 
 
 
 
 
 
 
INTELIGÊNCIA ARTIFICIAL 
APLICADA 
AULA 6 
 
 
 
 
 
 
 
 
 
Prof. Luciano Frontino de Medeiros 
 
2 
 
CONVERSA INICIAL 
Nesta aula você estudará sobre os Algoritmos Genéticos, os conceitos, 
características, etapas do algoritmo, bem como o exemplo de aplicação de AG, 
mostrando em detalhes a sua dinâmica, e a aplicação desse exemplo utilizando 
linguagem de programação. 
 
CONTEXTUALIZANDO 
A teoria da evolução de Darwin foi um dos conceitos que revolucionaram 
a ciência no século XIX. Em meados do século XX, a ideia de evolução permitiu 
a concepção de sistemas que se modificam de acordo com um conjunto de 
operações específicas, na busca da solução de um problema. 
Em vez de solucionar um problema de busca por meio de procedimentos 
analíticos, pode-se começar com uma solução parcial e, ao longo de várias 
iterações, fazer evoluir essa solução até chegar a uma boa o bastante. Um dos 
representantes da linha de pesquisa evolucionária são os Algoritmos Genéticos, 
que permitem a abordagem de um problema, considerando a evolução de 
soluções parciais. Geralmente são aplicados em problemas dos quais não se 
tem muito, ou mesmo nenhum conhecimento. Estudaremos agora alguns dos 
conceitos importantes dessa técnica relevante de IA. 
 
TEMA 1: INTRODUÇÃO A ALGORITMOS GENÉTICOS 
As pesquisas de IA, dentro da linha evolucionária, baseiam-se na 
observação de mecanismos evolutivos da natureza, incluindo auto-organização 
e comportamento adaptativo. Os modelos mais conhecidos de algoritmos 
evolucionários são os algoritmos genéticos, a programação genética e as 
estratégias evolucionárias. 
Um algoritmo genético (AG) faz parte da classe de algoritmos de busca. 
O algoritmo procura uma solução dentro de um espaço para um problema de 
otimização. Assim, os algoritmos genéticos podem ser uma boa opção para 
 
3 
 
efetuar a busca em problemas considerados intratáveis. A aplicação de 
algoritmos genéticos se faz em várias áreas, tais como a arquitetura de circuitos 
eletrônicos, planejamento e roteirização, programação de games, previsão do 
tempo e ainda descoberta de identidades matemáticas (RUSSEL; NORVIG, 
2004). 
Podemos afirmar que um AG é considerado um algoritmo de busca em 
feixe estocástica, em que os estados sucessores são criados a partir da 
combinação de dois (ou mais) estados “pais”, em vez de serem criados a partir 
da variação de um único estado. Temos assim uma analogia com a seleção 
natural proveniente da biologia. A busca em feixe se dá pelo uso de uma 
população inicial gerada aleatoriamente, que evolui ao longo das “gerações” 
(iterações do algoritmo). A produção de uma nova população é 
avaliada por uma “função objetivo”, ou “função de fitness”. Essa função 
retorna à nova população, priorizando os estados melhores 
(RUSSEL; NORVIG, 2004, p. 115). 
Dos principais fatores que têm feito dos AG uma técnica de busca 
bem-sucedida e utilizada, estão (AZEVEDO, 2000, p. 35): 
 Possui operacionalização simples; 
 Baixa dificuldade de implementação; 
 Apresenta alta eficácia com relação ao processo de busca na 
região onde provavelmente se encontra o valor máximo global; 
 Útil quando se tem pouco ou mesmo nenhum conhecimento do 
problema, ou ainda quando tal conhecimento é impreciso. 
Pelas suas características, os AGs fazem parte dos métodos 
probabilísticos de busca e otimização. Os AGs utilizam o conceito de 
probabilidade, mas não são considerados simples buscas aleatórias. 
Ao contrário, eles direcionam a busca para regiões onde é mais provável 
 
4 
 
encontrar uma solução ótima. Diferente das técnicas de busca convencionais, as 
principais diferenças residem em (AZEVEDO, 2000, p. 37): 
 “A busca da melhor solução é feita sobre uma população de pontos 
e não sobre um único ponto (busca em feixe)”; 
 “Os AGs perfazem uma busca cega, sendo a única exigência o 
conhecimento da função objetivo de cada indivíduo, não sendo necessária 
nenhuma informação adicional”; “Os AGs usam operadores estocásticos ou probabilísticos e não 
regras determinísticas na direção de uma busca altamente exploratória e 
estruturada; as informações das gerações anteriores são acumuladas, 
auxiliando a direcionar estas buscas”. 
De forma geral, os passos para a execução de um AG estão descritos no 
Quadro 1. 
 
Quadro 1: Passos genéricos para o Algoritmo Genético 
1. Gera-se aleatoriamente uma população de candidatos a solução do 
problema. 
2. Enquanto não satisfaz as condições de terminação (cada iteração e 
geração): 
 (a) Gera-se uma nova população inicialmente vazia. 
 (b) Enquanto a nova população não estiver completa: 
 i. Executa a seleção de dois indivíduos aleatoriamente da 
população atual, dando preferência na seleção àqueles indivíduos que possuem 
maior fitness. 
 ii. Executa o crossover dos dois indivíduos, conforme um 
ponto de corte, para obter dois novos indivíduos. 
 
5 
 
 (c) Concede a cada membro da nova população a chance da 
operação de mutação. 
 (d) Substitui a população atual com a nova população. 
3. Escolhe o indivíduo da população com a melhor avaliação de fitness 
para ser a solução do problema. 
Fonte: adaptado de GOMEZ (2005). 
 
População é o conjunto de candidatos a soluções do problema em 
questão. Por meio das sucessivas gerações, novos candidatos são gerados na 
população, ao passo que outros desaparecem, ou seja, são descartados da 
população. Uma solução na população é denominada indivíduo. A adaptação 
ou adequação (fitness), relacionada a um indivíduo, significa a qualidade dessa 
medida representada por esse indivíduo. “Quanto melhor a solução, maior será 
a sua adaptação. É claro que isso depende das características do problema a 
ser resolvido” (GOMEZ, 2005). 
Os indivíduos que fazem parte de um AG precisam de uma codificação 
que o simbolize no espaço possível de indivíduos que caracterizam o problema. 
Essa codificação é feita utilizando-se cromossomos. 
Um cromossomo é a tradução das características do indivíduo no 
alfabeto utilizado pelo AG. Podemos concluir que um cromossomo é uma 
sequência de bits, sendo constituídos por “genes” que se referem a cada bit 
(LINDEN, 2012, p. 65). Os algoritmos geralmente utilizam como alfabeto a 
codificação binária (0’s e 1’s) para sua representação. Um cromossomo terá 
também um comprimento fixo de bits ou genes. 
Os operadores mais comuns utilizados nos AG para criar os novos 
indivíduos através das gerações são: 
 Seleção; 
 
6 
 
 Cruzamento ou crossover; 
 Mutação. 
O operador de seleção é comparável ao que encontramos na natureza 
sobre a lei da seleção natural, relativo à sobrevivência daqueles que melhor se 
adaptam ao ambiente. Os indivíduos mais adaptados (ou seja, aqueles que 
apresentam melhor fitness) são selecionados para gerarem a descendência. 
O operador de seleção utiliza um critério de maior probabilidade de cruzamento, 
dando prioridade para aqueles que possuem maior fitness. (GOMEZ, 2005). 
Um dos métodos mais utilizados para perfazer a seleção é o método da 
roleta viciada ou roleta ponderada. Esse método dá mais probabilidade para 
que um indivíduo de maior fitness seja escolhido em contrapartida a outro 
elemento que tenha menor fitness. Isso não quer dizer que os indivíduos que 
possuam menor fitness não passem para a próxima geração, mas que a 
probabilidade de fazerem parte dessa nova geração é reduzida. 
O crossover ou cruzamento ocorre pela mistura de duas soluções ou 
indivíduos, com o objetivo de criar dois novos indivíduos. Esse cruzamento 
tende a formar novos indivíduos, que possuem características dos “pais”, e que 
têm a possibilidade de atender melhor o fitness. O crossover atua considerando 
dois indivíduos pais, assumindo um ponto de corte em seus cromossomos e 
intercalando as partes, resultando novos indivíduos. AGs podem ter pontos de 
corte fixos ou aleatórios ao longo das gerações. 
Durante cada geração, existe uma pequena chance de que um indivíduo 
dentro da população sofra uma mutação, que vai mudar a característica do 
indivíduo levemente. A mutação embute no AG uma característica totalmente 
aleatória. Conforme uma taxa especificada no algoritmo, alguns genes dentro 
dos cromossomos são escolhidos de forma randômica e alterados para outros 
valores permitidos pelo alfabeto do cromossomo. 
Uma variável relevante para o funcionamento do AG é o tamanho da 
população. O aumento dos indivíduos em uma população permitirá o alcance 
de um número maior de soluções possíveis, implicando assim na variabilidade 
 
7 
 
de alternativas oferecidas pelo AG. Isso permitirá que as melhores soluções, que 
estejam próximas de uma solução ótima (se esta existir) sejam criadas. Portanto, 
o tamanho da população deve ser grande, levando-se em conta as restrições 
físicas (GOMEZ, 2005). O que limita o tamanho da população é o tempo que vai 
demorar o AG na sua execução, e a quantidade de memória para guardar a 
população. 
Qual a melhor forma de terminar a execução do AG? A abordagem mais 
simples é rodar o algoritmo de busca por um número fixo de gerações – quanto 
mais gerações, melhor. Outra abordagem é encerrar o algoritmo se, depois de 
passadas algumas gerações, não se obtiver uma melhora na adaptação do 
melhor indivíduo da população. Ou seja, a variação dos melhores indivíduos 
obtidos para os que são criados novamente é mínima. Dessa forma, adotar um 
limiar de variação pode reduzir o número de gerações na execução de um AG. 
 
TEMA 2: EXEMPLO DE APLICAÇÃO DE AG 
Bons exemplos para entender a execução de um AG são aqueles nos 
quais se conhece qual a solução ótima ou ideal. Problemas matemáticos que 
possuem métodos determinísticos de resolução com poucas variáveis são 
perfeitos para o entendimento de um AG. Entretanto, é importante ressaltar 
que a maioria dos problemas reais contém uma diversidade muito grande 
de variáveis e são intratáveis, cenário no qual o uso de AG se faz 
realmente robusto. 
O exemplo de otimização que utilizaremos será encontrar o máximo de 
uma equação quadrática de duas variáveis. A solução para este problema pode 
ser encontrada facilmente pelo cálculo diferencial da matemática. Vamos utilizar 
a seguinte equação: 
22 )2()3(2)(  yxxf
 
 
8 
 
Sabemos de antemão que o valor máximo dessa equação se encontra no 
ponto x=3 e y=2, com f(x)=2. Podemos ver na Figura 1 o gráfico dessa equação, 
mostrando visualmente o ponto de máximo que se pode obter. 
Figura 1: Representação no plano espacial da equação 
22 )2()3(2)(  yxxf
, com o 
ponto de máximo em x=3 e y=2, com f(x)=2. 
 
Detalharemos então o exemplo nos passos seguintes: 
a) Criaremos um AG que será capaz de obter esse ponto de máximo como 
solução, sendo a expressão em f(x) a própria função objetivo ou 
fitness. 
b) Precisamos definir o cromossomo com o qual iremos gerar os 
indivíduos para o AG. Para definir este cromossomo, devemos 
determinar qual a faixa de valores que as variáveis x e y irão assumir. 
Vamos supor que as variáveis x e y devam ficar no intervalo [0,7]. Ou 
seja, o valor mínimo que elas podem assumir é 0 e o máximo será 7. 
Podemos utilizar a codificação binária para representar os 
cromossomos. Lembrando a conversão de números decimais para 
binários: 
 
 
9 
 
Decimal Binário 
0 000 
1 001 
2 010 
3 011 
4 100 
5 101 
6 110 
7 111 
 
Notamos que, naturalmente, a conversão de decimal para binário nos dá 
o que precisaremos. Vamos assumir agora que, para cada variável, teremos um 
comprimento de 3 genes. Com as duas variáveis, teremos, portanto, um 
cromossomo, composto de dois aleloscom um total de 6 genes. Por exemplo, 
o cromossomo para x=1 (001b conforme a tabela) e y=5 (101b) será: 
001101 
c) Após a definição do cromossomo, vamos supor uma população inicial 
de 10 indivíduos. Assim, cada indivíduo é uma combinação de dois 
valores: x e y. Podemos começar com a seguinte população escolhida 
aleatoriamente: 
x y Cromossomo 
3 6 011110 
6 4 110100 
3 5 011101 
7 0 111000 
3 7 011111 
1 6 001110 
1 2 001010 
5 4 101100 
6 1 110001 
 
10 
 
4 2 100010 
 
d) Avaliaremos os indivíduos gerados aleatoriamente a partir da função 
objetivo. Adicionaremos mais uma coluna na tabela anterior, indicando 
o valor obtido pela função objetivo, substituindo os valores de x e y: 
x y Cromossomo (x,y) 
3 6 011110 8 
6 4 110100 15 
3 5 011101 3 
7 0 111000 32 
3 7 011111 5 
1 6 001110 8 
1 2 001010 0 
5 4 101100 8 
6 1 110001 18 
4 2 100010 3 
 
e) O operador de seleção deve ser executado. Assim, organizaremos em 
ordem descendente os indivíduos, de acordo com a função de fitness. 
Notamos também que nessa primeira população, o indivíduo com 
fitness 0 (zero) é o mais próximo da solução para o problema: 
x y Cromossomo (x,y) 
1 2 001010 0 
3 5 011101 3 
4 2 100010 3 
3 6 011110 8 
1 6 001110 8 
5 4 101100 8 
6 4 110100 15 
3 7 011111 15 
 
11 
 
6 1 110001 18 
7 0 111000 32 
 
f) Escolhemos agora um ponto de corte da população. Adotaremos como 
critério a seleção dos primeiros quatro indivíduos para a próxima 
população a ser gerada. 
x y Cromossomo (x,y) 
1 2 001010 0 
3 5 011101 3 
4 2 100010 3 
3 6 011110 8 
1 6 001110 8 
5 4 101100 8 
6 4 110100 15 
3 7 011111 15 
6 1 110001 18 
7 0 111000 32 
 
g) Simularemos agora o método da roleta viciada, fazendo com que o 
primeiro indivíduo da lista seja escolhido para gerar 4 indivíduos para a 
nova população; o segundo 3 indivíduos; o terceiro 2 indivíduos e o 
quarto 1 indivíduo (veja a coluna “ponderação”). Assim, a nova 
população terá também 10 indivíduos. No passo de cruzamento 
(crossover), escolhemos aleatoriamente um ponto de corte (no caso, o 
quarto gene). Os cromossomos ficam, então, divididos para a execução 
do crossover (com os genes ilustrado em duas cores): 
x y Cromossomo (x,y) Ponderação 
1 2 001010 0 4 
3 5 011101 3 3 
4 2 100010 3 2 
 
12 
 
3 6 011110 8 1 
 
h) O próximo passo gera a nova população, sendo cada novo indivíduo 
combinado a partir de dois indivíduos escolhidos aleatoriamente. Note 
que só preencheremos a coluna referente aos cromossomos: 
x y Cromossomo (x,y) 
 001001 
 001001 
 001010 
 001010 
 011110 
 011110 
 011101 
 100010 
 100010 
 011110 
 
i) Agora, executaremos o operador mutação. Vamos estipular uma taxa 
de mutação de 1 gene para cada 12 genes do total da população. Como 
temos 60 genes ao total, podemos modificar aleatoriamente 5 genes 
nos indivíduos da população gerada pelo crossover (genes alterados 
na cor verde). Assim: 
x y Cromossomo (x,y) 
 001011 
 001001 
 011010 
 001010 
 011110 
 011111 
 011101 
 101010 
 
13 
 
 100010 
 011010 
 
j) O próximo passo é decodificar o cromossomo na representação binária 
para os valores das variáveis novamente: 
x y Cromossomo (x,y) 
1 3 001011 
1 1 001001 
3 2 011010 
1 2 001010 
3 6 011110 
3 7 011111 
3 5 011101 
5 2 101010 
4 2 100010 
3 2 011010 
 
k) Finalmente, avaliamos a função objetivo para estes novos valores 
obtidos: 
x y Cromossomo (x,y) 
1 3 001011 1 
1 1 001001 3 
3 2 011010 0 
1 2 001010 0 
3 6 011110 8 
3 7 011111 15 
3 5 011101 3 
5 2 101010 8 
4 2 100010 3 
3 2 011010 0 
 
 
14 
 
Temos assim uma nova população. Podemos notar que nesta geração, o 
valor máximo obtido foi 1, relativo ao ponto x=1 e y=3. Para as próximas 
gerações, o algoritmo genético deve ser executado a partir do passo e), 
continuando até obter o valor máximo da função objetivo considerada. 
Esse exemplo demonstra a dinâmica do AG de uma forma simplificada, 
porém permitindo visualizar a aplicação dos operadores de seleção, cruzamento 
e mutação. A faixa de valores foi tratada com números inteiros, mas poderíamos 
adotar números reais. Por exemplo, um cromossomo com tamanho total 30 (15 
bits para cada variável), com o alfabeto binário, os pontos tomados ao acaso 
x=3,07 e y=2,13, teriam a seguinte representação codificada em binário para o 
cromossomo: 
100010000111010110001001100100 
Os 15 primeiros bits se referem ao valor de x e os 15 últimos ao 
valor de y. Ao avaliarmos pela função de fitness esses valores de x e y, obtemos 
o valor de f(x) = 1,9769. 
 
TEMA 3: AG EM JAVA 
Para a abordagem desse mesmo problema, utilizando linguagem de 
programação, utilizaremos a biblioteca Java API for Genetic Algorithms (JAGA). 
Essa biblioteca consiste em uma série de classes para o uso em diversos tipos 
de problemas. Para exemplos que lidem com aspectos comuns dos AG, 
podemos criar uma classe de exemplo com o problema em questão. Outra classe 
deve ser criada para definir a função objetivo. 
 
15 
 
Para saber mais... 
A biblioteca JAGA está disponível para download neste 
endereço: <http://jaga-java-api-for-genetic-
algorithms.soft112.com/download.html>, ou por meio do 
QR Code ao lado. 
 
 
Na Figura 2, a seguir, temos a classe Example1.java, contendo o exemplo 
da maximização da função objetivo anterior. O código está comentado, 
facilitando o entendimento. O tamanho da população foi definido em 40 
indivíduos, a taxa de crossover em 90%, a taxa de mutação em 2%, executando 
10000 gerações. Os indivíduos utilizam duas variáveis, com precisão de duas 
casas decimais, operando na faixa [-6,6], codificados com 30 bits (15 para 
cada variável). 
Figura 2: Código da classe Example1.java, mostrando a configuração do problema de 
maximização da função objetivo do exemplo anterior 
public class Example1 { 
 
 public Example1() { 
 } 
 
 public void exec() { 
 // Define os parâmetros para o AG 
 GAParameterSet params = new 
DefaultParameterSet(); 
 params.setPopulationSize(40); 
 params.setFitnessEvaluationAlgorithm(new 
Example1Fitness()); 
 
16 
 
 
 // Inclui a reprodução da nova população com 
crossover e mutação 
 CombinedReproductionAlgorithm repAlg = new 
CombinedReproductionAlgorithm(); 
 repAlg.insertReproductionAlgorithm(0, new 
SimpleBinaryXOver(0.9)); 
 repAlg.insertReproductionAlgorithm(1, new 
SimpleBinaryMutation(0.02)); 
 params.setReproductionAlgorithm(repAlg); 
 
 // Define o método da roleta viciada 
 params.setSelectionAlgorithm(new 
RouletteWheelSelection(-10E10)); 
 // Número máximo de gerações 
 params.setMaxGenerationNumber(10000); 
 // Define as variáveis por indivíduo, a precisão decimal 
e o tamanho do cromossomo 
 NDecimalsIndividualSimpleFactory fact = new 
NDecimalsIndividualSimpleFactory(2, 2, 15); 
 fact.setConstraint(0, new RangeConstraint(-6, 6)); 
 fact.setConstraint(1, new RangeConstraint(-6, 6)); 
 params.setIndividualsFactory(fact); 
 
 // Constrói o AG 
 ReusableSimpleGA ga = new 
ReusableSimpleGA(params); 
 // Associa o analisador 
 AnalysisHook hook = new AnalysisHook(System.out, 
false); 
 ga.addHook(hook); 
 
17 
 
 
 final int attempts = 1; 
 
 // Executa o AG 
 GAResult [] allResults = new GAResult[attempts]; 
 for (int i = 0; i < attempts; i++) { 
 hook.reset(); 
 GAResult result= ((ReusableSimpleGA) 
ga).exec(); 
 allResults[i] = result; 
 } 
 System.out.println("\nALL DONE.\n"); 
 for (int i = 0; i < attempts; i++) { 
 System.out.println("Result " + i + " is: " + 
allResults[i]); 
 } 
 
 } 
 
 public static void main(String[] unusedArgs) { 
 // Chamada da classe para execução do AG 
 Example1 demo = new Example1(); 
 demo.exec(); 
 } 
} 
 
 
 
 
 
18 
 
Figura 3: Classe Example1Fitness.java, que contém o método responsável pela avaliação da 
função objetivo 
public class Example1Fitness implements 
FitnessEvaluationAlgorithm { 
 
 public Example1Fitness() {} 
 
 public Class getApplicableClass() { 
 return NDecimalsIndividual.class; 
 } 
 
 public Fitness evaluateFitness(Individual individual, int age, 
Population population, GAParameterSet params) { 
 NDecimalsIndividual indiv = (NDecimalsIndividual) 
individual; 
 double x = indiv.getDoubleValue(0); 
 double y = indiv.getDoubleValue(1); 
 double f = 2 - (x-3)*(x-3) - (y-2)*(y-2); 
 Fitness fit = new AbsoluteFitness(f); 
 return fit; 
 } 
} 
 
A classe que contém o método que avalia pela função objetivo 
(evaluateFitness) está descrita na Figura 3. Na Figura 4 temos a tela de saída 
de uma execução da classe Example1.java. Pode-se notar que após 10000 
gerações, foi encontrado o melhor resultado para x=2.97 e y=1.94, resultando na 
função objetivo f(x) = 1.9955. Esse melhor resultado foi encontrado na geração 
3779. Na Figura 5 estão listadas algumas execuções deste AG, mostrando as 
diferentes soluções alcançadas. Diferentes parâmetros podem ser testados para 
 
19 
 
verificar se o AG pode encontrar uma solução mais próxima da calculada 
deterministicamente. 
Figura 4: Tela de saída de uma execução da classe Example1.java, mostrando que, após 
10000 gerações, foi encontrado o melhor resultado para os valores x=2.97 e y=1.94, resultando 
a função objetivo f(x) = 1.9955 
 
*** Computation completed. 
 Generations: 10000 
 Fitness evaluations: 400040 
 Run time: 00:04.4099 
 Best result: {size=2; repr=000000110111101000000010100011; 
vals=(2.97, 1.94); fit=1.9955} 
 *** Best fitness (1.9955) was discovered in generation 3779. 
 
ALL DONE. 
 
Result 0 is: {size=2; repr=000000110111101000000010100011; 
vals=(2.97, 1.94); fit=1.9955} 
 
 
 
Figura 5: Dez execuções do AG do exemplo, mostrando as melhores soluções alcançadas em 
cada uma delas 
No. x Y f(x,y) Geração 
1 3.00 1.99 1.9999 2475 
2 2.99 2.01 1.9998 9816 
3 3.14 2.06 1.9768 4019 
4 3.00 1.98 1.9996 6431 
5 3.01 2.00 1.9999 306 
6 3.00 1.99 1.9999 1438 
 
20 
 
7 2.97 2.04 1.9975 1259 
8 3.00 2.01 1.9999 2102 
9 2.99 2.00 1.9999 9165 
10 2.07 2.01 1.9990 2341 
 
 
 
SÍNTESE 
Nesta aula foi estudada uma introdução aos Algoritmos Genéticos, que 
fazem parte da linha de pesquisa evolucionária. Um AG faz parte da classe de 
algoritmos de busca, indo atrás de uma solução dentro de um espaço para um 
problema específico de otimização. 
Os algoritmos genéticos podem ser uma boa opção para efetuar a busca 
em problemas considerados intratáveis. A busca em feixe estocástico se deve 
ao uso de uma população inicial gerada aleatoriamente, que evolui ao longo das 
iterações do algoritmo. A produção de uma nova população é avaliada por uma 
função objetivo ou de fitness. AG é uma técnica bem-sucedida, simples de 
operar, de fácil implementação, eficaz na busca da região onde provavelmente 
se encontra o máximo global e aplicável em situações em que se tem pouco ou 
nenhum conhecimento do modelo ou, ainda, esse é impreciso. Um algoritmo 
genético possui como principais operadores a seleção, o cruzamento ou 
crossover e a mutação. Um indivíduo que é uma solução em um AG é codificado 
por meio de um cromossomo, conforme o alfabeto utilizado pelo AG. 
 
21 
 
REFERÊNCIAS 
RUSSEL, S.; NORVIG, P. Inteligência Artificial. Tradução da 2. ed. Rio de 
Janeiro: Campus, 2004. 
AZEVEDO, F. M.; BRASIL, L. M.; OLIVEIRA, R. C. L. Redes Neurais com 
Aplicações em Controle e em Sistemas Especialistas. Florianópolis: 
Visualbooks, 2000. 
LINDEN, R. Algoritmos Genéticos. Rio de Janeiro: Ciência Moderna, 2012. 
HAYKIN, S. Redes Neurais: Princípios e prática. Porto Alegre, Bookman, 2001. 
KOZA, J. Genetic Programming. Boston-MA: MIT Press, 1992. 
GOMEZ, L. A. Uma Introdução aos Algoritmos Genéticos. Computação 
Evolutiva e Engenharia do Conhecimento, 2005. Disponível em: 
<http://www.labeee.ufsc.br/~luis/ga/GA-INTRO.pdf>. Acesso em: 01/04/2017.

Mais conteúdos dessa disciplina