GOLOG é uma linguagem de programação lógica de alto nível projetada para a especificação e execução de ações complexas em domínios dinâmicos. Ela é fundamentada no cálculo de situações, um formalismo lógico de primeira ordem para raciocinar sobre ação e mudança. Desenvolvida na Universidade de Toronto, a GOLOG permite que um interpretador mantenha uma caracterização direta do mundo modelado, possibilitando que aplicações raciocinem sobre pré-condições, efeitos e sequências potenciais de ações antes de se comprometerem com um curso de ação específico.
Diferentemente de linguagens procedurais convencionais, como C, que executam instruções em uma ordem linear predeterminada, a GOLOG opera sobre um modelo abstrato. O código-fonte define o problema e o interpretador gera a sequência de ações, tornando-a uma linguagem de programação de quinta geração. Essa abordagem é particularmente adequada para domínios complexos, como robótica, onde o solucionador deve determinar dinamicamente a próxima ação com base no estado atual.
Histórico
O cálculo de situações, o formalismo fundamental da GOLOG, foi proposto pela primeira vez pelo pioneiro da IA John McCarthy em 1963. Esse arcabouço lógico forneceu uma maneira de representar mundos dinâmicos, ações e seus efeitos, estabelecendo as bases para linguagens de programação posteriores que pudessem raciocinar sobre ação e mudança. A GOLOG emergiu dessa tradição, integrando o cálculo de situações em um paradigma de programação prático.
Descrição da Linguagem
Um interpretador GOLOG mantém automaticamente uma caracterização direta do mundo dinâmico sendo modelado, com base em axiomas fornecidos pelo usuário sobre pré-condições, efeitos de ações e o estado inicial. Isso permite que a aplicação raciocine sobre a condição do mundo e considere os impactos de diferentes ações potenciais antes de focar em uma específica. A linguagem define um espaço de estados no qual um agente pode operar, e um caminho é encontrado por meio de busca no espaço de estados. Para acelerar esse processo, programas GOLOG são frequentemente realizados como redes hierárquicas de tarefas.
GOLOG é uma linguagem de programação lógica, distinta das linguagens de programação convencionais. Em uma linguagem procedural como C, o programador cria uma sub-rotina com instruções que o computador executa linearmente. Em contraste, a GOLOG trabalha com um modelo abstrato, e o interpretador gera a sequência de ações. O código-fonte define o problema, e cabe ao solucionador encontrar a próxima ação, facilitando o gerenciamento de problemas complexos de robótica e outros domínios.
Extensões e Dialetos
Além da GOLOG original, várias extensões foram desenvolvidas. A ConGOLOG fornece concorrência e interrupções, permitindo comportamentos de agente mais complexos. Outros dialetos, como IndiGOLOG e Readylog, foram criados para aplicações em tempo real, onde leituras de sensores são atualizadas em tempo real. Essas extensões expandem a aplicabilidade da GOLOG para ambientes dinâmicos e interativos.
Aplicações
A GOLOG tem sido usada para modelar o comportamento de agentes autônomos, combinando um formalismo de ação baseado em lógica para descrever o ambiente com construtos para construir ações complexas usando recursos típicos de linguagens de programação. Ela é aplicada no controle de alto nível de robôs e processos industriais, agentes virtuais e simulação de eventos discretos. Além disso, a GOLOG pode ser usada para desenvolver sistemas de agentes no estilo Crença-Desejo-Intenção (BDI), comuns em sistemas multiagentes e robótica cognitiva.
Planejamento e Scripting
Em contraste com a Linguagem de Definição de Domínio de Planejamento (PDDL), a GOLOG suporta tanto planejamento quanto scripting. O planejamento envolve definir um estado meta no modelo do mundo, e o solucionador leva o sistema lógico a esse estado. O scripting de comportamento implementa procedimentos reativos que rodam como um programa de computador. Por exemplo, na autoria de histórias, o usuário define o que deve ser verdadeiro no final do enredo. Um solucionador aplica ações possíveis à situação atual até que o estado meta seja alcançado, com a especificação do estado meta e das ações possíveis realizada no modelo lógico do mundo. Alternativamente, um comportamento reativo fixo não precisa de um solucionador; a sequência de ações é fornecida em uma linguagem de scripting, e o interpretador GOLOG, escrito em Prolog, executa o script para levar a história ao estado meta.
Ver Também
- cálculo-de-situações (não na lista, mas relevante)
- programação-lógica (não na lista, mas relevante)
- agentes-autônomos (não na lista, mas relevante)
- robótica (não na lista, mas relevante)