Fundamentos da IA e Agentes Inteligentes

por Frank de Alcantara em 16/07/2026

Fundamentos da IA e Agentes Inteligentes

Nesta série, a curiosa leitora irá construir, tijolo por tijolo, os alicerces que sustentam toda inteligência artificial aplicada e que estão ajudando a revolucionar a civilização. A base de toda a tecnologia que, nos últimos 30 anos. Partindo do agente que apenas reage ao mundo até a rede neural que aprende com ele, passando por busca, evolução, lógica e probabilidade. É uma disciplina inteira, e como toda disciplina séria, ela começa não com código, mas com definições.

Índice da Série: Inteligência Artificial Aplicada

  • 1. Fundamentos da IA e Agentes Inteligentes (Você está aqui)

Uma boa ideia, em paralelo com essa série, é ler a Sociedade da Mente de Marvin Minsky.

Começar por definições tem um custo: a primeira aula sempre parece a menos empolgante. Mas é, sem dúvidas, a mais importante. Sem uma definição precisa de inteligencia e inteligente, qualquer discussão sobre inteligência artificial vira uma disputa de intuições e opiniões.

Opiniões e intuições não compilam. Nem pegam a cerveja na geladeira.

O que faremos aqui é trocar a pergunta filosófica as máquinas podem pensar?, que Alan Turing considerou “sem sentido demais para merecer discussão”1, por uma pergunta de engenharia: como construir um sistema que faça a coisa certa?

A palavra certa é a palavra mais importante da nossa principal questão. É na palavra certa que mora toda a matemática, e é para ela que a atenta leitora deve voltar a atenção.

O combinado desta série é o mesmo da série Transformers e de quase todos os artigos postados neste blog: todo exemplo de código será escrito em C++23 e verificado no MSVC. Os laboratórios interativos usam JavaScript apenas como mecanismo interno do navegador; ele não aparece como linguagem didática do artigo. Quando a disciplina pedir uma implementação em outro ambiente, a tradução será uma atividade posterior, feita a partir da formulação matemática e da referência C++23. A esforçada leitora poderá usar a linguagem Python e o Google Colaboratory, se assim preferir por sua conta e risco. Também pode usar o Rust, R, Java ou BrainFuck, eu não ligo. Se concordar com este contrato, será bem-vinda e eu fico grato. Se não, obrigado por ler até aqui.

1. O que é inteligência artificial

A expressão artificial intelligence apareceu na proposta escrita em 1955 por John McCarthy, Marvin Minsky, Nathaniel Rochester e Claude Shannon para o encontro de 1956 que ficou conhecido como a Conferência de Dartmouth2. A conjectura era audaciosa: os componentes do aprendizado e da inteligência poderiam ser descritos com precisão suficiente para serem simulados por uma máquina.

Setenta e tantos anos depois, ainda estamos verificando essa conjectura. A cada artigo desta série a curiosa leitora estará exposta a uma verificação parcial.

Também seria um boa ideia ler os livros da série Eu Robô de Isaac Asimov. Este do link, é uma coletânea, mas existem coletâneas de coletâneas de contos, todos valem a pena.

Historicamente, quem tentou definir inteligência artificial acabou em uma de quatro casas que, por força da prática didática, são organizadas por dois eixos. O primeiro eixo pergunta se o objetivo é reproduzir o pensamento ou o comportamento. O segundo pergunta se o padrão de sucesso é a fidelidade ao humano ou a racionalidade, entendida como fazer a coisa certa dado o que se sabe. Cruzando os dois eixos, obtemos quatro programas de pesquisa distintos.

A Figura 1 torna visível o cruzamento: as linhas dizem o que se tenta reproduzir, enquanto as colunas dizem como o sucesso é julgado. O quadrante inferior direito será decisivo para o restante do artigo.

Uma matriz cruza pensamento e comportamento, nas linhas, com fidelidade ao humano e racionalidade, nas colunas. Os quadrantes resultantes são pensar como humano, associado à ciência cognitiva; agir como humano, associado ao teste de Turing; pensar racionalmente, associado às leis do pensamento; e agir racionalmente, associado ao agente racional e destacado como o foco da série. Figura 1: Pensamento e comportamento definem o que se busca reproduzir; fidelidade ao humano e racionalidade definem como o sucesso é julgado. A série adota o quadrante do agente racional, no qual inteligência é avaliada pela qualidade esperada da ação.

Pensar como humano é o problema da ciência cognitiva: modelar os processos mentais de pessoas reais e comparar traços de execução do programa com traços da cognição humana.

Agir como humano é o problema do teste de Turing: uma máquina é considerada inteligente se um interrogador humano, conversando por texto, não consegue distingui-la de uma pessoa.

Pensar racionalmente é o problema das “leis do pensamento”, a tradição da lógica que remonta a Aristóteles, na qual raciocinar corretamente é seguir regras de inferência válidas.

Agir racionalmente é o problema do agente racional: construir sistemas que, dado seu conhecimento, agem de modo a alcançar o melhor resultado esperado.

É nesta última casa que esta série habita, ainda que, vez ou outra, eu arranhe as portas das outras casas.

Os dois problemas centrados no humano tornam a inteligência ainda refém da psicologia: para saber se acertamos, precisaríamos de uma teoria completa da mente humana, o que não temos. O problema das leis do pensamento é rigoroso, mas incompleto, porque nem toda ação certa decorre de uma dedução lógica; às vezes agir bem é reagir rápido, sem tempo para provar teorema algum.

O problema do agente racional é mais geral que os outros três: engloba o raciocínio correto como um dos meios possíveis de agir bem, admite ação sem deliberação quando a deliberação não compensa. E, fator decisivo para nós, é matematicamente tratável. Podemos definir o que é agir racionalmente, medir o desempenho e otimizar. As três coisas que a engenharia exige.

A história da área é uma oscilação entre duas grandes tradições que a persistente leitora verá a seguir e reencontrará ao longo da série.

  1. A tradição simbólica, dominante dos anos 1950 aos anos 1980, representa conhecimento como símbolos e regras e raciocina manipulando-os; desta tradição virão os artigos sobre busca, lógica e sistemas especialistas.

  2. A tradição conexionista, inspirada no cérebro, representa conhecimento como pesos numéricos em redes de unidades simples e aprende ajustando esses pesos; dela virá o artigo sobre redes neurais.

Entre as duas, uma terceira tradição, evolucionária, toma emprestado da biologia a ideia de otimizar por seleção; dela virá o artigo sobre algoritmos genéticos que veremos no futuro. As três compartilham, na base, a mesma matemática, e mostrar isso é um dos objetivos desta série.

Há uma quarta possibilidade, quando pegamos a lógica matemática e usamos seus axiomas e conectivos para tomar decisões. Mas, isso vai ficar para outra série, quando eu terminar de organizar o material de Programação Lógica.

1.1 Um modelo não é, sozinho, um agente

Em 2026, a palavra agent voltou ao centro da conversa por causa de sistemas que combinam modelos generativos, ferramentas e memória. Esta palavra tem história na tecnologia que começa lá em 1955 e passa pelos anos 1980 e hiberna, na mídia, até 2024 quando os assistentes de inteligência artificial a tornam popular novamente.

O tempo passou, o vocabulário mudou; a estrutura não.

Um modelo que recebe um texto e produz outro texto implementa uma função, mas só se torna componente de um agente quando entra em um ciclo que percebe um ambiente, conserva o estado relevante, escolhe ações e recebe consequências que podem ser avaliadas.

O mercado de assistentes inteligentes impressiona.

O AI Index 2026, de Stanford, registra uma subida de $20\%$ para $77{,}3\%$ na taxa de sucesso do benchmark Terminal-Bench para agentes que executam tarefas reais de terminal entre 2025 e 20263. O número é impressionante, mas não revoga nenhuma definição deste artigo: o benchmark ainda precisa dizer qual tarefa vale, o ambiente ainda devolve observações, e o sistema ainda é julgado por uma medida de desempenho.

Essa distinção evita duas confusões frequentes. Começando por chamar de agente qualquer modelo que produza uma resposta com aparência autônoma. A outra é imaginar que acrescentar ferramentas torna o sistema racional por decreto. Assim como a economia, a racionalidade não pode ser controlada por decreto.

As ferramentas apenas ampliam o conjunto de ações $\mathcal{A}$; a racionalidade depende de escolher, no conjunto de ações possíveis, a ação que maximiza o resultado esperado segundo a medida correta. Um modelo excelente dentro de um ciclo mal especificado continua sendo um agente ruim, agora com mais maneiras de errar catastroficamente.

2. Agentes e ambientes

Agora que a atenta leitora entendeu que nosso critério é agir racionalmente, precisamos do objeto que age. Chamaremos esse objeto de agente.

Um agente é qualquer coisa que percebe seu ambiente por meio de sensores e atua sobre esse ambiente por meio de atuadores.

Preste atenção nos fragmentos: percebe seu ambiente e atua sobre esse ambiente. Esses fragmentos contém a essência dos agentes. Um robô tem câmeras e motores; um agente de software tem pacotes de rede como percepções e pacotes de rede como ações; a leitora tem olhos e mãos. A definição é deliberadamente ampla, porque queremos uma teoria que valha para todos esses casos. Sim, eu sei, somos ambiciosos. A matemática é assim mesmo.

Precisamos agora tornar os conceitos de percebe e atua precisos.

Chamamos de percepção (percept) o conteúdo que os sensores do agente entregam em um dado instante. Chamamos de sequência de percepções o histórico completo de tudo que o agente já percebeu. O ponto conceitual, que a atenta leitora deve reter, é o seguinte: a ação de um agente em qualquer instante pode depender de toda a sequência de percepções observada até ali, mas não de nada que ele não tenha percebido.

Formalmente, lá vem a matemática, o comportamento de um agente é descrito pela sua função de agente, que mapeia cada sequência de percepções possível em uma ação:

\[f : \mathcal{P}^{*} \to \mathcal{A}\]

na qual $\mathcal{P}$ é o conjunto de percepções possíveis, $\mathcal{P}^{*}$ é o conjunto de todas as sequências finitas de percepções, a notação com asterisco é o fecho de Kleene. E representa o conjunto de todas as cadeias finitas formadas com símbolos de $\mathcal{P}$. Finalmente, $\mathcal{A}$ é o conjunto de ações possíveis.

A função de agente $f$ é um objeto matemático abstrato, em geral uma tabela infinita.

O que roda de fato dentro do agente é o programa de agente, uma implementação concreta e finita da função de agente $f$. A distinção entre os dois é importante. A função $f$ é a especificação do comportamento; o programa é a engenharia que o realiza. Boa parte desta série é sobre programas que aproximam funções de agente boas sem precisar tabelá-las.

Para deixar de falar no abstrato, vamos adotar um ambiente mínimo que nos acompanhará até o fim do artigo: o mundo do aspirador.

No mundo do aspirador existem dois cômodos, que chamaremos de $A$ e $B$. Um agente aspirador de pó ocupa um dos cômodos a cada instante. Cada cômodo pode estar limpo ou sujo. O agente percebe apenas duas coisas: em que cômodo está e se esse cômodo está sujo. Suas ações possíveis são aspirar o cômodo atual, mover-se para a direita, mover-se para a esquerda, ou não fazer nada. É um mundo de brinquedo, e é exatamente por isso que serve como exemplo didático: pequeno o bastante para calcularmos tudo à mão, rico o bastante para expor todas as ideias que importam.

A percepção do agente, nesse mundo, é um par ordenado composto da localização e do estado de limpeza do cômodo atual, por exemplo $[A, \text{Sujo}]$, está no cômodo $A$ e este cômodo está sujo.

Uma função de agente possível é dada por uma regra simples: se o cômodo atual está sujo, aspire; caso contrário, mova-se para o outro cômodo. Essa regra, escrita como tabela, associará:

  • $[A,\text{Sujo}]\mapsto\text{Aspirar}$;
  • $[A,\text{Limpo}]\mapsto\text{Direita}$;
  • $[B,\text{Sujo}]\mapsto\text{Aspirar}$ e;
  • $[B,\text{Limpo}]\mapsto\text{Esquerda}$.

Parece razoável. Mas parecer razoável não é um critério de engenharia. Nem sei definir isso. Precisamos de uma forma de decidir se essa função de agente é boa, e é aqui que a seção seguinte, a matemática do artigo, entra.

A Figura 2 reúne essas definições no mesmo ciclo. O ambiente contém mais informação do que os sensores necessariamente revelam; o histórico reúne apenas o que entrou, e o programa usa esse histórico para realizar a função de agente e devolver uma ação pelos atuadores. A esforçada leitora deve investir algum tempo entendendo essa figura.

O mundo do aspirador aparece como ambiente de um agente. O agente está no cômodo A sujo e recebe pelos sensores a percepção local A, Sujo, sem observar o estado do cômodo B. Dentro do agente, essa percepção entra na sequência de percepções, a função de agente especifica o mapeamento do histórico para uma ação e o programa de agente implementa essa especificação. A ação retorna ao ambiente por meio dos atuadores. Figura 2: Sensores não entregam o ambiente inteiro, apenas percepções. O programa de agente implementa a especificação abstrata $f:\mathcal{P}^{*}\to\mathcal{A}$ e só pode escolher uma ação a partir do histórico que efetivamente recebeu.

3. Racionalidade e medida de desempenho

Uma função de agente é boa se o agente que a executa faz a coisa certa. Para transformar coisa certa em algo mensurável, introduziremos a medida de desempenho. A medida de desempenho será um critério objetivo que avalia a sequência de estados do ambiente produzida pelo comportamento do agente. Repare, e este é o primeiro ponto delicado, que a medida avalia estados do ambiente, não estados internos ou opiniões do agente sobre si mesmo. Um aspirador que se declara satisfeito com o próprio trabalho não pontua nada; um chão limpo pontua.

Para o mundo do aspirador, uma medida de desempenho natural atribui um ponto para cada cômodo limpo a cada passo de tempo. Se o agente vive por $T$ passos e denotamos por $\text{limpos}(t)$ o número de cômodos limpos após a ação do passo $t$, a medida acumulada é

\[M = \sum_{t=1}^{T} \text{limpos}(t)\]

com $\text{limpos}(t) \in {0, 1, 2}$, já que há dois cômodos. A medida de desempenho $M$ é a soma das quantidades de cômodos limpos após cada ação, do primeiro ao $T$-ésimo passo. O valor máximo possível em $T$ passos é $2T$, atingível apenas por um agente que, de algum modo mágico, mantivesse os dois cômodos limpos em todos os instantes possíveis. Nenhum agente real chega lá partindo de um mundo sujo, porque limpar leva tempo; a medida, portanto, ordena agentes pela rapidez e persistência com que produzem limpeza.

A escolha da medida de desempenho é uma decisão de projeto, não um dado da natureza, e escolhas diferentes premiam agentes diferentes.

A medida que sugeri acima, por exemplo, é indiferente ao esforço: um agente que fica perpetuamente indo e voltando entre dois cômodos limpos pontua igual a um que para quieto, porque mover-se não suja nem limpa nada. Se quiséssemos penalizar o desperdício de energia, bastaria subtrair um custo por movimento, e veríamos os dois agentes se separarem. A esforçada leitora se divertirá com isso no quinto exercício desta seção, no qual essa mudança de medida inverte qual agente é preferível. A lição que a atenta leitora deve perceber é que definir a medida de desempenho é projetar o que o agente vai otimizar; errar a definição da medida é obter, com competência, o comportamento errado.

Com a medida definida, podemos definir o objeto central de toda a série.

Um agente racional é aquele que, para cada sequência de percepções possível, seleciona uma ação que se espera que maximize sua medida de desempenho, dada a evidência fornecida pela sequência de percepções até ali e qualquer conhecimento prévio embutido no agente.

A expressão se espera que maximize carrega um peso quase cruel. Trata-se de uma esperança matemática, um valor esperado, e é o que separa racionalidade de sorte. Vamos definir o valor esperado antes de usá-lo, como manda a casa e as minhas pretensões.

Se uma ação $a$, tomada em um estado de conhecimento, pode levar a resultados $r_1, r_2, \dots, r_n$ com probabilidades $P(r_i)$ e cada resultado tem valor $V(r_i)$ segundo a medida de desempenho, então o valor esperado da ação será dado por:

\[\mathbb{E}[a] = \sum_{i=1}^{n} P(r_i)\, V(r_i)\]

isto é a expressão da média dos valores possíveis ponderada pelas suas probabilidades. Um agente racional escolhe a ação de maior $\mathbb{E}[a]$. A atenta leitora deve notar que o agente maximiza o desempenho esperado, não o desempenho realizado. A diferença entre o esperado e o realizado é tudo, e é a fonte de um mal-entendido que convém desarmar já.

Podemos condensar a definição em uma regra de decisão.

Seja $p_{1:t}$ a sequência de percepções recebida até o instante $t$, seja $K$ o conhecimento prévio do agente e seja $R$ o conjunto de resultados possíveis. A ação racional pertence ao conjunto

\[a^{*}\in\operatorname*{arg\,max}_{a\in\mathcal{A}} \sum_{r\in R}P(r\mid a,p_{1:t},K)\,V(r),\]

no qual $P(r\mid a,p_{1:t},K)$ é a probabilidade de obter o resultado $r$ ao executar $a$ com a informação disponível, e $V(r)$ é o valor desse resultado segundo a medida de desempenho. O operador $\operatorname*{arg\,max}$ devolve a ação, ou as ações empatadas, que maximizam a expressão. A fórmula separa três responsabilidades de engenharia:

  • estimar consequências;
  • atribuir valor aos resultados e;
  • escolher a ação.

Os artigos de busca tratarão principalmente da terceira; os artigos probabilísticos, da primeira; os de aprendizado, de como melhorar ambas com dados.

Racionalidade não é onisciência.

Um agente onisciente conheceria o resultado real de suas ações e agiria com base nele; nenhum agente do mundo físico é onisciente, porque as percepções não revelam o futuro. Nós podemos tentar extrapolar um determinado movimento, ou efeito, mas isso é assunto da série Representações e Modelos de Mundo.

Um agente racional faz o melhor com a informação que tem, e a informação que tem pode ser insuficiente para evitar um mau resultado. Se a leitora atravessa a rua depois de olhar para os dois lados e ver a via livre, e uma peça de avião cai do céu e a atinge, a decisão de atravessar não foi irracional; foi racional e azarada.

A Racionalidade maximiza o valor esperado dado o conhecimento disponível. A racionalidade não promete o melhor resultado em cada sorteio individual. O quarto exercício desta seção formaliza exatamente essa distinção com números.

Da definição decorrem três consequências que os agentes desta série exibirão em graus variados:

  1. A primeira é que, quando o ambiente é parcialmente observável, agir racionalmente pode exigir coletar informação: às vezes a ação de maior valor esperado não é a que resolve o problema, mas a que reduz a incerteza sobre ele, como um médico que pede um exame antes de prescrever.

  2. A segunda é que um agente racional deve aprender: quando o conhecimento embutido de fábrica é incompleto ou o ambiente muda, o agente que ajusta seu comportamento à experiência supera o que repete uma tabela fixa.

  3. A terceira é que essa capacidade de aprender dá ao agente autonomia, a medida em que seu comportamento passa a depender da própria experiência e não apenas do conhecimento que o projetista lhe deu. Um agente que depende inteiramente do projetista e nada aprende é frágil; se o projetista errou, o agente erra junto, para sempre.

Neste ponto, a curiosa leitora deve lembrar dos robôs usados na indústria durante a maior parte do século XX e ainda muito comuns. Toda a ação destes robôs era baseada em agentes roteirizados. Capazes de executar tarefas repetitivas, mas com pouca ou nenhuma interação com o meio ambiente. Estas máquinas são úteis, mas são agentes pobres. As ferramentas contemporâneas, segundo quarto do século XXI, estão tornado a percepção do ambiente possível e precisa.

Antes de mergulhar nos exercícios, convém que a afoita leitora experimente com as próprias mãos a relação entre função de agente e medida de desempenho. O laboratório abaixo implementa o mundo do aspirador. Escolha o tipo de agente, defina a sujeira inicial clicando nos cômodos e avance passo a passo, observando a medida de desempenho acumular. Tente responder, olhando a tela, à pergunta que os exercícios respondem no papel: qual agente pontua mais, e por quê? Experimente também o modo estocástico, no qual a sujeira reaparece com certa probabilidade, e note como isso muda qual comportamento compensa.

Exercícios de Papel e Lápis

Os cinco exercícios a seguir usam o mundo do aspirador com dois cômodos $A$ e $B$. Salvo aviso, o agente começa no cômodo $A$ e cada aritmética foi conferida programaticamente.

Na série inteira, e no blog todo em geral, sempre serão sugeridos exercícios de papel e lápis. Sugiro, forte e profundamente, que a esforçada leitora faça os exercícios com papel e lápis. Existem dezenas de pesquisas que indicam que esta é uma forma eficiente e rápida de aprender. Além disso, os exercícios contém análises do problema que melhoram o entendimento dos conceitos abordados na seção do artigo.

1. Calcule a medida de desempenho do agente reativo durante oito passos

Considere a função de agente reativa da Seção 2: se o cômodo atual está sujo, aspire; caso contrário, se o agente está em $A$, vá para a direita; se está em $B$, vá para a esquerda. Suponha que os dois cômodos comecem sujos, que o agente comece em $A$ e que viva por oito passos. Calcule a medida de desempenho

\[M = \sum_{t=1}^{8}\text{limpos}(t),\]

na qual $\text{limpos}(t)$ é a quantidade de cômodos limpos após a ação do passo $t$.

Solução: representaremos o estado de limpeza por $(A,B)$ e registraremos o estado antes e depois de cada ação. As ações de movimento alteram apenas a localização do agente. A ação Aspirar altera o estado do cômodo atual de sujo para limpo.

Passo $t$ Local antes Estado antes $(A,B)$ Ação Local depois Estado depois $(A,B)$ $\text{limpos}(t)$
$1$ $A$ $(\text{sujo},\text{sujo})$ Aspirar $A$ $(\text{limpo},\text{sujo})$ $1$
$2$ $A$ $(\text{limpo},\text{sujo})$ Direita $B$ $(\text{limpo},\text{sujo})$ $1$
$3$ $B$ $(\text{limpo},\text{sujo})$ Aspirar $B$ $(\text{limpo},\text{limpo})$ $2$
$4$ $B$ $(\text{limpo},\text{limpo})$ Esquerda $A$ $(\text{limpo},\text{limpo})$ $2$
$5$ $A$ $(\text{limpo},\text{limpo})$ Direita $B$ $(\text{limpo},\text{limpo})$ $2$
$6$ $B$ $(\text{limpo},\text{limpo})$ Esquerda $A$ $(\text{limpo},\text{limpo})$ $2$
$7$ $A$ $(\text{limpo},\text{limpo})$ Direita $B$ $(\text{limpo},\text{limpo})$ $2$
$8$ $B$ $(\text{limpo},\text{limpo})$ Esquerda $A$ $(\text{limpo},\text{limpo})$ $2$

Os valores que entram na soma são, portanto, $1$, $1$ e seis parcelas iguais a $2$:

\[\begin{aligned} M &=\text{limpos}(1)+\text{limpos}(2)+\cdots+\text{limpos}(8)\\ &=1+1+2+2+2+2+2+2\\ &=14. \end{aligned}\]

O limite superior para oito passos é

\[M_{\max}=2\cdot 8=16.\]

A diferença entre o limite e o desempenho realizado é

\[M_{\max}-M=16-14=2.\]

O agente perde um ponto no primeiro passo e outro no segundo, pois em cada um desses instantes apenas um cômodo está limpo. Depois da terceira ação, os dois cômodos permanecem limpos. A oscilação dos passos $4$ a $8$ não reduz esta medida, porque ela conta somente a limpeza; no Exercício 5, a inclusão de um custo de movimento tornará essa oscilação relevante.

2. Ordene dois planos de entrega por sua utilidade

Um agente de entregas pode cumprir a mesma tarefa por dois planos. O plano 1 leva $t=10$ passos de tempo e gasta $e=3$ unidades de energia. O plano 2 leva $t=6$ passos e gasta $e=8$ unidades. A utilidade do agente é

\[U=-(\alpha t+\beta e),\]

com peso de tempo $\alpha=1$ e peso de energia $\beta=2$. Ordene os dois planos e explique por que um agente puramente baseado em objetivos não os distinguiria.

Solução: o termo $\alpha t$ é o custo ponderado do tempo, e o termo $\beta e$ é o custo ponderado da energia. Como a utilidade é o negativo da soma desses custos, o plano preferível será aquele cuja utilidade for numericamente maior.

Para o plano 1, o custo do tempo é

\[\alpha t_1=1\cdot 10=10,\]

e o custo da energia é

\[\beta e_1=2\cdot 3=6.\]

Assim,

\[\begin{aligned} U_1 &=-(\alpha t_1+\beta e_1)\\ &=-(10+6)\\ &=-16. \end{aligned}\]

Para o plano 2, o custo do tempo é

\[\alpha t_2=1\cdot 6=6,\]

e o custo da energia é

\[\beta e_2=2\cdot 8=16.\]

Portanto,

\[\begin{aligned} U_2 &=-(\alpha t_2+\beta e_2)\\ &=-(6+16)\\ &=-22. \end{aligned}\]

Os cálculos podem ser reunidos em uma tabela de comparação:

Plano Tempo $t$ Energia $e$ Custo do tempo $\alpha t$ Custo da energia $\beta e$ Custo total Utilidade $U$
$1$ $10$ $3$ $1\cdot10=10$ $2\cdot3=6$ $10+6=16$ $-16$
$2$ $6$ $8$ $1\cdot6=6$ $2\cdot8=16$ $6+16=22$ $-22$

A diferença de utilidade é

\[U_1-U_2=-16-(-22)=6.\]

Como $U_1>U_2$, o plano 1 é preferível por seis pontos de utilidade. Embora leve quatro passos a mais, ele economiza cinco unidades de energia, e cada unidade de energia tem peso $2$. Um agente baseado em objetivos verificaria apenas se a entrega foi concluída; como os dois planos alcançam esse objetivo, ele os consideraria equivalentes. A função de utilidade acrescenta a ordem de preferência necessária para distinguir soluções que atingem o mesmo objetivo com custos diferentes.

3. Compare o desempenho esperado de duas políticas de aspiração

Em cada passo, o agente percebe um cômodo que está sujo com probabilidade $p=0{,}7$ e limpo com probabilidade $1-p=0{,}3$. O agente pode aspirar a um custo de energia $c=0{,}5$ ponto. A medida de desempenho do passo vale $1$ se o cômodo termina limpo, menos o custo de energia eventualmente gasto. Compare a política $A$, que aspira em qualquer estado percebido, com a política $B$, que aspira apenas quando percebe sujeira.

Solução: há dois estados percebidos possíveis. Denotaremos por $S$ o evento em que o cômodo está sujo e por $L$ o evento em que ele já está limpo. Em cada ramo, o valor líquido é a recompensa pela limpeza menos o custo da ação. A contribuição do ramo para o valor esperado é sua probabilidade multiplicada pelo valor líquido.

Política Estado percebido Probabilidade Ação Estado depois Recompensa Custo Valor líquido Contribuição esperada
$A$ $S$ $0{,}7$ Aspirar Limpo $1$ $0{,}5$ $1-0{,}5=0{,}5$ $0{,}7\cdot0{,}5=0{,}35$
$A$ $L$ $0{,}3$ Aspirar Limpo $1$ $0{,}5$ $1-0{,}5=0{,}5$ $0{,}3\cdot0{,}5=0{,}15$
$B$ $S$ $0{,}7$ Aspirar Limpo $1$ $0{,}5$ $1-0{,}5=0{,}5$ $0{,}7\cdot0{,}5=0{,}35$
$B$ $L$ $0{,}3$ Parar Limpo $1$ $0$ $1-0=1$ $0{,}3\cdot1=0{,}30$

Para a política $A$, os dois ramos terminam com o mesmo valor líquido:

\[\begin{aligned} \mathbb{E}[A] &=P(S)(1-c)+P(L)(1-c)\\ &=0{,}7\cdot(1-0{,}5)+0{,}3\cdot(1-0{,}5)\\ &=0{,}7\cdot0{,}5+0{,}3\cdot0{,}5\\ &=0{,}35+0{,}15\\ &=0{,}50. \end{aligned}\]

Para a política $B$, o custo aparece somente no ramo em que o cômodo está sujo:

\[\begin{aligned} \mathbb{E}[B] &=P(S)(1-c)+P(L)\cdot1\\ &=0{,}7\cdot(1-0{,}5)+0{,}3\cdot1\\ &=0{,}7\cdot0{,}5+0{,}3\cdot1\\ &=0{,}35+0{,}30\\ &=0{,}65. \end{aligned}\]

A comparação final é:

Política Desempenho esperado por passo Diferença em relação à política $A$
$A$ $0{,}50$ $0$
$B$ $0{,}65$ $0{,}65-0{,}50=0{,}15$

A vantagem da política $B$ também pode ser escrita como

\[(1-p)c=(1-0{,}7)\cdot0{,}5=0{,}3\cdot0{,}5=0{,}15.\]

Essa expressão mostra de onde vem a diferença: em $30\%$ dos passos, o cômodo já está limpo, e a política $B$ evita o custo de $0{,}5$ que a política $A$ pagaria. Logo, $\mathbb{E}[B]>\mathbb{E}[A]$, e perceber o estado antes de agir melhora o desempenho quando a ação tem custo.

4. Distinga uma decisão racional de um resultado favorável

Um agente escolhe entre atravessar a rua agora e esperar. Atravessar leva ao outro lado com valor $+10$ e probabilidade $0{,}999$, mas um acidente raro de valor $-1000$ ocorre com probabilidade $0{,}001$. Esperar tem valor certo $+2$. Mostre que atravessar é a decisão racional e que, se o acidente ocorrer, terá sido a pior ação em retrospecto.

Solução: o valor esperado de cada ação é a soma das contribuições de seus resultados possíveis. Cada contribuição é o produto da probabilidade do resultado pelo valor atribuído a ele.

Ação Resultado Probabilidade Valor Contribuição para o valor esperado
Atravessar Chegar ao outro lado $0{,}999$ $+10$ $0{,}999\cdot10=9{,}99$
Atravessar Sofrer o acidente raro $0{,}001$ $-1000$ $0{,}001\cdot(-1000)=-1$
Esperar Permanecer em segurança $1$ $+2$ $1\cdot2=2$

Somando as duas contribuições de atravessar,

\[\begin{aligned} \mathbb{E}[\text{atravessar}] &=0{,}999\cdot10+0{,}001\cdot(-1000)\\ &=9{,}99-1\\ &=8{,}99. \end{aligned}\]

Esperar tem um único resultado possível:

\[\begin{aligned} \mathbb{E}[\text{esperar}] &=1\cdot2\\ &=2. \end{aligned}\]

A comparação entre as ações é:

Ação Valor esperado Ordem de preferência
Atravessar $8{,}99$ $1$ª
Esperar $2$ $2$ª

A vantagem esperada de atravessar é

\[8{,}99-2=6{,}99.\]

Como $8{,}99>2$, atravessar maximiza o valor esperado dado o conhecimento disponível. Se o evento de probabilidade $0{,}001$ ocorrer, porém, o valor realizado será $-1000$. Em retrospecto, a diferença entre atravessar e esperar será

\[-1000-2=-1002,\]

portanto esperar teria produzido um resultado $1002$ pontos melhor naquele caso particular. Isso não torna a decisão inicial irracional. A racionalidade pertence à escolha feita com as probabilidades e os valores conhecidos; o resultado realizado pertence ao sorteio do ambiente. Uma decisão pode ser racional e, ainda assim, terminar mal.

5. Compare dois agentes reativos pela média de desempenho sobre as quatro configurações iniciais de sujeira, todas equiprováveis, com o agente sempre começando em $A$

O agente oscilante é o do Exercício 1: se o cômodo atual está sujo, ele aspira; caso contrário, move-se para o outro cômodo. O agente econômico aspira quando o cômodo atual está sujo e, quando ele está limpo, permanece parado. A medida de desempenho penaliza cada movimento:

\[M=\sum_{t=1}^{8}\text{limpos}(t) -0{,}1\cdot(\text{número de movimentos}).\]

Solução: as quatro configurações iniciais de $(A,B)$ são: ambos sujos, somente $A$ sujo, somente $B$ sujo e ambos limpos. Como elas são equiprováveis, cada configuração tem probabilidade $1/4$.

Para tornar os cálculos mais legíveis, vamos chamar de

\[L=\sum_{t=1}^{8}\text{limpos}(t)\]

a pontuação bruta de limpeza e de $m$ o número total de movimentos. Assim,

\[M=L-0{,}1m.\]

As ações Direita e Esquerda contam como movimentos. As ações Aspirar e Parar não contam.

Agente oscilante

Configuração 1: os dois cômodos começam sujos.

Passo $t$ Local antes Estado antes $(A,B)$ Ação Local depois Estado depois $(A,B)$ $\text{limpos}(t)$ Movimentos acumulados
$1$ $A$ $(\text{sujo},\text{sujo})$ Aspirar $A$ $(\text{limpo},\text{sujo})$ $1$ $0$
$2$ $A$ $(\text{limpo},\text{sujo})$ Direita $B$ $(\text{limpo},\text{sujo})$ $1$ $1$
$3$ $B$ $(\text{limpo},\text{sujo})$ Aspirar $B$ $(\text{limpo},\text{limpo})$ $2$ $1$
$4$ $B$ $(\text{limpo},\text{limpo})$ Esquerda $A$ $(\text{limpo},\text{limpo})$ $2$ $2$
$5$ $A$ $(\text{limpo},\text{limpo})$ Direita $B$ $(\text{limpo},\text{limpo})$ $2$ $3$
$6$ $B$ $(\text{limpo},\text{limpo})$ Esquerda $A$ $(\text{limpo},\text{limpo})$ $2$ $4$
$7$ $A$ $(\text{limpo},\text{limpo})$ Direita $B$ $(\text{limpo},\text{limpo})$ $2$ $5$
$8$ $B$ $(\text{limpo},\text{limpo})$ Esquerda $A$ $(\text{limpo},\text{limpo})$ $2$ $6$

A pontuação bruta de limpeza é

\[L=1+1+2+2+2+2+2+2=14.\]

O agente executa seis movimentos. Portanto,

\[M_{\text{osc},1} =14-0{,}1\cdot6 =14-0{,}6 =13{,}4.\]

Configuração 2: somente o cômodo $A$ começa sujo.

Passo $t$ Local antes Estado antes $(A,B)$ Ação Local depois Estado depois $(A,B)$ $\text{limpos}(t)$ Movimentos acumulados
$1$ $A$ $(\text{sujo},\text{limpo})$ Aspirar $A$ $(\text{limpo},\text{limpo})$ $2$ $0$
$2$ $A$ $(\text{limpo},\text{limpo})$ Direita $B$ $(\text{limpo},\text{limpo})$ $2$ $1$
$3$ $B$ $(\text{limpo},\text{limpo})$ Esquerda $A$ $(\text{limpo},\text{limpo})$ $2$ $2$
$4$ $A$ $(\text{limpo},\text{limpo})$ Direita $B$ $(\text{limpo},\text{limpo})$ $2$ $3$
$5$ $B$ $(\text{limpo},\text{limpo})$ Esquerda $A$ $(\text{limpo},\text{limpo})$ $2$ $4$
$6$ $A$ $(\text{limpo},\text{limpo})$ Direita $B$ $(\text{limpo},\text{limpo})$ $2$ $5$
$7$ $B$ $(\text{limpo},\text{limpo})$ Esquerda $A$ $(\text{limpo},\text{limpo})$ $2$ $6$
$8$ $A$ $(\text{limpo},\text{limpo})$ Direita $B$ $(\text{limpo},\text{limpo})$ $2$ $7$

O primeiro passo deixa os dois cômodos limpos. Logo,

\[L=2+2+2+2+2+2+2+2=16.\]

O agente executa sete movimentos. Portanto,

\[M_{\text{osc},2} =16-0{,}1\cdot7 =16-0{,}7 =15{,}3.\]

Configuração 3: somente o cômodo $B$ começa sujo.

Passo $t$ Local antes Estado antes $(A,B)$ Ação Local depois Estado depois $(A,B)$ $\text{limpos}(t)$ Movimentos acumulados
$1$ $A$ $(\text{limpo},\text{sujo})$ Direita $B$ $(\text{limpo},\text{sujo})$ $1$ $1$
$2$ $B$ $(\text{limpo},\text{sujo})$ Aspirar $B$ $(\text{limpo},\text{limpo})$ $2$ $1$
$3$ $B$ $(\text{limpo},\text{limpo})$ Esquerda $A$ $(\text{limpo},\text{limpo})$ $2$ $2$
$4$ $A$ $(\text{limpo},\text{limpo})$ Direita $B$ $(\text{limpo},\text{limpo})$ $2$ $3$
$5$ $B$ $(\text{limpo},\text{limpo})$ Esquerda $A$ $(\text{limpo},\text{limpo})$ $2$ $4$
$6$ $A$ $(\text{limpo},\text{limpo})$ Direita $B$ $(\text{limpo},\text{limpo})$ $2$ $5$
$7$ $B$ $(\text{limpo},\text{limpo})$ Esquerda $A$ $(\text{limpo},\text{limpo})$ $2$ $6$
$8$ $A$ $(\text{limpo},\text{limpo})$ Direita $B$ $(\text{limpo},\text{limpo})$ $2$ $7$

No primeiro passo, apenas $A$ está limpo. Depois de aspirar $B$ no segundo passo, os dois cômodos permanecem limpos. Assim,

\[L=1+2+2+2+2+2+2+2=15.\]

O agente executa sete movimentos. Portanto,

\[M_{\text{osc},3} =15-0{,}1\cdot7 =15-0{,}7 =14{,}3.\]

Configuração 4: os dois cômodos começam limpos.

Passo $t$ Local antes Estado antes $(A,B)$ Ação Local depois Estado depois $(A,B)$ $\text{limpos}(t)$ Movimentos acumulados
$1$ $A$ $(\text{limpo},\text{limpo})$ Direita $B$ $(\text{limpo},\text{limpo})$ $2$ $1$
$2$ $B$ $(\text{limpo},\text{limpo})$ Esquerda $A$ $(\text{limpo},\text{limpo})$ $2$ $2$
$3$ $A$ $(\text{limpo},\text{limpo})$ Direita $B$ $(\text{limpo},\text{limpo})$ $2$ $3$
$4$ $B$ $(\text{limpo},\text{limpo})$ Esquerda $A$ $(\text{limpo},\text{limpo})$ $2$ $4$
$5$ $A$ $(\text{limpo},\text{limpo})$ Direita $B$ $(\text{limpo},\text{limpo})$ $2$ $5$
$6$ $B$ $(\text{limpo},\text{limpo})$ Esquerda $A$ $(\text{limpo},\text{limpo})$ $2$ $6$
$7$ $A$ $(\text{limpo},\text{limpo})$ Direita $B$ $(\text{limpo},\text{limpo})$ $2$ $7$
$8$ $B$ $(\text{limpo},\text{limpo})$ Esquerda $A$ $(\text{limpo},\text{limpo})$ $2$ $8$

Os dois cômodos permanecem limpos durante os oito passos:

\[L=2+2+2+2+2+2+2+2=16.\]

Como o agente se move em todos os passos,

\[M_{\text{osc},4} =16-0{,}1\cdot8 =16-0{,}8 =15{,}2.\]

A média de desempenho do agente oscilante é, portanto,

\[\begin{aligned} \overline{M}_{\text{oscilante}} &=\frac{ M_{\text{osc},1} +M_{\text{osc},2} +M_{\text{osc},3} +M_{\text{osc},4} }{4}\\ &=\frac{13{,}4+15{,}3+14{,}3+15{,}2}{4}\\ &=\frac{58{,}2}{4}\\ &=14{,}55. \end{aligned}\]
Agente econômico

O agente econômico nunca sai de $A$. Se $A$ começa sujo, ele o aspira no primeiro passo e permanece parado nos sete passos seguintes. Se $A$ começa limpo, ele permanece parado desde o primeiro passo. Consequentemente, $m=0$ nas quatro configurações.

A tabela a seguir explicita os oito passos. Cada célula informa, nesta ordem, a ação, o estado $(A,B)$ depois da ação e o valor de $\text{limpos}(t)$. O agente permanece em $A$ durante toda a execução.

Passo $t$ Ambos sujos Somente $A$ sujo Somente $B$ sujo Ambos limpos
$1$ Aspirar; $(\text{limpo},\text{sujo})$; $1$ Aspirar; $(\text{limpo},\text{limpo})$; $2$ Parar; $(\text{limpo},\text{sujo})$; $1$ Parar; $(\text{limpo},\text{limpo})$; $2$
$2$ Parar; $(\text{limpo},\text{sujo})$; $1$ Parar; $(\text{limpo},\text{limpo})$; $2$ Parar; $(\text{limpo},\text{sujo})$; $1$ Parar; $(\text{limpo},\text{limpo})$; $2$
$3$ Parar; $(\text{limpo},\text{sujo})$; $1$ Parar; $(\text{limpo},\text{limpo})$; $2$ Parar; $(\text{limpo},\text{sujo})$; $1$ Parar; $(\text{limpo},\text{limpo})$; $2$
$4$ Parar; $(\text{limpo},\text{sujo})$; $1$ Parar; $(\text{limpo},\text{limpo})$; $2$ Parar; $(\text{limpo},\text{sujo})$; $1$ Parar; $(\text{limpo},\text{limpo})$; $2$
$5$ Parar; $(\text{limpo},\text{sujo})$; $1$ Parar; $(\text{limpo},\text{limpo})$; $2$ Parar; $(\text{limpo},\text{sujo})$; $1$ Parar; $(\text{limpo},\text{limpo})$; $2$
$6$ Parar; $(\text{limpo},\text{sujo})$; $1$ Parar; $(\text{limpo},\text{limpo})$; $2$ Parar; $(\text{limpo},\text{sujo})$; $1$ Parar; $(\text{limpo},\text{limpo})$; $2$
$7$ Parar; $(\text{limpo},\text{sujo})$; $1$ Parar; $(\text{limpo},\text{limpo})$; $2$ Parar; $(\text{limpo},\text{sujo})$; $1$ Parar; $(\text{limpo},\text{limpo})$; $2$
$8$ Parar; $(\text{limpo},\text{sujo})$; $1$ Parar; $(\text{limpo},\text{limpo})$; $2$ Parar; $(\text{limpo},\text{sujo})$; $1$ Parar; $(\text{limpo},\text{limpo})$; $2$

Quando os dois cômodos começam sujos, o agente limpa $A$ no primeiro passo, mas abandona $B$ sujo. Há um cômodo limpo depois de cada ação:

\[M_{\text{eco},1} =(1+1+1+1+1+1+1+1)-0{,}1\cdot0 =8.\]

Quando somente $A$ começa sujo, a primeira ação deixa os dois cômodos limpos. Como $B$ já estava limpo, os dois permanecem limpos durante os oito passos:

\[M_{\text{eco},2} =(2+2+2+2+2+2+2+2)-0{,}1\cdot0 =16.\]

Quando somente $B$ começa sujo, o agente encontra $A$ limpo e permanece parado. O cômodo $B$ continua sujo, de modo que há apenas um cômodo limpo depois de cada ação:

\[M_{\text{eco},3} =(1+1+1+1+1+1+1+1)-0{,}1\cdot0 =8.\]

Quando os dois cômodos começam limpos, o agente permanece parado e conserva os dois cômodos limpos durante os oito passos:

\[M_{\text{eco},4} =(2+2+2+2+2+2+2+2)-0{,}1\cdot0 =16.\]

A média de desempenho do agente econômico é

\[\begin{aligned} \overline{M}_{\text{econômico}} &=\frac{ M_{\text{eco},1} +M_{\text{eco},2} +M_{\text{eco},3} +M_{\text{eco},4} }{4}\\ &=\frac{8+16+8+16}{4}\\ &=\frac{48}{4}\\ &=12. \end{aligned}\]

A comparação configuração por configuração fica:

Configuração inicial $(A,B)$ Agente oscilante Agente econômico Maior desempenho
$(\text{sujo},\text{sujo})$ $13{,}4$ $8$ Oscilante
$(\text{sujo},\text{limpo})$ $15{,}3$ $16$ Econômico
$(\text{limpo},\text{sujo})$ $14{,}3$ $8$ Oscilante
$(\text{limpo},\text{limpo})$ $15{,}2$ $16$ Econômico
Média $14{,}55$ $12$ Oscilante

O agente econômico vence nas duas configurações em que o cômodo distante, $B$, já começa limpo. Nesses casos, mover-se não produz limpeza adicional e apenas reduz a pontuação. Entretanto, quando $B$ começa sujo, o agente econômico nunca o visita e perde um ponto de limpeza em todos os passos durante os quais o abandona.

O agente oscilante paga pelo movimento, mas sua patrulha permite encontrar e limpar $B$. Como as quatro configurações são equiprováveis, os pontos obtidos ao limpar o cômodo distante superam a penalidade acumulada pelos movimentos. Por isso,

\[\overline{M}_{\text{oscilante}} =14{,}55 > 12 =\overline{M}_{\text{econômico}}.\]

Sob esta medida de desempenho, o agente oscilante é o mais racional dos dois. Economizar ações não é o mesmo que agir bem, e a resposta à pergunta qual agente é racional? depende da medida de desempenho adotada. Se mudarmos a medida, o veredito também poderá mudar.

4. A especificação PEAS

Antes de projetar um agente, é preciso especificar completamente o problema que ele resolve. A sigla PEAS, de Performance, Environment, Actuators, Sensors (desempenho, ambiente, atuadores e sensores), organiza essa especificação em quatro perguntas. Qual é a medida de desempenho?; Qual é o ambiente em que o agente opera?; De que atuadores ele dispõe para agir? e De que sensores ele dispõe para perceber? Responder às quatro antes de escrever qualquer linha de código evita o erro clássico de construir um agente competente para o problema errado.

Atenção: spoiler alert!

A tabela abaixo especifica três agentes que reaparecerão na série, do brinquedo ao realista.

Agente Desempenho (P) Ambiente (E) Atuadores (A) Sensores (S)
Aspirador Cômodos limpos por passo, menos energia Dois cômodos, sujeira Aspirar, mover, parar Localização, sensor de sujeira
Diagnóstico médico Saúde do paciente, custo, precisão Paciente, exames, histórico Perguntas, pedidos de exame, tratamento Sintomas relatados, resultados de exames
Roteador de entregas Entregas no prazo, combustível, segurança Malha de ruas, trânsito, clima Direção, aceleração, frenagem Câmeras, localização por satélite, mapa

Cada linha desta tabela esconde decisões que os artigos seguintes vão detalhar. O roteador de entregas, em particular, será nosso fio condutor nos artigos sobre busca e otimização, porque encontrar o melhor caminho em um mapa é o exemplo canônico de problema de busca, e distribuir várias entregas é o exemplo canônico de problema de otimização. A leitora que tiver compreendido o aspirador terá compreendido a estrutura de todos os agentes; o que muda no roteador é a escala, não a natureza.

5. Propriedades dos ambientes

O ambiente da especificação PEAS não é um monólito e não está escrito em pedra. Esse ambiente tem propriedades que determinam quais algoritmos são aplicáveis. Classificar o ambiente antes de escolher a técnica é o que irá separar a engenharia do chute, o engenheiro do curioso. Para facilitar este processo, descreveremos as seis dimensões que mais importam, cada uma com o exemplo que a torna concreta e a consequência algorítmica que ela impõe.

5.1 Ambiente Observável

Um ambiente é completamente observável quando os sensores dão acesso ao estado completo relevante a cada instante, e parcialmente observável quando não. O mundo do aspirador, se o agente enxergasse os dois cômodos de uma vez, seria completamente observável; como ele só percebe o cômodo em que está, é parcialmente observável, e essa é a razão pela qual o agente econômico do Exercício 5 falha: ele não sabe se o cômodo distante está sujo. A observabilidade parcial obriga o agente a manter um estado interno que resume o histórico, e é o que motivará os agentes baseados em modelo da próxima seção.

5.2 Ambiente Determinístico

Um ambiente é determinístico quando o próximo estado é completamente determinado pelo estado atual e pela ação do agente, e estocástico quando o resultado envolve probabilidade. O mundo do aspirador do Exercício 1 é determinístico; o do Exercício 3, no qual a sujeira reaparece com probabilidade $0{,}7$, é estocástico. Em ambientes determinísticos, o agente pode planejar uma sequência de ações confiando que ela se cumprirá; em ambientes estocásticos, ele precisa raciocinar sobre valores esperados, como fizemos, e é daí que virá a necessidade do raciocínio probabilístico dos artigos 9 e 10.

5.3 Ambiente Episódico

Um ambiente é episódico quando a experiência do agente se divide em episódios independentes, em que a ação de um episódio não afeta os seguintes, e sequencial quando cada decisão influencia as futuras. Classificar peças defeituosas em uma esteira é episódico: cada peça é julgada por si. Jogar xadrez é sequencial: um lance ruim agora custa vinte lances adiante. Ambientes sequenciais exigem planejamento e busca no futuro; episódicos permitem decisões locais, e por isso são mais fáceis.

5.4 Ambiente Estático

Um ambiente é estático quando não muda enquanto o agente delibera, e dinâmico quando o tempo corre durante a deliberação. Um quebra-cabeça sobre a mesa é estático: a leitora pode pensar o tempo que quiser. Dirigir é dinâmico: hesitar é decidir. Ambientes dinâmicos impõem prazos ao raciocínio e frequentemente forçam o agente a agir com uma resposta apenas boa, em vez de esperar pela ótima.

5.5 Ambiente Discreto

Um ambiente é discreto quando estados, tempo, percepções e ações formam conjuntos enumeráveis de valores distintos, e contínuo quando variam suavemente. O xadrez é discreto; a direção de um carro, com ângulo de volante e velocidade contínuos, não é. Ambientes discretos casam com busca e lógica; contínuos casam com cálculo e otimização numérica, e é por isso que redes neurais, que operam sobre números reais, brilham no contínuo.

5.6 Ambiente Multiagente

Um ambiente é de agente único ou multiagente conforme haja ou não outras entidades cujo comportamento o agente precise modelar como agentes. O aspirador está sozinho; o roteador de entregas divide as ruas com outros motoristas que reagem às suas manobras. Ambientes multiagentes introduzem competição ou cooperação e são o terreno da busca adversarial do artigo 5, na qual o agente precisa antecipar o que um oponente racional fará.

O mundo do aspirador que usamos até aqui é, na versão do Exercício 1, parcialmente observável, determinístico, sequencial, estático, discreto e de agente único. Cada relaxamento dessas propriedades, torná-lo estocástico, multiagente, contínuo, sobe um degrau de dificuldade e convoca uma técnica diferente da série. É por isso que começamos pelo caso mais simples: não por preguiça, mas porque entender o degrau de baixo é a única forma honesta de subir os de cima.

6. Tipos de agente

Todo agente executa um programa que mapeia percepções em ações, mas a forma como esse mapeamento é organizado internamente varia, e cada forma resolve uma dificuldade que a anterior não resolvia. Há cinco arquiteturas clássicas, e a ávida leitora deve enxergá-las como uma escada em que cada degrau paga um custo de complexidade para comprar uma capacidade nova.

6.1 Agentes Reativos Simples

O agente reativo simples escolhe a ação apenas com base na percepção atual, ignorando todo o histórico. Ele é uma tabela de regras condição-ação: se o cômodo está sujo, aspire. É o agente do Exercício 1, e sua virtude é a velocidade: nenhuma deliberação, resposta imediata. Seu defeito aparece quando a percepção atual não basta para decidir bem, o que ocorre sempre que o ambiente é parcialmente observável. O agente reativo simples é cego ao que não está vendo agora, e por isso o agente econômico do Exercício 5, um reativo simples, abandona o cômodo distante.

6.2 Agentes Reativos Baseados em Modelo

O agente reativo baseado em modelo corrige o defeito do agente reativo simples mantendo um estado interno que resume a parte do histórico relevante para a decisão. Ele carrega um modelo de como o mundo evolui e de como suas ações o afetam, e usa esse modelo para estimar o estado atual mesmo sem observá-lo diretamente. Um aspirador baseado em modelo lembraria que já limpou o cômodo $B$ e não precisaria voltar para conferir. O custo dessa capacidade é manter e atualizar o estado interno a cada passo; o ganho é agir bem sob observabilidade parcial.

Considere um robô de inspeção que percorre os corredores de um depósito. Uma estante pode ocultar momentaneamente os marcos usados para localização, por isso a percepção atual nem sempre revela em qual trecho do corredor o robô está. O agente conserva uma estimativa de posição, atualiza essa estimativa com o deslocamento produzido pelos motores e usa uma regra como se o trecho à frente está ocupado, pare; caso contrário, avance. A ação ainda nasce de uma regra reativa, mas a regra consulta o estado estimado pelo modelo, não apenas a leitura mais recente do sensor. O Artigo 22, planejado como Estados ocultos e sistemas dinâmicos, retomará esse robô para mostrar como observações sucessivas corrigem a estimativa de um estado que não pode ser visto diretamente.

6.3 Agentes Baseados em Objetivos

O agente baseado em objetivos vai além de reagir: ele conhece o objetivo que deseja alcançar e escolhe ações que o aproximem dele, o que em geral exige considerar o futuro. Saber que o cômodo $B$ está sujo não diz ao agente o que fazer; combinar essa informação com o objetivo de manter todos os cômodos limpos e com um modelo do mundo, sim. É aqui que nasce a busca, tema dos próximos quatro artigos: encontrar uma sequência de ações que leve do estado atual a um estado que satisfaça o objetivo. O custo é a deliberação sobre o futuro; o ganho é flexibilidade, porque mudar o objetivo muda o comportamento sem reescrever regras.

Considere um agente que precisa sair de um labirinto. Perceber uma parede à frente informa qual movimento imediato é impossível, mas não revela qual sequência de movimentos alcança a saída. O agente representa as células livres, define a saída como objetivo e examina caminhos antes de agir. No Artigo 2, Resolução de problemas por busca: espaço de estados e busca não informada, esse mesmo labirinto será formulado como um grafo e permitirá comparar quais estratégias encontram a saída, quanto trabalho realizam e quanta memória consomem.

6.4 Agentes Baseados em Utilidade

O agente baseado em utilidade refina o anterior quando há muitos estados que satisfazem o objetivo, ou quando o objetivo pode ser atingido em graus. Ele carrega uma função de utilidade que atribui um número a cada estado, medindo o quão desejável ele é, e escolhe ações que maximizam a utilidade esperada. Foi o agente do Exercício 2: dois planos entregavam a encomenda, mas a utilidade distinguiu o melhor. O custo é dispor de uma função de utilidade bem calibrada; o ganho é decidir racionalmente entre alternativas que um agente baseado em objetivos julgaria equivalentes, e agir bem sob incerteza, ponderando probabilidade e desejabilidade.

Considere um agente de correio eletrônico que pode entregar uma mensagem, colocá-la em quarentena para revisão humana ou bloqueá-la. As três ações processam a mensagem, mas errar contra uma comunicação legítima, deixar passar uma fraude e atrasar uma mensagem possuem consequências diferentes. Um classificador pode estimar a probabilidade de a mensagem ser indesejada; a função de utilidade transforma essa estimativa em uma escolha entre ações e incorpora o custo distinto de cada erro. O Artigo 10, Redes bayesianas e classificação Naive Bayes, construirá o classificador de mensagens, e o Artigo 19, planejado como Classes raras, calibração e custo de decisão, retomará suas pontuações para decidir quando entregar, colocar em quarentena ou bloquear.

6.5 Agentes com Aprendizado

O agente com aprendizado, por fim, não é uma quinta caixa ao lado das outras, mas um invólucro que se aplica a qualquer uma delas. Ele tem um componente de desempenho, que é o agente propriamente dito, e um componente de aprendizado, que observa os resultados e ajusta o primeiro para melhorá-lo com a experiência. É o que dá autonomia ao agente e o que torna a série inteira possível: os artigos sobre algoritmos genéticos e redes neurais são, no fundo, dois modos diferentes de construir o componente de aprendizado. O custo é a maquinaria de avaliar o próprio desempenho e alterar o próprio comportamento; o ganho é operar bem em ambientes que o projetista não conhecia por completo de antemão, que são todos os ambientes interessantes.

Considere um agente que começa sem saber qual direção seguir em um mundo em linha. Ele experimenta ações, recebe uma pequena penalidade enquanto permanece longe da meta e recebe uma recompensa ao alcançá-la. Cada transição observada altera o valor atribuído às ações, de modo que a experiência muda decisões futuras. No Artigo 16, Processos de decisão e aprendizado por reforço, esse agente será treinado por Q-learning, e sua política aprendida será avaliada separadamente da exploração usada durante o treinamento.

7. Um agente reativo em C++23

Fechamos com código, como manda o combinado, para que a matemática das seções anteriores deixe de ser abstrata. O programa a seguir implementa o mundo do aspirador determinístico e o agente reativo simples do Exercício 1, e calcula a medida de desempenho pura $M=\sum_{t}\text{limpos}(t)$ ao longo de oito passos. É C++23 completo. No MSVC 19.51, usamos cl /std:c++latest /permissive- /W4 /EHsc /utf-8 /O2 aspirador.cpp. O modo /std:c++latest é necessário porque a Microsoft ainda habilita por ele parte dos recursos publicados no C++23; a página de conformidade deve ser consultada quando a versão do compilador mudar.

#include <algorithm>
#include <array>
#include <cstddef>
#include <iostream>
#include <ranges>
#include <string_view>
#include <utility>

enum class Local : std::size_t { A, B };
enum class Acao { aspirar, direita, esquerda };

struct Mundo {
    std::array<bool, 2> sujo{true, true};
    Local local = Local::A;
};

struct Percepcao {
    Local local;
    bool sujo_aqui;
};

[[nodiscard]] constexpr Acao agente_reativo(const Percepcao percepcao) noexcept {
    if (percepcao.sujo_aqui) {
        return Acao::aspirar;
    }
    return percepcao.local == Local::A ? Acao::direita : Acao::esquerda;
}

[[nodiscard]] constexpr std::string_view nome(const Acao acao) noexcept {
    switch (acao) {
        case Acao::aspirar: return "aspirar";
        case Acao::direita: return "direita";
        case Acao::esquerda: return "esquerda";
    }
    std::unreachable();
}

[[nodiscard]] int comodos_limpos(const Mundo& mundo) {
    return static_cast<int>(std::ranges::count(mundo.sujo, false));
}

void executar(Mundo& mundo, const Acao acao) {
    const auto indice = std::to_underlying(mundo.local);
    switch (acao) {
        case Acao::aspirar: mundo.sujo[indice] = false; break;
        case Acao::direita: mundo.local = Local::B; break;
        case Acao::esquerda: mundo.local = Local::A; break;
    }
}

int main() {
    Mundo mundo;
    int desempenho = 0;
    constexpr int passos = 8;

    for (int t = 1; t <= passos; ++t) {
        const auto indice = std::to_underlying(mundo.local);
        const Percepcao percepcao{mundo.local, mundo.sujo[indice]};
        const Acao acao = agente_reativo(percepcao);

        executar(mundo, acao);
        const int limpos = comodos_limpos(mundo);
        desempenho += limpos;

        std::cout << "passo " << t
                  << ": acao=" << nome(acao)
                  << ", limpos=" << limpos << '\n';
    }

    std::cout << "medida de desempenho M = " << desempenho << '\n';
    return desempenho == 14 ? 0 : 1;
}

A saída termina com M = 14, o número que deduzimos à mão no Exercício 1. O retorno diferente de zero transforma esse valor em uma verificação executável e impede que uma alteração silenciosa mude o experimento. O tipo Percepcao também mantém uma fronteira importante: o agente recebe apenas (local, sujo_aqui), nunca o Mundo inteiro. Essa separação não é estética; ela traduz em código a observabilidade parcial da Seção 5 e impede a leitora de escrever, sem querer, um agente que trapaceia olhando o estado que não deveria enxergar. enum class impede misturar locais e ações, std::to_underlying converte o local para o índice da matriz de forma explícita, e std::ranges::count expressa a contagem sem repetir aritmética de índices.

8. Questões difíceis de múltipla escolha

Os conceitos deste artigo atravessam várias seções e perdem parte de sua força quando são avaliados isoladamente. Por isso, em vez de acrescentar outro conjunto de exercícios a cada seção, o laboratório a seguir reúne dez questões difíceis que exigem comparar definições, aplicar critérios de racionalidade e distinguir arquiteturas próximas. Há questões de classificação V/F e de asserção e razão. Depois de corrigir cada resposta, o laboratório apresenta o gabarito, justifica cada sentença ou asserção e mostra por que as demais alternativas não se sustentam.

9. O fim do começo

Definimos agente, ambiente, medida de desempenho e, no centro de tudo, o agente racional, aquele que maximiza o desempenho esperado dado o que sabe. Vimos que racionalidade não é onisciência nem sorte, que a medida de desempenho é uma escolha de projeto que determina o comportamento ótimo, e que a arquitetura do agente sobe uma escada de complexidade conforme o ambiente se torna parcialmente observável, estocástico, sequencial e multiagente.

Falta o principal: como um agente baseado em objetivos, de posse de um modelo do mundo, encontra a sequência de ações que o leva ao objetivo. Esse problema tem um nome, busca, e uma matemática própria, e é para ela que vamos. No próximo artigo, o espaço de estados deixa de ser um par de cômodos e vira um grafo, e o agente racional se torna um algoritmo que o percorre.

Acrônimos e Abreviações neste artigo

A seguir está a lista de todos os acrônimos e abreviações identificados no texto, organizados em ordem alfabética com o termo original em inglês e a tradução para o português:

Acrônimo / Abreviação Definição em Inglês Tradução em Português
BLAS Basic Linear Algebra Subprograms Subprogramas Básicos de Álgebra Linear
CPU / CPUs Central Processing Unit Unidade Central de Processamento
FLOPs Floating Point Operations Operações de Ponto Flutuante
FP32 32-bit Floating Point Ponto Flutuante de 32 bits
GEMM General Matrix Multiply Multiplicação Geral de Matrizes
GPU Graphics Processing Unit Unidade de Processamento Gráfico
IA Artificial Intelligence Inteligência Artificial
I-JEPA Image Joint-Embedding Predictive Architecture Arquitetura Preditiva de Incorporação Conjunta de Imagem
JEPA Joint-Embedding Predictive Architecture Arquitetura Preditiva de Incorporação Conjunta
KiB Kibibyte Kibibyte
MAE Masked Autoencoder Autocodificador Mascarado
MSE Mean Squared Error Erro Quadrático Médio
MSVC Microsoft Visual C++ Microsoft Visual C++
PCA Principal Component Analysis Análise de Componentes Principais
SIMD Single Instruction, Multiple Data Instrução Única, Múltiplos Dados
SimCLR Simple Framework for Contrastive Learning of Visual Representations Estrutura Simples para Aprendizado Contrastivo de Representações Visuais

Referências

LUGER, G. F. Artificial Intelligence: structures and strategies for complex problem solving. 6. ed. Albuquerque: University of New Mexico, 2009. Disponível em: https://www.cs.unm.edu/~luger/ai-final/. Acesso em: 24 jul. 2026.

LYNCH, S. Inside the AI Index: 12 takeaways from the 2026 report. Stanford: Stanford Institute for Human-Centered Artificial Intelligence, 2026. Disponível em: https://hai.stanford.edu/news/inside-the-ai-index-12-takeaways-from-the-2026-report. Acesso em: 24 jul. 2026.

MCCARTHY, J.; MINSKY, M. L.; ROCHESTER, N.; SHANNON, C. E. A proposal for the Dartmouth summer research project on artificial intelligence. Stanford: Stanford University, 1955. Disponível em: https://www-formal.stanford.edu/jmc/history/dartmouth/dartmouth.html. Acesso em: 24 jul. 2026.

MICROSOFT. Microsoft C/C++ language conformance by Visual Studio version. Redmond, 2026. Disponível em: https://learn.microsoft.com/en-us/cpp/overview/visual-cpp-language-conformance?view=msvc-170. Acesso em: 24 jul. 2026.

RUSSELL, S.; NORVIG, P. Artificial Intelligence: a modern approach. 4. ed. Hoboken: Pearson, 2020. Disponível em: https://aima.cs.berkeley.edu/. Acesso em: 24 jul. 2026.

TURING, A. M. Computing machinery and intelligence. Mind, Oxford, v. LIX, n. 236, p. 433–460, 1950. DOI: https://doi.org/10.1093/mind/LIX.236.433. Acesso em: 24 jul. 2026.

UNIVERSITY OF CALIFORNIA, BERKELEY. Introduction to Artificial Intelligence: agents. Berkeley, 2024. Disponível em: https://inst.eecs.berkeley.edu/~cs188/textbook/search/agents.html. Acesso em: 24 jul. 2026.

  1. TURING, A. M. Computing machinery and intelligence. Mind, v. LIX, n. 236, p. 433–460, 1950. Turing propõe substituir a pergunta “as máquinas podem pensar?” pelo jogo da imitação, hoje conhecido como teste de Turing. 

  2. MCCARTHY, J.; MINSKY, M. L.; ROCHESTER, N.; SHANNON, C. E. A proposal for the Dartmouth summer research project on artificial intelligence, 1955. Reimpresso em AI Magazine, v. 27, n. 4, 2006. É o documento que cunhou a expressão artificial intelligence

  3. LYNCH, S. Inside the AI Index: 12 takeaways from the 2026 report. Stanford Institute for Human-Centered Artificial Intelligence, 2026. O valor mede tarefas no benchmark Terminal-Bench, não uma capacidade geral de agir racionalmente em qualquer ambiente. 

Índice da Série: Inteligência Artificial Aplicada

  • 1. Fundamentos da IA e Agentes Inteligentes (Você está aqui)

(Updated: )