Double Well (DoubleWell-v0)
The Double Well environment models a two-dimensional stochastic dynamical system on a double-well potential landscape. The control task is to drive the state to the origin despite additive state-dependent noise and the bi-stable potential.
Dynamics
The continuous-time drift is
with additive stochastic diffusion:
where and is a Wiener process. Integration uses the Euler–Maruyama scheme with .
Potential surface
The uncontrolled potential is
This has two stable wells at and a saddle at the origin. The control objective is to hold the state at the origin, which is an unstable equilibrium of the uncontrolled system.
Spaces and limits
| Property | Value |
|---|---|
| State dimension | 2 |
| Action dimension | 1 |
| State range | |
| Action range | |
| 0.01 s | |
| Max episode steps | 2000 (20 s) |
Cost function
Reference point: .
Observation note
During trajectory generation, Generator appends the potential as a third component, producing a 3-dimensional observation . The visualisation pipeline uses as the horizontal plane and as the vertical axis.
LQR linearisation
Usage
uv run -m koopmanrl.soft_koopman_value_iteration --env_id DoubleWell-v0
uv run -m koopmanrl.soft_actor_koopman_critic \
--config_file configurations/sakc_double_well_hparams.json
Notes
- The stochastic diffusion is state-dependent: the off-diagonal term couples noise into both state components.
- Trajectories draw from pre-generated random numbers for efficiency; a fixed seed must be set before environment construction for fully reproducible rollouts.
- Source:
koopmanrl/environments/double_well.py