Skip to content

Environment reference

Twenty-one environments, every one a target MDP: the objective is to reach and hold a subset of the state space against disturbances, not to reach a goal and stop.

Every environment implements the same interface, so the table below is the whole of what differs between them:

  • Observation / Action are the array shapes.
  • Tracked is the quantity the target applies to, exposed at env.obs_value_index with its setpoint at env.obs_target_index, and named by env.tracked_names.
  • PID / MPC say whether a baseline ships. Where one does not, the registry records why in baselines_note rather than leaving it silent.
  • Physics links the environment's contract: sourced parameters, published validation targets asserted by tests, and quantified known deviations.

Load any of them by registry name:

from target_gym.registry import REGISTRY

spec = REGISTRY["boiler_drum"]
env, params = spec.make_env(), spec.params_cls()

Aircraft

Environment Cite as Observation Action Tracked PID MPC Physics
plane plane-v1 (10,) (2,) altitude (m) yes yes contract
plane_energy plane_energy-v1 (10,) (2,) altitude (m) yes yes contract
plane_sine plane_sine-v1 (10,) (2,) altitude (m) yes yes contract
plane3d_heading plane3d_heading-v1 (15,) (3,) altitude (m) yes yes contract
plane3d_circle plane3d_circle-v1 (17,) (3,) altitude (m) yes yes contract
plane3d_racetrack plane3d_racetrack-v1 (21,) (3,) altitude (m) yes yes contract
plane3d_figure8 plane3d_figure8-v1 (19,) (3,) altitude (m) yes yes contract
patrol patrol-v1 (26,) (3,) slot error (m) yes yes contract
patrol_bearing_only patrol_bearing_only-v1 (21,) (3,) measured range (m) yes no contract

patrol_bearing_only -- PID present -- a lead-state estimator feeding the same pursuit law the full-observation variant uses. Range with azimuth and elevation is a complete relative-position measurement, so the only genuinely unobservable quantity is the lead's HEADING, which the commanded slot needs because the slot is expressed in the lead's frame; it is recovered by differencing the estimated relative position and filtering. Measured performance matches the full-observation expert (4 of 8 seeds complete, ~229 m settled slot error vs ~260 m), so the partial observation costs essentially nothing here. No MPC, and the reason is the withheld observation rather than the manoeuvring lead. This note used to blame the lead, on the grounds that an MPC would need its future trajectory as a time-varying parameter. That holds for a CasADi model and not for a gradient planner: patrol now ships a GradientMPC that differentiates step_env, and because the lead is scripted and deterministic the plan propagates it for free. What blocks one here is that the planner reads the slot error out of the state, which is precisely what this variant withholds. Handing it the true state anyway would make it an oracle on a task defined by what is hidden, so it needs a planner built on the estimator.

Process Control

Environment Cite as Observation Action Tracked PID MPC Physics
cstr cstr-v1 (3,) (1,) C_a (mol/L) yes yes contract
first_order first_order-v1 (2,) (1,) x yes yes contract
four_tank four_tank-v1 (6,) (2,) h1 (m), h2 (m) yes yes contract
ph_neutralization ph_neutralization-v1 (3,) (1,) pH yes yes contract
distillation distillation-v1 (6,) (2,) yD (mole fraction) yes yes contract

Industrial / Energy

Environment Cite as Observation Action Tracked PID MPC Physics
glass_furnace glass_furnace-v1 (5,) (1,) crown temperature (K) yes yes contract
reactor reactor-v2 (4,) (1,) neutron power (normalised) yes yes contract
hvac hvac-v1 (7,) (1,) zone air temperature (deg C) yes yes contract
cement_kiln cement_kiln-v1 (8,) (2,) discharge free lime (%) yes yes contract
boiler_drum boiler_drum-v1 (7,) (2,) drum level (m), drum pressure (bar) yes yes contract

Renewable Energy

Environment Cite as Observation Action Tracked PID MPC Physics
wind_turbine wind_turbine-v1 (5,) (2,) electrical power (MW) yes yes contract
battery battery-v1 (5,) (1,) delivered power (MW) yes yes contract