Nesta palestra, vamos começar a construir a classe de agentes.
Portanto, abra sua classe básica de agente que você já criou.
Na parte superior, precisamos acrescentar na biblioteca de links.
Usaremos isso um pouco mais tarde para ordenar nossas metas com base em sua prioridade.
Portanto, será um link de pontos do sistema.
Certo.
Também precisamos acrescentar uma pequena classe de ajudantes no topo, que definirá nossos objetivos.
Agora, normalmente nestes sistemas você pode criar apenas um único objetivo que o agente tem, e o agente pode sair e satisfazer
esse objetivo e depois voltar.
Mas neste caso, vamos criar um monte de objetivos que têm sub objetivos e que tornarão o sistema um pouco
mais flexível se você quiser que o agente faça tarefas realmente complexas.
Assim, criaremos uma classe pública para o sub objetivo.
E vai ser bastante curto, mas vai ter um dicionário, é claro, tão público e será a mesma estrutura
que temos usado o tempo todo, porque precisamos mantê-lo muito consistente
e vamos chamá-lo de metas aqui dentro.
E depois teremos também uma remoção pública de bool.
A razão é que alguns agentes querem poder dar a eles um objetivo quando tiverem satisfeito
esse objetivo, então o objetivo é retirado de sua lista de intenções que eles querem fazer.
Assim, por exemplo, no caso do paciente, o paciente pode precisar ser tratado.
Portanto, ele vai entrar assim que estiver curado, não precisa passar por todas essas coisas novamente e, portanto,
esse objetivo pode ser removido.
Mas se você quer um objetivo que continua sendo acionado repetidamente, então você pode criar um que
você não está removendo depois de ter sido satisfeito.
Assim, por exemplo, a enfermeira terá o objetivo de descansar para que ela possa sair e ter um período de descanso
durante o turno de trabalho.
Agora isso vai continuar a aparecer repetidas vezes.
Portanto, esse é um objetivo que não queremos realmente remover do sistema depois de ter sido satisfeito.
Será como uma espécie de objetivo ocioso até que uma de suas condições seja satisfeita.
Certo, então vamos agora criar este sub objetivo tão público e passaríamos por um fio para
nosso valor chave em I para seu valor real e o bool são para remover.
Então aqui dentro.
Vamos apenas estabelecer objetivos iguais aos de um novo dicionário.
Para nosso fio e nossa int.
E as escolas não acrescentam aquela pela qual estamos passando.
Então, se e I.
E então também vamos fazer remover é igualar o que quer que seja quando for passado.
Agora o próprio agente vai ter uma lista de ações e uma lista de objetivos e esse tipo de coisas.
Portanto, vamos ao topo, antes de tudo, declarar uma lista pública de ações G, e a ação G será as ações que demos
a nosso agente para alcançar.
Portanto, aqui temos ação, e isso vai igualar uma nova lista de ações G ou ação singular.
Não coloque um S lá dentro.
E então também precisamos de muitas metas.
Portanto, vai ser um dicionário público de dicionários.
Portanto, basicamente é um dicionário de subobjetos que são basicamente outro dicionário int para nossos objetivos
de valor igual a um novo dicionário e então queremos subobjetos e int.
E então precisamos de um planejador, por isso vamos chamá-lo de planejador G.
Planejar.
Na verdade, ainda não criamos o planejador, mas esta será nossa turma que faz o planejamento.
Dados os objetivos.
O que vai retornar é um Q da ação.
Portanto, vamos usar o Q aqui dentro.
Portanto, será uma fila de ações g.
O g ação.
Vamos chamar isso de nossa fila de ação.
E depois uma ação g pública para a ação atual, para que possamos acompanhar o que o agente está fazendo a qualquer momento
em particular.
E depois também a mesma coisa para o objetivo.
Portanto, o sub objetivo e esse será o objetivo atual e registraremos que agora, no início, temos de criar
nossa gama de ações.
Vamos fazer isso para que para nosso agente você possa criar versões da classe de ação G aqui em cima e simplesmente deixá-las para o agente
no inspetor, o que significa que precisamos pegá-las quando o agente começar a trabalhar e
todas elas vão para uma matriz.
Então ação g e vamos chamar isso de x é igual a este ponto para obter ação g componente.
E não queremos apenas uma ação, mas seremos capazes de colocar muitas ações ali.
Portanto, na verdade, ele recebe componentes.
Assim, todas as ações que estão sentadas sobre o agente serão pegas e colocadas nesse ato.
Então o que vamos fazer é para cada ação G, um em ato, vamos colocar isso em nossa lista de ações para que as ações
não acrescentem.
I.
Um tipo de coisa semelhante que fizemos com nossas ações onde estávamos criando estas matrizes públicas que viriam à tona no inspetor, e depois
estávamos povoando nossos dicionários com aqueles que estavam acordados.
Mas no agente estamos fazendo isso dentro do método de partida aqui.
Muito bem.
Portanto, agora que começamos, retomamos nossas ações, ainda precisamos realmente declarar nosso planejador
G.
Agora, eu noto que nossas ações aqui, provavelmente eu deveria apenas colocar um pouco
de s no final para ter certeza de que temos nossa lista com o mesmo nome no início.
Certo.
E então o que vamos fazer para executar a ação, para que o agente execute o plano que foi desistido aqui, e isso
acontecerá aqui em baixo em uma atualização tardia.
Portanto, vamos fazer de nossa atualização uma atualização leve.
E por enquanto, vamos deixá-lo vazio porque precisamos trabalhar neste planejador.
Assim, o planejador vai obter os objetivos que precisam ser satisfeitos, uma lista das ações que temos
à nossa disposição, bem como os estados do mundo.
E a partir daí, vai construir uma árvore com todas as ações.
Então você está obtendo essencialmente um gráfico e esse gráfico nós então pesquisamos através do gráfico
de uma ponta a outra onde chegamos a um plano que vai satisfazer o objetivo dado.
O planeta é um código bastante complexo, então vou deixar isso para o próximo vídeo para que possamos
dedicar tudo à estrutura do planejador e como ele reúne as ações que irão satisfazer
os objetivos.