zjowowen's picture
init space
079c32c
raw
history blame
3.99 kB
# Import the necessary libraries and configs based on the model you want to evaluate
from zoo.box2d.lunarlander.config.lunarlander_disc_muzero_config import main_config, create_config
from lzero.entry import eval_muzero
import numpy as np
if __name__ == "__main__":
"""
Overview:
Evaluate the model performance by running multiple episodes with different seeds using the MuZero algorithm.
The evaluation results (returns and mean returns) are printed out for each seed and summarized for all seeds.
Variables:
- model_path (:obj:`str`): Path to the pretrained model's checkpoint file. Usually something like
"exp_name/ckpt/ckpt_best.pth.tar". Absolute path is recommended.
- seeds (:obj:`List[int]`): List of seeds to use for evaluation. Each seed will run for a specified number
of episodes.
- num_episodes_each_seed (:obj:`int`): Number of episodes to be run for each seed.
- main_config (:obj:`EasyDict`): Main configuration for the evaluation, imported from the model's config file.
- returns_mean_seeds (:obj:`List[float]`): List to store the mean returns for each seed.
- returns_seeds (:obj:`List[List[float]]`): List to store the returns for each episode from each seed.
Outputs:
Prints out the mean returns and returns for each seed, along with the overall mean return across all seeds.
.. note::
The eval_muzero function is used here for evaluation. For more details about this function and its parameters,
please refer to its own documentation.
"""
# model_path = './ckpt/ckpt_best.pth.tar'
model_path = None
# Initialize a list with a single seed for the experiment
seeds = [0]
# Set the number of episodes to run for each seed
num_episodes_each_seed = 1
# Specify the number of environments for the evaluator to use
main_config.env.evaluator_env_num = 1
# Set the number of episodes for the evaluator to run
main_config.env.n_evaluator_episode = 1
# The total number of test episodes is the product of the number of episodes per seed and the number of seeds
total_test_episodes = num_episodes_each_seed * len(seeds)
# Uncomment the following lines to save a replay of the episodes as an mp4 video
# main_config.env.replay_path = './video'
# Enable saving of replay as a gif, specify the path to save the replay gif
main_config.env.save_replay_gif = True
main_config.env.replay_path_gif = './video'
# Initialize lists to store the mean and total returns for each seed
returns_mean_seeds = []
returns_seeds = []
# For each seed, run the evaluation function and store the resulting mean and total returns
for seed in seeds:
returns_mean, returns = eval_muzero(
[main_config, create_config], # Configuration parameters for the evaluation
seed=seed, # The seed for the random number generator
num_episodes_each_seed=num_episodes_each_seed, # The number of episodes to run for this seed
print_seed_details=False, # Whether to print detailed information for each seed
model_path=model_path # The path to the trained model to be evaluated
)
# Append the mean and total returns to their respective lists
returns_mean_seeds.append(returns_mean)
returns_seeds.append(returns)
# Convert the lists of returns to numpy arrays for easier statistical analysis
returns_mean_seeds = np.array(returns_mean_seeds)
returns_seeds = np.array(returns_seeds)
# Print evaluation results
print("=" * 20)
print(f"We evaluated a total of {len(seeds)} seeds. For each seed, we evaluated {num_episodes_each_seed} episode(s).")
print(f"For seeds {seeds}, the mean returns are {returns_mean_seeds}, and the returns are {returns_seeds}.")
print("Across all seeds, the mean reward is:", returns_mean_seeds.mean())
print("=" * 20)