Gripper - Problema 1

Bruno Ribas, baseado no domínio GRIPPER do IPC-1998

Preâmbulo

Temos um cenário com um conjunto de salas, e dentro dessas salas podem existir bolas. Um robô está encarregado de mover as bolas entre as salas. O robô possui duas pinças: uma left (esquerda) e outra right (direita), que ele usa para segurar as bolas.

O objetivo dessa tarefa é transferir todas as bolas de uma sala inicial para uma sala destino. Para que isso seja feito, o robô usa suas duas pinças para pegar as bolas em uma sala e levá-las para outra sala, uma de cada vez.

Você deve criar um arquivo de problema inspirado nesse cenário e utilizando o arquivo de domínio fornecido abaixo. Veja que o arquivo de domínio descreve os predicados e ações que o robô pode realizar. Sua tarefa é modelar um problema específico dentro deste domínio.

O problema deve considerar o seguinte:

Entrada

Este problema não requer entrada, pois ele está completamente definido na descrição acima.

Saída

Não há uma saída específica a ser produzida pelo problema. O que você precisa garantir é que o arquivo de problema que você implementar funcione corretamente com o domínio fornecido abaixo. Isso pode ser verificado ao rodar um planejador capaz de processar problemas definidos em PDDL (Planning Domain Definition Language), passando o domínio e o seu problema como parâmetros.

Observação: Certifique-se de que seu arquivo de problema é funcional, executando um planejador PDDL com o domínio e problema definidos.

Observação2: Você pode testar o seu exemplo diretamente pelo sistema https://plan-editor.naquadah.com.br/

O que deve ser enviado

Você deve enviar apenas um arquivo de problema com a extensão .pddl, que implemente o cenário descrito (com duas salas e quatro bolas) a partir do domínio fornecido abaixo.

Domínio

Abaixo está o arquivo de domínio que define a infraestrutura básica do sistema:

(define (domain gripper-typed)
   (:requirements :typing)
   (:types room ball gripper)
   (:constants left right - gripper)
   (:predicates
    (at-robby ?r - room)            ;; O robô está em uma sala
      (at ?b - ball ?r - room)        ;; Uma bola está em uma sala
    (free ?g - gripper)             ;; A pinça está livre
      (carry ?o - ball ?g - gripper)) ;; Uma pinça está segurando uma bola

   ;; Ação de mover o robô entre salas
   (:action move
       :parameters  (?from ?to - room)
       :precondition (at-robby ?from)
       :effect (and  (at-robby ?to)
             (not (at-robby ?from))))

   ;; Ação de pegar uma bola com uma das pinças, em uma determinada sala
   (:action pick
       :parameters (?obj - ball ?room - room ?gripper - gripper)
       :precondition (and (at ?obj ?room) (at-robby ?room) (free ?gripper))
       :effect (and (carry ?obj ?gripper)
            (not (at ?obj ?room))
            (not (free ?gripper))))

   ;; Ação de soltar uma bola de uma pinça em uma sala específica
   (:action drop
       :parameters (?obj - ball ?room - room ?gripper - gripper)
       :precondition (and (carry ?obj ?gripper) (at-robby ?room))
       :effect (and (at ?obj ?room)
            (free ?gripper)
            (not (carry ?obj ?gripper)))))

Author: Bruno Ribas, baseado no domínio GRIPPER do IPC-1998