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:
rooma e roomb
(ambas do tipo room).ball1, ball2,
ball3 e ball4 (todas do tipo ball).rooma e tanto a
pinça left quanto a pinça right estão livres.rooma,
e o objetivo é mover todas as bolas para a sala roomb.Este problema não requer entrada, pois ele está completamente definido na descrição acima.
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/
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.
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