def num_reachable_placements(state, goal, oracle): reachable_vertices = ReachabilityTree(oracle, oracle.crg[state[ROBOT_VAR]], object_poses=state_object_poses(oracle, state), holding=state[HOLDING_VAR]).expand_reachable() return -sum(1 for v in reachable_vertices if v in oracle.vertex_operators and len(oracle.vertex_operators[v]) != 0)
def num_reachable(state, goal, oracle): return -len(ReachabilityTree(oracle, oracle.crg[state[ROBOT_VAR]], object_poses=state_object_poses(oracle, state), holding=state[HOLDING_VAR]).expand_reachable())
def num_reachable_goals(state, goal, oracle): important_objects = set(oracle.problem.goal_regions.keys() + oracle.problem.goal_poses.keys()) reachable_vertices = ReachabilityTree(oracle, oracle.crg[state[ROBOT_VAR]], object_poses=state_object_poses(oracle, state), holding=state[HOLDING_VAR]).expand_reachable() return -sum(1 for v in reachable_vertices if v in oracle.vertex_operators and some(lambda o: o.holding.object_name in important_objects, oracle.vertex_operators[v]))