Core#
Core abstractions for state, action, observation, and features.
Action#
- class heron.core.action.Action#
Action container with continuous and discrete components.
- c: np.ndarray#
Continuous action values.
- d: np.ndarray#
Discrete action values.
- set_specs(dim_c: int = 0, dim_d: int = 0, range: tuple = None, n_options: list = None)#
Configure action space specifications.
- Parameters:
dim_c – Number of continuous dimensions
dim_d – Number of discrete dimensions
range – Tuple of (low, high) arrays for continuous actions
n_options – List of option counts for discrete actions
- sample()#
Sample random action within specs.
- reset()#
Reset action to zeros.
Usage:
from heron.core.action import Action import numpy as np action = Action() action.set_specs( dim_c=2, range=(np.array([-1.0, -1.0]), np.array([1.0, 1.0])) ) action.sample() # Random action action.c[:] = [0.5, -0.3] # Set specific values
Observation#
- class heron.core.observation.Observation(local: dict = None, global_: dict = None, messages: list = None, timestamp: float = 0.0)#
Observation container for agent perception.
- Parameters:
local – Local observation data
global – Global observation data (centralized mode)
messages – Received messages (distributed mode)
timestamp – Observation timestamp
- local: dict#
Local observation features.
- global_: dict#
Global features (available in centralized mode).
- messages: list#
Messages from other agents (distributed mode).
Usage:
from heron.core.observation import Observation obs = Observation( local={"state": np.array([1.0, 2.0])}, global_={"price": np.array([50.0])}, timestamp=0.0 )
State#
- class heron.core.state.State#
Base state container with feature composition.
- vector(visibility_tags: list = None) np.ndarray#
Get state as numpy array, filtered by visibility.
- dim(visibility_tags: list = None) int#
Get total dimension of visible features.
- class heron.core.state.FieldAgentState#
State for field-level agents.
- class heron.core.state.CoordinatorState#
State for coordinator agents with subordinate aggregation.
Usage:
from heron.core.state import FieldAgentState state = FieldAgentState() state.add_feature("temperature", temp_feature) state.add_feature("humidity", humidity_feature) # Get full state vector full_vec = state.vector() # Get only coordinator-visible features coord_vec = state.vector(visibility_tags=["coordinator"])
Feature#
- class heron.core.feature.Feature(visibility: list[str] = None)#
Base class for composable features with visibility control.
- Parameters:
visibility – List of visibility tags (e.g., [“owner”, “coordinator”])
- visibility: list[str]#
Tags controlling who can observe this feature.
- abstractmethod vector() np.ndarray#
Return feature as numpy array.
- abstractmethod dim() int#
Return feature dimension.
Default Visibility Tags:
owner: Only the owning agentcoordinator: Owner and its coordinatorsystem: System-level agents onlyglobal: Everyone
Usage:
from heron.core.feature import Feature import numpy as np class TemperatureFeature(Feature): def __init__(self, value: float = 20.0): super().__init__(visibility=["owner", "coordinator"]) self.value = value def vector(self) -> np.ndarray: return np.array([self.value], dtype=np.float32) def dim(self) -> int: return 1
Policies#
- class heron.core.policies.Policy#
Base class for agent policies.
- abstractmethod select_action(observation: Observation) Action#
Select action given observation.
- class heron.core.policies.RandomPolicy(action_space)#
Random action selection policy.
- class heron.core.policies.RuleBasedPolicy#
Template for rule-based policies.
Usage:
from heron.core.policies import RandomPolicy policy = RandomPolicy(action_space=env.action_space) action = policy.select_action(observation)