This commit is contained in:
Steffen Illium
2023-07-06 12:01:25 +02:00
parent dc134d71e0
commit 836495a884
72 changed files with 742 additions and 298 deletions

View File

@@ -1,6 +1,5 @@
from typing import List, Union
from marl_factory_grid.environment import constants as c
from marl_factory_grid.environment.actions import Action
from marl_factory_grid.environment.entity.entity import Entity
from marl_factory_grid.utils.render import RenderEntity
@@ -8,6 +7,8 @@ from marl_factory_grid.utils import renderer
from marl_factory_grid.utils.helpers import is_move
from marl_factory_grid.utils.results import ActionResult, Result
from marl_factory_grid.environment import constants as c
class Agent(Entity):
@@ -24,7 +25,7 @@ class Agent(Entity):
return self._observations
@property
def can_collide(self):
def var_can_collide(self):
return True
def step_result(self):

View File

@@ -1,15 +1,20 @@
import abc
from marl_factory_grid.environment import constants as c
from marl_factory_grid.environment.entity.object import EnvObject
from marl_factory_grid.utils.render import RenderEntity
from .. import constants as c
from .object import EnvObject
from ...utils.render import RenderEntity
from ...utils.results import ActionResult
class Entity(EnvObject, abc.ABC):
"""Full Env Entity that lives on the environment Grid. Doors, Items, DirtPile etc..."""
@property
def has_position(self):
def state(self):
return self._status or ActionResult(entity=self, identifier=c.NOOP, validity=c.VALID, reward=0)
@property
def var_has_position(self):
return self.pos != c.VALUE_NO_POS
@property
@@ -64,12 +69,13 @@ class Entity(EnvObject, abc.ABC):
def __init__(self, tile, **kwargs):
super().__init__(**kwargs)
self._status = None
self._tile = tile
tile.enter(self)
def summarize_state(self) -> dict:
return dict(name=str(self.name), x=int(self.x), y=int(self.y),
tile=str(self.tile.name), can_collide=bool(self.can_collide))
tile=str(self.tile.name), can_collide=bool(self.var_can_collide))
@abc.abstractmethod
def render(self):

View File

@@ -78,37 +78,37 @@ class EnvObject(Object):
return self.name
@property
def is_blocking_light(self):
def var_is_blocking_light(self):
try:
return self._collection.is_blocking_light or False
return self._collection.var_is_blocking_light or False
except AttributeError:
return False
@property
def can_move(self):
def var_can_move(self):
try:
return self._collection.can_move or False
return self._collection.var_can_move or False
except AttributeError:
return False
@property
def is_blocking_pos(self):
def var_is_blocking_pos(self):
try:
return self._collection.is_blocking_pos or False
return self._collection.var_is_blocking_pos or False
except AttributeError:
return False
@property
def has_position(self):
def var_has_position(self):
try:
return self._collection.has_position or False
return self._collection.var_has_position or False
except AttributeError:
return False
@property
def can_collide(self):
def var_can_collide(self):
try:
return self._collection.can_collide or False
return self._collection.var_can_collide or False
except AttributeError:
return False

View File

@@ -35,11 +35,11 @@ class GlobalPosition(BoundEntityMixin, EnvObject):
@property
def encoding(self):
if self._normalized:
return tuple(np.divide(self._bound_entity.pos, self._level_shape))
return tuple(np.divide(self._bound_entity.pos, self._shape))
else:
return self.bound_entity.pos
def __init__(self, *args, normalized: bool = True, **kwargs):
def __init__(self, level_shape, *args, normalized: bool = True, **kwargs):
super(GlobalPosition, self).__init__(*args, **kwargs)
self._level_shape = math.sqrt(self.size)
self._normalized = normalized
self._shape = level_shape

View File

@@ -11,23 +11,23 @@ from marl_factory_grid.utils import helpers as h
class Floor(EnvObject):
@property
def has_position(self):
def var_has_position(self):
return True
@property
def can_collide(self):
def var_can_collide(self):
return False
@property
def can_move(self):
def var_can_move(self):
return False
@property
def is_blocking_pos(self):
def var_is_blocking_pos(self):
return False
@property
def is_blocking_light(self):
def var_is_blocking_light(self):
return False
@property
@@ -51,7 +51,7 @@ class Floor(EnvObject):
@property
def guests_that_can_collide(self):
return [x for x in self.guests if x.can_collide]
return [x for x in self.guests if x.var_can_collide]
@property
def guests(self):
@@ -67,7 +67,7 @@ class Floor(EnvObject):
@property
def is_blocked(self):
return any([x.is_blocking_pos for x in self.guests])
return any([x.var_is_blocking_pos for x in self.guests])
def __init__(self, pos, **kwargs):
super(Floor, self).__init__(**kwargs)
@@ -86,7 +86,7 @@ class Floor(EnvObject):
return bool(len(self._guests))
def enter(self, guest):
if (guest.name not in self._guests and not self.is_blocked) and not (guest.is_blocking_pos and self.is_occupied()):
if (guest.name not in self._guests and not self.is_blocked) and not (guest.var_is_blocking_pos and self.is_occupied()):
self._guests.update({guest.name: guest})
return c.VALID
else:
@@ -112,7 +112,7 @@ class Floor(EnvObject):
class Wall(Floor):
@property
def can_collide(self):
def var_can_collide(self):
return True
@property
@@ -123,9 +123,9 @@ class Wall(Floor):
return RenderEntity(c.WALL, self.pos)
@property
def is_blocking_pos(self):
def var_is_blocking_pos(self):
return True
@property
def is_blocking_light(self):
def var_is_blocking_light(self):
return True