Source code for pomdp_py.problems.tag.env.env

import pomdp_py
from pomdp_py.problems.tag.domain.state import *
from pomdp_py.problems.tag.models.transition_model import *
from pomdp_py.problems.tag.models.reward_model import *
from pomdp_py.problems.tag.models.components.motion_policy import *
from pomdp_py.problems.tag.models.components.grid_map import *
from pomdp_py.problems.multi_object_search.env.env import interpret
from pomdp_py.problems.multi_object_search.env.visual import MosViz


[docs] class TagEnvironment(pomdp_py.Environment): def __init__(self, init_state, grid_map, pr_stay=0.2, small=1, big=10): self._grid_map = grid_map target_motion_policy = TagTargetMotionPolicy(grid_map, pr_stay) transition_model = TagTransitionModel(grid_map, target_motion_policy) reward_model = TagRewardModel(small=small, big=big) super().__init__(init_state, transition_model, reward_model) @property def width(self): return self._grid_map.width @property def length(self): return self._grid_map.length @property def grid_map(self): return self._grid_map
[docs] @classmethod def from_str(cls, worldstr, **kwargs): dim, robots, objects, obstacles, _ = interpret(worldstr) assert len(robots) == 1, "Does not support multiple robots." robot_position = robots[list(robots.keys())[0]].pose[:2] targets = [] obstacle_poses = set({}) for objid in objects: if objid not in obstacles: targets.append(objid) else: obstacle_poses.add(objects[objid].pose) assert len(targets) == 1, "Does not support multiple objects." target_position = objects[targets[0]].pose init_state = TagState(robot_position, target_position, False) grid_map = GridMap(dim[0], dim[1], obstacle_poses) return TagEnvironment(init_state, grid_map, **kwargs)