Hi All,
I've been coding a few solvers this week and I'm currently working on an HTN
planner/solver.
I just wanted to know if anyone out there has experience with any sort of HTN
planner, and if so, what should happen in the node refinement step. I'm
working in a domain specific languagecalled Premise and my source code follows.
It should be legible enough.
; file pam_p2.hierarchical_solver.memory;; Copyright (c) 2013, 2014 Michael S P
Miller. All Rights Reserved;; Piaget Modeler - [email protected];
require premiserequire pam_p2require pam_p2.solver
module pam_p2.hierarchical_solver
"------------------------------ Notes on Premise DSL -----------------------"
; Bind function ? usage: (? val ?var) or (? obj :prop1 ?var1 :prop2 ?var2 ...)
; Lists {}, function calls (), pattern query []
"------------------------------ HTN Solver Types ---------------------------"
let state :items ... ; properties not worth mentioning end
let node :search :depth 0 :state :remaining ; remaining tasks
to refine :partial ; partial solution ... end let search
:init :task :root :depth :frontier ... end
"------------------------------ Solver Functions ---------------------------"
operation create_hierachical_solution ; if the most salient task is not
enabled, and has no best matching method, ; then create a method (i.e.
solution) for the task. (with (? (most_salient_task) ?task)
(none (is_enabled ?task) (best_matching_solution ?task)) do
{?task} (? (create_search ?task) ?search) (while (> (count (get
?search :frontier)) 0) (? (pop ?search :frontier) ?node) ; retrieve
?node from frontier (? ?node :remaining ?remaining :partial ?partial) ;
bind vars (if (= (count ?remaining) 0) then (create_solution
?task (get ?search :init) ?partial) (old ?search) ; flag the search
object for deletion (return)) ; exit operation completely (?
(refine_node ?node) ?successors) (for ?item in ?successors
(push ?search :frontier ?item)))) push ?item onto the frontier end
function most_salient_task {} ; returns the most important task for the
current state of the system end
function is_enabled {?item} ; returns whether item is enabled (i.e., on)
in the current state end
function best_matching_solution {?task} ; returns any pre-existing methods
or operators to satisfy the task end function create_search {?task} ;
sets the initial state :init, root node :root, default max-depth :depth, ;
and :frontier nodes (set to the root node) for the returned search object end
function create_solution {?task ?initial_state ?plan} ; creates a solution
object with the HTN plan end
function refine_node {?node} ; TBD end
end
"------------------------------ EOF ---------------------------"
Otherwise it's digging into the innards of SHOP2 or O-PLAN or other such HTN
planners.I'd rather just have a broad outline or pseudocode algorithm if
possible.
Anyone knowledgeable about this?
Thanks in advance.
~PM
-------------------------------------------
AGI
Archives: https://www.listbox.com/member/archive/303/=now
RSS Feed: https://www.listbox.com/member/archive/rss/303/21088071-f452e424
Modify Your Subscription:
https://www.listbox.com/member/?member_id=21088071&id_secret=21088071-58d57657
Powered by Listbox: http://www.listbox.com