-
Notifications
You must be signed in to change notification settings - Fork 0
2021 05 16 Agent Goal Tree Nodes
Goal Selection of central goal tree:
Do not pursue for now, maybe this is not needed at all or there are alternatives. One alternative would be "already-executed" sibling goals that are executable if the resources are supplied in other sub-tree. Then, there is no "stealing" but just a simple reformulation procedure of the finished goal.
Update: keep it simple for now
- order-specific priority for each sub-tree
- in goal-meta fact
- add different kind of priorities if we observe inefficiencies
Multiple components:
- order-specific priority (order points, time estimates etc)
- goal-specific priority (constant, per goal class)
- robot-specific priority (distance)
- dependency-specific priority
- (tree-ordering-specific priority)
Run-one goal, either "already-cleared" goal or discard. "already-cleared" goal depends on any goal that might utilize the cap carrier If a discard goal is executable along with a better alternative (a fill rs goal in another tree), then that alternative needs a priority increase
example: Mount cap and buffer cap interactions
- Mount cap generally depends on buffer goals with appropriate params (independent from the subtree those buffer goals are located in)
- Mount cap may be selected utilizing a dependency
- if dependency in own subtree -> no action required
- if dependency in other subtree -> swap dependency source (buffer cap) from other subtree with the one from the own subtree does it make sense to combine buffer + instruct goals under one parent? swap mechanic: a mount cap/ring goal is executable, but its siblings are still formulated -> swap those formulated siblings with the ones of the least recently started ones in other subtrees (where the subtree is not already completed)
Step 0: Robot waiting, "all" goals formulated (expect those that are currently >Selected) and not executable
Step 1: Executability of Leaf nodes
Step 2: propagate Executability (adjust priorities)
Step 3: Root goal gets selected -> expanded -> dispatched and commits to subgoal
Step 4: recursively select -> dispatched (but only among executable subgoals, also depends on compound goal type)
outcome: one or more simple goals may be selected -> Dispatched
one or more inner nodes dispatched
Step 5: flush all executable flags
new goal needs to be selected: do step 1 and 2 among all executable dispatched inner nodes the one with the highest priority selects a subgoal continue with step 4:
(In case of failure while the following steps are happening, abort all selection, reset to step 0)
Step 0: Robot waiting, "all" goals formulated (expect those that are currently >Selected) and not executable
Step 1: Executability of Leaf nodes
Step 2: propagate Executability (adjust priorities)
Step 3: Root goal gets selected
Step 4: recursively select (but only among executable subgoals, also depends on compound goal type)
outcome: one or more simple goals may be selected -> Dispatched)
Step 5: flush all executable flags, return inner nodes to Formulated
case: inner node finished -> Finished Completed and never gets reset to formulated