//! PPO Separate Learning Rates Demo //! //! Demonstrates how to use separate actor/critic learning rates in PPO trainer. //! //! # Usage //! ```bash //! cargo run -p ml --example ppo_separate_lr_demo --release //! ``` use ml::trainers::ppo::PpoHyperparameters; fn main() { println!("PPO Separate Learning Rates Demo\n"); // Example 1: Using default separate learning rates println!("Example 1: Default Configuration"); let default_params = PpoHyperparameters::conservative(); println!(" Actor LR: {:?}", default_params.actor_learning_rate); println!(" Critic LR: {:?}", default_params.critic_learning_rate); println!(); // Example 2: Custom separate learning rates println!("Example 2: Custom Separate Learning Rates"); let mut custom_params = PpoHyperparameters::conservative(); custom_params.actor_learning_rate = Some(1e-6); // Conservative for policy stability custom_params.critic_learning_rate = Some(0.001); // Aggressive for faster value convergence println!(" Actor LR: {:?}", custom_params.actor_learning_rate); println!(" Critic LR: {:?}", custom_params.critic_learning_rate); println!(); // Example 3: For train_ppo_parquet integration println!("Example 3: Recommended Settings for Parquet Training"); let mut parquet_params = PpoHyperparameters::conservative(); parquet_params.actor_learning_rate = Some(1e-6); // Actor: 1e-6 parquet_params.critic_learning_rate = Some(0.001); // Critic: 0.001 (1000x faster) parquet_params.epochs = 100; parquet_params.batch_size = 64; println!(" Actor LR: {:?}", parquet_params.actor_learning_rate); println!(" Critic LR: {:?}", parquet_params.critic_learning_rate); println!(" Epochs: {}", parquet_params.epochs); println!(" Batch Size: {}", parquet_params.batch_size); println!(); println!("✅ Separate learning rates are now supported!"); println!(" - Actor (policy) learns slowly for stability"); println!(" - Critic (value) learns faster for better returns estimation"); }