In some domains (like the one attached), if the initial state contains only objects of a certain type, the planner infers types wrongly during planning.
Original message from student below:
Defini que as ações enter e exit devem ter como parâmetro os tipos mais específicos que representam um corredor e uma sala, para ressaltar que o robô entra em uma sala a partir de um corredor e deve sair da sala para um corredor.
(:action enter
:parameters
(?from - hallwayloc
?room - room)
:precondition (and (at ?from) (connected ?from ?room))
:effect (and (at ?room) (not (at ?from)))
)
(:action exit
:parameters
(?room - room
?to - hallwayloc)
:precondition (and (at ?room) (connected ?to ?room))
:effect (and (at ?to) (not (at ?room)))
)
Tenho também a ação move cujos parâmetros devem ser do tipo hallwayloc, reforçando que a ação move deve ser utilizada somente para o deslocamento entre corredores.
(:action move
:parameters
(?from - hallwayloc
?to - hallwayloc)
:precondition (and (at ?from) (connected ?from ?to))
:effect (and (at ?to) (not (at ?from)))
)
E o predicado connected define que dois location - tipo base para hallwayloc e room - estão conectados um ao outro.
No problema pblonghall criei um local composto por 12 corredores conectados em ordem, inicializando com o robô no corredor hl1 e com objetivo de chegar ao corredor hl12. Entendi que de acordo com meus tipos declarados o robô deve chegar até o corredor hl12 utilizando somente a ação move, mas ao executar o planejador recebo o seguinte plano:
move(hl1,hl2)
enter(hl2,hl3)
enter(hl3,hl4)
enter(hl4,hl5)
move(hl5,hl6)
enter(hl6,hl7)
move(hl7,hl8)
move(hl8,hl9)
move(hl9,hl10)
enter(hl10,hl11)
enter(hl11,hl12)
Tenho outra versão do domínio e do mesmo problema sem utilizar tipos, onde restrinjo pelos predicados hallway e room nas pré-condições das ações, e nesta versão o plano utiliza somente a ação move.
Hoje baixei a última versão do JavaGP no sourceforge e os planos continuam os mesmos.
Creio que o Ramon consertou este bug há tempos.