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)room ball gripper)
(:types - gripper)
(:constants left right
(:predicates- room) ;; O robô está em uma sala
(at-robby ?r - ball ?r - room) ;; Uma bola está em uma sala
(at ?b - gripper) ;; A pinça está livre
(free ?g - ball ?g - gripper)) ;; Uma pinça está segurando uma bola
(carry ?o
;; Ação de mover o robô entre salas
(:action move- room)
:parameters (?from ?to
:precondition (at-robby ?from)and (at-robby ?to)
:effect (not (at-robby ?from))))
(
;; Ação de pegar uma bola com uma das pinças, em uma determinada sala
(:action pick- ball ?room - room ?gripper - gripper)
:parameters (?obj and (at ?obj ?room) (at-robby ?room) (free ?gripper))
:precondition (and (carry ?obj ?gripper)
:effect (not (at ?obj ?room))
(not (free ?gripper))))
(
;; Ação de soltar uma bola de uma pinça em uma sala específica
(:action drop- ball ?room - room ?gripper - gripper)
:parameters (?obj and (carry ?obj ?gripper) (at-robby ?room))
:precondition (and (at ?obj ?room)
:effect (
(free ?gripper)not (carry ?obj ?gripper))))) (
Author: Bruno Ribas, baseado no domínio GRIPPER do IPC-1998