mirror of
https://github.com/illiumst/marl-factory-grid.git
synced 2025-05-23 15:26:43 +02:00
86 lines
2.4 KiB
Python
86 lines
2.4 KiB
Python
from typing import Union
|
|
from dataclasses import dataclass
|
|
|
|
from marl_factory_grid.environment.entity.object import Object
|
|
|
|
TYPE_VALUE = 'value'
|
|
TYPE_REWARD = 'reward'
|
|
TYPES = [TYPE_VALUE, TYPE_REWARD]
|
|
|
|
|
|
@dataclass
|
|
class InfoObject:
|
|
"""
|
|
Data class representing information about an entity or the global environment.
|
|
"""
|
|
identifier: str
|
|
val_type: str
|
|
value: Union[float, int]
|
|
|
|
|
|
@dataclass
|
|
class Result:
|
|
"""
|
|
A generic result class representing outcomes of operations or actions.
|
|
|
|
Attributes:
|
|
- identifier: A unique identifier for the result.
|
|
- validity: A boolean indicating whether the operation or action was successful.
|
|
- reward: The reward associated with the result, if applicable.
|
|
- value: The value associated with the result, if applicable.
|
|
- entity: The entity associated with the result, if applicable.
|
|
"""
|
|
identifier: str
|
|
validity: bool
|
|
reward: Union[float, None] = None
|
|
value: Union[float, None] = None
|
|
entity: Object = None
|
|
|
|
def get_infos(self):
|
|
"""
|
|
Get information about the result.
|
|
|
|
:return: A list of InfoObject representing different types of information.
|
|
"""
|
|
n = self.entity.name if self.entity is not None else "Global"
|
|
# Return multiple Info Dicts
|
|
return [InfoObject(identifier=f'{n}_{self.identifier}',
|
|
val_type=t, value=self.__getattribute__(t)) for t in TYPES
|
|
if self.__getattribute__(t) is not None]
|
|
|
|
def __repr__(self):
|
|
valid = "not " if not self.validity else ""
|
|
reward = f" | Reward: {self.reward}" if self.reward is not None else ""
|
|
value = f" | Value: {self.value}" if self.value is not None else ""
|
|
entity = f" | by: {self.entity.name}" if self.entity is not None else ""
|
|
return f'{self.__class__.__name__}({self.identifier.capitalize()} {valid}valid{reward}{value}{entity})'
|
|
|
|
|
|
@dataclass
|
|
class ActionResult(Result):
|
|
"""
|
|
A specific Result class representing outcomes of actions.
|
|
"""
|
|
pass
|
|
|
|
|
|
@dataclass
|
|
class DoneResult(Result):
|
|
"""
|
|
A specific Result class representing the completion of an action or operation.
|
|
"""
|
|
pass
|
|
|
|
|
|
@dataclass
|
|
class State(Result):
|
|
# TODO: change identifier to action/last_action
|
|
pass
|
|
|
|
@dataclass
|
|
class TickResult(Result):
|
|
"""
|
|
A specific Result class representing outcomes of tick operations.
|
|
"""
|
|
pass
|