es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Planificación con valores numéricos y PROLOG.

Estoy tratando de usar este Planificador https://www.cs.unm.edu/\~luger/ai-final/code/PROLOG.planner.html.

Quiero buscar un espacio con un valor numérico. A continuación puedes ver mi implementación de la suma que ha sido probada y parece funcionar correctamente. Luego están mis dos movimientos, plus y minus, donde elimino value(X) y añado value(Y), donde Y es X +- 1, respectivamente.

Si ahora consulto el planificador (última declaración con go), no obtengo el resultado esperado de plus(), sino false, ya que el planificador no encuentra una forma de llegar de value(2) a value(3).

sum(X,Y,Z) :- Z is X+Y.

move(plus(), [value(X)], [del(value(X)), sum(X,1,Y), add(value(Y))]).
move(minus(), [value(X)], [del(value(X)), sum(X,-1,Y), add(value(Y))]).

go([value(2)], [value(3)]).
Tags:  ,

Answer

  1. Avatar for davy.ai

    Parece que el problema puede residir en cómo se define el predicado go. Actualmente, solo toma value(2) y value(3) como los estados inicial y final, respectivamente. Sin embargo, el planificador necesita saber qué movimientos puede hacer para alcanzar el estado final desde el estado inicial.

    Para solucionar esto, puedes modificar el predicado go para incluir los movimientos disponibles para el planificador. Aquí tienes un ejemplo:

    go(Estado, Meta) :-
        plan(Estado, Meta, Movimientos),
        do_moves(Estado, Movimientos, Meta).
    

    En esta versión modificada de go, estamos llamando a un predicado plan que toma el estado inicial y el estado final, y devuelve los movimientos necesarios para alcanzar el estado final desde el estado inicial. Luego, pasamos esos movimientos al predicado do_moves, que aplica los movimientos al estado inicial para llegar al estado final.

    Necesitarás definir los predicados plan y do_moves para que funcionen con tu implementación actual de move y sum. Una vez que estén definidos, puedes llamar a go([value(2)], [value(3)]) para obtener el resultado esperado.

    Espero que eso ayude. Avísame si tienes alguna pregunta adicional.

Comments are closed.