Decoupled Continuous-Time Reinforcement Learning via Hamiltonian Flow
Organizations: Google · University of Texas at Austin
Abstract
Many real-world control problems, ranging from finance to robotics, evolve in continuous time with non-uniform, event-driven decisions. Standard discrete-time reinforcement learning (RL), based on fixed-step Bellman updates, struggles in this setting: as time gaps shrink, the -function collapses to the value function , eliminating action ranking. Existing continuous-time methods reintroduce action information via an advantage-rate function . However, they enforce optimality through complicated martingale losses or orthogonality constraints, which are sensitive to the choice of test processes. These approaches entangle and into a large, complex optimization problem that is difficult to train reliably. To address these limitations, we propose a novel decoupled continuous-time actor-critic algorithm with alternating updates: is learned from diffusion generators on , and is updated via a Hamiltonian-based value flow that remains informative under infinitesimal time steps, where standard max/softmax backups fail. Theoretically, we prove rigorous convergence via new probabilistic arguments, sidestepping the challenge that generator-based Hamiltonians lack Bellman-style contraction under the sup-norm. Empirically, our method outperforms prior continuous-time and leading discrete-time baselines across challenging continuous-control benchmarks and a real-world trading task, achieving 21% profit over a single quarternearly doubling the second-best method.
Figures & tables
Appendix figures & tables23 assets
Supplementary material from the paper’s appendix.
Appendix
| Task | % small | % large | % avg | # of steps range | ||||
|---|---|---|---|---|---|---|---|---|
| Cheetah | 0.0020 | 0.002 | 0.030 | 89.1% | 9.9% | 1.0% | 10 | 1200-2000 |
| Walker | 0.0025 | 0.005 | 0.075 | 89.1% | 9.9% | 1.0% | 25 | 1200-2000 |
| Humanoid | 0.0050 | 0.010 | 0.040 | 40.0% | 40.0% | 20.0% | 25 | 800-1000 |
| Quadruped | 0.0050 | 0.005 | 0.050 | 89.1% | 9.9% | 1.0% | 20 | 1200-2000 |
| Trading | 1 | 1 | 11 | 89.1% | 9.9% | 1.0% | 4000 | 1600-2100 |
| Task | CT-SAC | SAC | TD3 | TRPO | PPO | CPPO | q-Learning | CT-TD3 |
|---|---|---|---|---|---|---|---|---|
| Cheetah | ||||||||
| Walker | ||||||||
| Humanoid | ||||||||
| Quadruped | ||||||||
| Trading |
| Task | CT-SAC | SAC | TD3 | PPO | TRPO | q-Learning | CPPO | CT-TD3 |
|---|---|---|---|---|---|---|---|---|
| Cheetah | 605.05 | 455.74 | 404.18 | 124.45 | 104.46 | 208.04 | 102.03 | 513.39 |
| Walker | 610.03 | 403.44 | 509.23 | 73.06 | 64.55 | 70.94 | 25.04 | 512.30 |
| Humanoid | 404.64 | 77.14 | 2.27 | 1.34 | 1.35 | 1.90 | 1.42 | 356.90 |
| Quadruped | 530.13 | 328.30 | 325.87 | 159.52 | 121.84 | 192.86 | 125.30 | 284.23 |
| Symbol | Meaning |
|---|---|
| Optimal value function with temperature . | |
| Generic value function (not necessarily optimal). | |
| Advantage-rate -function associated with at state–action . | |
| Finite-time approximation of using time increment . | |
| Richardson-interpolated version of . | |
| Infinitesimal generator under fixed action . |
| Node class | CPU vendor (cores) | GPU vendor (count memory) | Host memory |
|---|---|---|---|
| CPU-only (high core) | NVIDIA (144) | – | 237 GB |
| GPU node (single GPU) | NVIDIA (72) | NVIDIA (1 96 GB) | 116 GB |
| CPU-only (general) | AMD (128) | – | 256 GB |
| GPU node (multi-GPU) | AMD (128) | NVIDIA (3 40 GB) | 256 GB |
| CPU-only (baseline) | Intel (48) | – | 192 GB |
| CPU-only (HBM) | Intel (112) | – | 128 GB (HBM) |
| Task | CT-SAC | SAC | ||||
|---|---|---|---|---|---|---|
| top | second | third | top | second | third | |
| Cheetah | lr=0.00073, tau=0.04 | lr=0.00073, tau=0.02 | lr=0.00146, tau=0.04 | lr=0.00073, train_freq=4, gradient_steps=4 | lr=0.00073, train_freq=1, gradient_steps=1 | lr=0.00146, train_freq=4, gradient_steps=4 |
| Walker | lr=0.00073, train_freq=1, gradient_steps=1, tau=0.02 | lr=0.00073, train_freq=4, gradient_steps=4, tau=0.02 | lr=0.00146, train_freq=4, gradient_steps=4, tau=0.01 | lr=0.00146, train_freq=1, gradient_steps=1 | lr=0.00073, train_freq=4, gradient_steps=4 | lr=0.00292, train_freq=1, gradient_steps=1 |
| Humanoid | train_freq=1, gradient_steps=1, tau=0.01 | train_freq=4, gradient_steps=4, tau=0.005 | train_freq=1, gradient_steps=1, tau=0.005 | log_std_init=-0.5, lr=0.0003, tau=0.0025 | log_std_init=0.5, lr=0.0003, tau=0.005 | log_std_init=-0.5, lr=0.0012, tau=0.005 |
| Quadruped | train_freq=4, gradient_steps=4, tau=0.02 | train_freq=1, gradient_steps=1, tau=0.04 | train_freq=1, gradient_steps=1, tau=0.02 | lr=0.000182 | lr=0.00292 | lr=0.00146 |
| Trading | lr=0.001, train_freq=4, gradient_steps=4, tau=0.02 | lr=0.0005, train_freq=1, gradient_steps=1, tau=0.02 | lr=0.001, train_freq=1, gradient_steps=1, tau=0.005 | log_std_init=-3.0, lr=0.002, train_freq=1, gradient_steps=1 | log_std_init=-1.0, lr=0.002, train_freq=4, gradient_steps=4 | log_std_init=-3.0, lr=0.001, train_freq=1, gradient_steps=1 |
| Task | CT-TD3 | TD3 | ||||
|---|---|---|---|---|---|---|
| top | second | third | top | second | third | |
| Cheetah | noise_sigma=0.1, policy_noise=0.4, noise_clip=1.0 | noise_sigma=0.2, policy_noise=0.2, noise_clip=0.5 | noise_sigma=0.1, policy_noise=0.2, noise_clip=0.3 | lr=0.00073, policy_noise=0.3, noise_clip=0.6 | lr=0.00073, policy_noise=0.1, noise_clip=0.2 | lr=0.00146, policy_noise=0.1, noise_clip=0.2 |
| Walker | lr=0.000365, policy_noise=0.2, noise_clip=0.5 | lr=0.00073, policy_noise=0.2, noise_clip=0.5 | lr=0.000365, policy_noise=0.1, noise_clip=0.2 | lr=0.001, policy_noise=0.1, noise_clip=0.2 | lr=0.0006, policy_noise=0.1, noise_clip=0.2 | lr=0.0003, policy_noise=0.1, noise_clip=0.2 |
| Humanoid | policy_noise=0.2, noise_clip=1.0 | policy_noise=0.2, noise_clip=0.5 | policy_noise=0.1, noise_clip=0.2 | lr=0.0003, policy_noise=0.1, noise_clip=0.2 | lr=0.0003, policy_noise=0.2, noise_clip=0.5 | lr=0.0006, policy_noise=0.2, noise_clip=0.5 |
| Quadruped | noise_sigma=0.1, policy_noise=0.4, noise_clip=1.0 | noise_sigma=0.1, policy_noise=0.2, noise_clip=0.5 | noise_sigma=0.2, policy_noise=0.2, noise_clip=0.5 | lr=0.00073, policy_noise=0.4, noise_clip=1.0 | lr=0.0003, policy_noise=0.2, noise_clip=0.5 | lr=0.00073, policy_noise=0.2, noise_clip=0.5 |
| Trading | noise_sigma=0.1, policy_noise=0.4, noise_clip=1.0 | noise_sigma=0.1, policy_noise=0.1, noise_clip=0.2 | noise_sigma=0.2, policy_noise=0.2, noise_clip=0.5 | lr=0.001, policy_noise=0.2, noise_clip=0.3 | lr=0.002, policy_noise=0.2, noise_clip=0.5 | lr=0.001, policy_noise=0.3, noise_clip=0.6 |
| Task | CPPO | PPO | ||||
|---|---|---|---|---|---|---|
| top | second | third | top | second | third | |
| Cheetah | lr=0.00073, alpha=0.004, clip_ratio=False, clip_range=0.2, kl_coef_init=1.0 | lr=0.00073, alpha=0.0004, clip_ratio=True, clip_range=0.1, kl_coef_init=0.3 | lr=0.00146, alpha=0.0004, clip_ratio=False, clip_range=0.2, kl_coef_init=1.0 | lr=0.000365, clip_range=0.2, vf_coef=0.5, gae_lambda=0.95 | lr=0.000365, clip_range=0.1, vf_coef=0.5, gae_lambda=0.95 | lr=0.000365, clip_range=0.2, vf_coef=1.0, gae_lambda=0.8 |
| Walker | lr=0.00073, alpha=0.004, clip_ratio=False, clip_range=0.2, kl_coef_init=1.0 | lr=0.000365, alpha=0.004, clip_ratio=False, clip_range=0.2, kl_coef_init=1.0 | lr=0.00146, alpha=0.004, clip_ratio=False, clip_range=0.2, kl_coef_init=1.0 | lr=0.000365, clip_range=0.2, vf_coef=1.0, gae_lambda=0.95 | lr=0.000365, clip_range=0.2, vf_coef=0.5, gae_lambda=0.95 | lr=0.000365, clip_range=0.2, vf_coef=0.5, gae_lambda=0.8 |
| Humanoid | log_std_init=-0.5, alpha=0.004 | log_std_init=-1.0, alpha=0.004 | log_std_init=-1.0, alpha=0.0004 | lr=0.0003, clip_range=0.2, vf_coef=0.5 | lr=0.0003, clip_range=0.3, vf_coef=0.5 | lr=0.0006, clip_range=0.2, vf_coef=0.5 |
| Quadruped | log_std_init=-3.0, clip_ratio=False, clip_range=0.3 | log_std_init=-3.0, clip_ratio=False, clip_range=0.2 | log_std_init=-1.0, clip_ratio=False, clip_range=0.2 | lr=0.000365, clip_range=0.2, vf_coef=0.5, gae_lambda=0.95 | lr=0.000182, clip_range=0.2, vf_coef=0.5, gae_lambda=0.95 | lr=0.000365, clip_range=0.2, vf_coef=0.5, gae_lambda=0.8 |
| Trading | alpha=0.0004, sqrt_kl=0.02 | alpha=0.04, sqrt_kl=0.02 | alpha=0.0004, sqrt_kl=0.01 | lr=0.002, clip_range=0.2, clip_range_vf=0.2, vf_coef=0.5 | lr=0.001, clip_range=0.3, clip_range_vf=0.3, vf_coef=0.5 | lr=0.001, clip_range=0.2, clip_range_vf=0.2, vf_coef=1.0 |
| Task | TRPO | q-learning | ||||
|---|---|---|---|---|---|---|
| top | second | third | top | second | third | |
| Cheetah | lr=0.000365, gae_lambda=0.95, cg_damping=0.1 | lr=0.000182, gae_lambda=0.95, cg_damping=0.1 | lr=0.000365, gae_lambda=0.8, cg_damping=0.1 | train_freq=1, gradient_steps=1, max_grad_norm=0.5 | train_freq=4, gradient_steps=4, max_grad_norm=0.5 | train_freq=4, gradient_steps=4, max_grad_norm=1.0 |
| Walker | lr=0.000365, gae_lambda=0.95, cg_damping=0.1 | lr=0.000182, gae_lambda=0.95, cg_damping=0.1 | lr=0.000365, gae_lambda=0.8, cg_damping=0.1 | log_std_init=-3, lr=0.000365 | log_std_init=-1, lr=0.000365 | log_std_init=-3, lr=0.000182 |
| Humanoid | lr=0.0006, target_kl=0.01 | lr=0.0003, target_kl=0.01 | lr=0.001, target_kl=0.01 | log_std_init=-1, lr=0.000365 | log_std_init=-3, lr=0.000365 | log_std_init=-1, lr=0.000182 |
| Quadruped | lr=0.000365, gae_lambda=0.95, cg_damping=0.1 | lr=0.000182, gae_lambda=0.8, cg_damping=0.1 | lr=0.000365, gae_lambda=0.8, cg_damping=0.1 | lr=0.000365, log_std_init=-3 | lr=0.00073, log_std_init=-3 | lr=0.00146, log_std_init=-3 |
| Trading | lr=0.001, target_kl=0.005 | lr=0.002, target_kl=0.01 | lr=0.0005, target_kl=0.01 | lr=0.004, max_grad_norm=1.0, log_std_init=-3 | lr=0.002, max_grad_norm=0.5, log_std_init=-3 | lr=0.001, max_grad_norm=1.0, log_std_init=-1 |
Reinforcement Learning
Reinforcement learning studies how agents learn sequential decisions from rewards and interaction, balancing exploration, performance, safety, and adaptation.
See all 1,717 papers