--- language: en library_name: pytorch license: apache-2.0 pipeline_tag: reinforcement-learning tags: - reinforcement-learning - Generative Model - GenerativeRL - LunarLanderContinuous-v2 benchmark_name: Box2d task_name: LunarLanderContinuous-v2 model-index: - name: QGPO results: - task: type: reinforcement-learning name: reinforcement-learning dataset: name: LunarLanderContinuous-v2 type: LunarLanderContinuous-v2 metrics: - type: mean_reward value: '200.0' name: mean_reward verified: false --- # Play **LunarLanderContinuous-v2** with **QGPO** Policy ## Model Description This implementation applies **QGPO** to the Box2d **LunarLanderContinuous-v2** environment using [GenerativeRL](https://github.com/opendilab/di-engine). ## Model Usage ### Install the Dependencies
(Click for Details) ```shell # install GenerativeRL with huggingface support pip3 install GenerativeRL[huggingface] # install environment dependencies if needed pip3 install gym[box2d]==0.23.1 ```
### Download Model from Huggingface and Run the Model
(Click for Details) ```shell # running with trained model python3 -u run.py ``` **run.py** ```python import gym from grl.algorithms.qgpo import QGPOAlgorithm from grl.datasets import QGPOCustomizedTensorDictDataset from grl.utils.huggingface import pull_model_from_hub def qgpo_pipeline(): policy_state_dict, config = pull_model_from_hub( repo_id="OpenDILabCommunity/LunarLanderContinuous-v2-QGPO", ) qgpo = QGPOAlgorithm( config, dataset=QGPOCustomizedTensorDictDataset( numpy_data_path="./data.npz", action_augment_num=config.train.parameter.action_augment_num, ), ) qgpo.model.load_state_dict(policy_state_dict) # --------------------------------------- # Customized train code ↓ # --------------------------------------- # qgpo.train() # --------------------------------------- # Customized train code ↑ # --------------------------------------- # --------------------------------------- # Customized deploy code ↓ # --------------------------------------- agent = qgpo.deploy() env = gym.make(config.deploy.env.env_id) observation = env.reset() images = [env.render(mode="rgb_array")] for _ in range(config.deploy.num_deploy_steps): observation, reward, done, _ = env.step(agent.act(observation)) image = env.render(mode="rgb_array") images.append(image) # save images into mp4 files import imageio.v3 as imageio import numpy as np images = np.array(images) imageio.imwrite("replay.mp4", images, fps=30, quality=8) # --------------------------------------- # Customized deploy code ↑ # --------------------------------------- if __name__ == "__main__": qgpo_pipeline() ```
## Model Training ### Train the Model and Push to Huggingface_hub
(Click for Details) ```shell #Training Your Own Agent python3 -u train.py ``` **train.py** ```python import gym from grl.algorithms.qgpo import QGPOAlgorithm from grl.datasets import QGPOCustomizedTensorDictDataset from grl.utils.log import log from grl_pipelines.diffusion_model.configurations.lunarlander_continuous_qgpo import ( config, ) def qgpo_pipeline(config): qgpo = QGPOAlgorithm( config, dataset=QGPOCustomizedTensorDictDataset( numpy_data_path="./data.npz", action_augment_num=config.train.parameter.action_augment_num, ), ) # --------------------------------------- # Customized train code ↓ # --------------------------------------- qgpo.train() # --------------------------------------- # Customized train code ↑ # --------------------------------------- # --------------------------------------- # Customized deploy code ↓ # --------------------------------------- agent = qgpo.deploy() env = gym.make(config.deploy.env.env_id) observation = env.reset() for _ in range(config.deploy.num_deploy_steps): env.render() observation, reward, done, _ = env.step(agent.act(observation)) # --------------------------------------- # Customized deploy code ↑ # --------------------------------------- if __name__ == "__main__": log.info("config: \n{}".format(config)) qgpo_pipeline(config) ```
**Configuration**
(Click for Details) ```python {'train': {'project': 'LunarLanderContinuous-v2-QGPO-VPSDE', 'device': 'cuda', 'wandb': {'project': 'IQL-LunarLanderContinuous-v2-QGPO-VPSDE'}, 'simulator': {'type': 'GymEnvSimulator', 'args': {'env_id': 'LunarLanderContinuous-v2'}}, 'model': {'QGPOPolicy': {'device': 'cuda', 'critic': {'device': 'cuda', 'q_alpha': 1.0, 'DoubleQNetwork': {'backbone': {'type': 'ConcatenateMLP', 'args': {'hidden_sizes': [10, 256, 256], 'output_size': 1, 'activation': 'relu'}}}}, 'diffusion_model': {'device': 'cuda', 'x_size': 2, 'alpha': 1.0, 'solver': {'type': 'DPMSolver', 'args': {'order': 2, 'device': 'cuda', 'steps': 17}}, 'path': {'type': 'linear_vp_sde', 'beta_0': 0.1, 'beta_1': 20.0}, 'reverse_path': {'type': 'linear_vp_sde', 'beta_0': 0.1, 'beta_1': 20.0}, 'model': {'type': 'noise_function', 'args': {'t_encoder': {'type': 'GaussianFourierProjectionTimeEncoder', 'args': {'embed_dim': 32, 'scale': 30.0}}, 'backbone': {'type': 'TemporalSpatialResidualNet', 'args': {'hidden_sizes': [512, 256, 128], 'output_dim': 2, 't_dim': 32, 'condition_dim': 8, 'condition_hidden_dim': 32, 't_condition_hidden_dim': 128}}}}, 'energy_guidance': {'t_encoder': {'type': 'GaussianFourierProjectionTimeEncoder', 'args': {'embed_dim': 32, 'scale': 30.0}}, 'backbone': {'type': 'ConcatenateMLP', 'args': {'hidden_sizes': [42, 256, 256], 'output_size': 1, 'activation': 'silu'}}}}}}, 'parameter': {'behaviour_policy': {'batch_size': 1024, 'learning_rate': 0.0001, 'epochs': 500}, 'action_augment_num': 16, 'fake_data_t_span': None, 'energy_guided_policy': {'batch_size': 256}, 'critic': {'stop_training_epochs': 500, 'learning_rate': 0.0001, 'discount_factor': 0.99, 'update_momentum': 0.005}, 'energy_guidance': {'epochs': 1000, 'learning_rate': 0.0001}, 'evaluation': {'evaluation_interval': 50, 'guidance_scale': [0.0, 1.0, 2.0]}, 'checkpoint_path': './LunarLanderContinuous-v2-QGPO'}}, 'deploy': {'device': 'cuda', 'env': {'env_id': 'LunarLanderContinuous-v2', 'seed': 0}, 'num_deploy_steps': 1000, 't_span': None}} ``` ```json { "train": { "project": "LunarLanderContinuous-v2-QGPO-VPSDE", "device": "cuda", "wandb": { "project": "IQL-LunarLanderContinuous-v2-QGPO-VPSDE" }, "simulator": { "type": "GymEnvSimulator", "args": { "env_id": "LunarLanderContinuous-v2" } }, "model": { "QGPOPolicy": { "device": "cuda", "critic": { "device": "cuda", "q_alpha": 1.0, "DoubleQNetwork": { "backbone": { "type": "ConcatenateMLP", "args": { "hidden_sizes": [ 10, 256, 256 ], "output_size": 1, "activation": "relu" } } } }, "diffusion_model": { "device": "cuda", "x_size": 2, "alpha": 1.0, "solver": { "type": "DPMSolver", "args": { "order": 2, "device": "cuda", "steps": 17 } }, "path": { "type": "linear_vp_sde", "beta_0": 0.1, "beta_1": 20.0 }, "reverse_path": { "type": "linear_vp_sde", "beta_0": 0.1, "beta_1": 20.0 }, "model": { "type": "noise_function", "args": { "t_encoder": { "type": "GaussianFourierProjectionTimeEncoder", "args": { "embed_dim": 32, "scale": 30.0 } }, "backbone": { "type": "TemporalSpatialResidualNet", "args": { "hidden_sizes": [ 512, 256, 128 ], "output_dim": 2, "t_dim": 32, "condition_dim": 8, "condition_hidden_dim": 32, "t_condition_hidden_dim": 128 } } } }, "energy_guidance": { "t_encoder": { "type": "GaussianFourierProjectionTimeEncoder", "args": { "embed_dim": 32, "scale": 30.0 } }, "backbone": { "type": "ConcatenateMLP", "args": { "hidden_sizes": [ 42, 256, 256 ], "output_size": 1, "activation": "silu" } } } } } }, "parameter": { "behaviour_policy": { "batch_size": 1024, "learning_rate": 0.0001, "epochs": 500 }, "action_augment_num": 16, "fake_data_t_span": null, "energy_guided_policy": { "batch_size": 256 }, "critic": { "stop_training_epochs": 500, "learning_rate": 0.0001, "discount_factor": 0.99, "update_momentum": 0.005 }, "energy_guidance": { "epochs": 1000, "learning_rate": 0.0001 }, "evaluation": { "evaluation_interval": 50, "guidance_scale": [ 0.0, 1.0, 2.0 ] }, "checkpoint_path": "./LunarLanderContinuous-v2-QGPO" } }, "deploy": { "device": "cuda", "env": { "env_id": "LunarLanderContinuous-v2", "seed": 0 }, "num_deploy_steps": 1000, "t_span": null } } ```
**Training Procedure** - **Weights & Biases (wandb):** [monitor link](https://wandb.ai/zjowowen/IQL-LunarLanderContinuous-v2-QGPO-VPSDE) ## Model Information - **Github Repository:** [repo link](https://github.com/opendilab/GenerativeRL/) - **Doc**: [Algorithm link](https://opendilab.github.io/GenerativeRL/) - **Configuration:** [config link](https://huggingface.co/OpenDILabCommunity/LunarLanderContinuous-v2-QGPO/blob/main/policy_config.json) - **Demo:** [video](https://huggingface.co/OpenDILabCommunity/LunarLanderContinuous-v2-QGPO/blob/main/replay.mp4) - **Parameters total size:** 8799.79 KB - **Last Update Date:** 2024-12-04 ## Environments - **Benchmark:** Box2d - **Task:** LunarLanderContinuous-v2 - **Gym version:** 0.23.1 - **GenerativeRL version:** v0.0.1 - **PyTorch version:** 2.4.1+cu121 - **Doc**: [Environments link](https://www.gymlibrary.dev/environments/box2d/lunar_lander/)