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

Reply via email to