Bang-Bang¶
A classical bang-bang controller agent.
A deterministic, stateless control policy that switches between two action values based on a setpoint comparison of a selected observation field.
- Control Logic:
If obs[obs_field] <= setpoint: Select “low” action
If obs[obs_field] > setpoint: Select “high” action
- Action Space Behavior:
Discrete(n): Low=0, High=n-1 (requires n >= 2)
Box: Low=action_space.low, High=action_space.high
Note: This is a non-learning agent (update() does nothing).
- class myriad.agents.classical.bangbang.AgentParams(action_space, setpoint, obs_field, low_action, high_action, invert=False)[source]¶
Bases:
objectStatic parameters for the bang-bang controller agent.
- Variables:
action_space (myriad.core.spaces.Space) – Action space (Box or Discrete)
setpoint (float) – Switching setpoint for bang-bang control
obs_field (str) – Field name from observation NamedTuple to use for setpoint comparison
low_action (jax.jaxlib._jax.Array) – Pre-computed low action value (for JIT efficiency)
high_action (jax.jaxlib._jax.Array) – Pre-computed high action value (for JIT efficiency)
invert (bool) – If True, swap action selection (high when below setpoint, low when above)
- low_action: Array¶
- high_action: Array¶
- __init__(action_space, setpoint, obs_field, low_action, high_action, invert=False)¶
- replace(**updates)¶
Returns a new object replacing the specified fields with new values.
- class myriad.agents.classical.bangbang.AgentState(obs_index)[source]¶
Bases:
objectBang-bang controller state.
- Variables:
obs_index (int) – Array index corresponding to obs_field (computed at init time)
- __init__(obs_index)¶
- replace(**updates)¶
Returns a new object replacing the specified fields with new values.
- myriad.agents.classical.bangbang.make_agent(action_space, setpoint=0.0, obs_field='theta', invert=False)[source]¶
Factory function to create a bang-bang controller agent.
- Parameters:
action_space (Space) – Action space (Box or Discrete)
setpoint (float) – Bang-bang switching setpoint. Default 0.0.
obs_field (str) – Field name from observation NamedTuple to use for setpoint comparison. Default “theta” (pole angle for CartPole).
invert (bool) – If False (default): high action when obs > setpoint. If True: low action when obs > setpoint (swapped polarity)
- Returns:
Agent instance with bang-bang control policy
- Return type:
Example
>>> # Example: bang-bang controller for CartPole >>> # Normal: push right when pole tilts right >>> agent = make_agent(action_space, setpoint=0.0, obs_field="theta") >>> >>> # Inverted: push left when pole tilts right (opposite polarity) >>> agent = make_agent(action_space, setpoint=0.0, obs_field="theta", invert=True)