OpenEnv / examples /basic_usage.py
mahammadaftab's picture
Update space
3eb9552
raw
history blame
7.03 kB
"""
Basic OpenEnv Usage Example
This script demonstrates the fundamental API usage of OpenEnv
without any external RL libraries. Perfect for understanding the basics.
Usage:
python examples/basic_usage.py
"""
import numpy as np
from openenv import OpenEnv, EnvConfig
def random_agent_example():
"""Run environment with random actions."""
print("=" * 60)
print("OpenEnv - Random Agent Example")
print("=" * 60)
# Create environment with default config
config = EnvConfig(
episode_length=200,
verbose=True,
render_mode=None, # Set to 'human' to visualize
)
env = OpenEnv(config=config)
# Reset environment
observation, info = env.reset(seed=42)
print(f"\nInitial observation shape: {observation.shape}")
print(f"Initial observation: {observation}")
# Run episode with random actions
done = False
total_reward = 0.0
step_count = 0
while not done:
# Sample random action
action = env.action_space.sample()
# Take step
observation, reward, terminated, truncated, info = env.step(action)
# Accumulate reward
total_reward += reward
step_count += 1
# Check if episode ended
done = terminated or truncated
if step_count % 50 == 0:
print(f"Step {step_count}: reward={reward:.3f}, "
f"total_reward={total_reward:.3f}")
print(f"\nEpisode Statistics:")
print(f" Total Steps: {step_count}")
print(f" Total Reward: {total_reward:.3f}")
print(f" Final Info: {info}")
# Close environment
env.close()
return total_reward
def custom_config_example():
"""Demonstrate custom configuration options."""
print("\n" + "=" * 60)
print("Custom Configuration Example")
print("=" * 60)
# Create custom configuration
config = EnvConfig(
episode_length=300,
observation_dim=8,
action_dim=4,
gravity=9.81,
friction=0.02,
dt=0.02,
reward_scale=1.5,
sparse_rewards=False,
max_velocity=80.0,
boundary_limit=40.0,
terminate_on_boundary=True,
verbose=True,
log_metrics=True,
random_seed=123,
)
env = OpenEnv(config=config)
# Reset and run a few steps
obs, info = env.reset()
print(f"\nEnvironment Configuration:")
print(f" Episode Length: {config.episode_length}")
print(f" Action Space: {env.action_space}")
print(f" Observation Space: {env.observation_space}")
# Take 10 random steps
for i in range(10):
action = env.action_space.sample()
obs, reward, terminated, truncated, info = env.step(action)
print(f"Step {i+1}: reward={reward:.3f}, position={obs[0:2]}")
env.close()
def state_inspection_example():
"""Demonstrate state inspection capabilities."""
print("\n" + "=" * 60)
print("State Inspection Example")
print("=" * 60)
config = EnvConfig(verbose=False)
env = OpenEnv(config=config)
env.reset(seed=42)
# Get full internal state
state = env.state()
print(f"\nFull State Vector: {state}")
print(f"State Shape: {state.shape if state is not None else None}")
# Access individual components
if state is not None:
print("\nState Components:")
print(f" Position (x, y): {state[0:2]}")
print(f" Velocity (vx, vy): {state[2:4]}")
print(f" Target (tx, ty): {state[4:6]}")
print(f" Time Remaining: {state[6]:.3f}")
print(f" Distance to Target: {state[7]:.3f}")
env.close()
def multiple_episodes_example():
"""Run multiple episodes and collect statistics."""
print("\n" + "=" * 60)
print("Multiple Episodes Example")
print("=" * 60)
config = EnvConfig(episode_length=100, verbose=False)
env = OpenEnv(config=config)
n_episodes = 5
episode_returns = []
episode_lengths = []
for ep in range(n_episodes):
# Reset environment
obs, info = env.reset(seed=ep)
# Run episode
done = False
total_reward = 0.0
steps = 0
while not done:
action = env.action_space.sample()
obs, reward, terminated, truncated, info = env.step(action)
total_reward += reward
steps += 1
done = terminated or truncated
# Store statistics
episode_returns.append(total_reward)
episode_lengths.append(steps)
print(f"Episode {ep+1}/{n_episodes}: "
f"Return={total_reward:.3f}, Steps={steps}")
# Print summary statistics
print(f"\nSummary Statistics:")
print(f" Mean Return: {np.mean(episode_returns):.3f} ± {np.std(episode_returns):.3f}")
print(f" Mean Length: {np.mean(episode_lengths):.1f} ± {np.std(episode_lengths):.1f}")
print(f" Min Return: {np.min(episode_returns):.3f}")
print(f" Max Return: {np.max(episode_returns):.3f}")
env.close()
return episode_returns, episode_lengths
def save_load_config_example():
"""Demonstrate saving and loading configuration."""
print("\n" + "=" * 60)
print("Configuration Save/Load Example")
print("=" * 60)
# Create and save configuration
config = EnvConfig(
episode_length=500,
gravity=5.0,
friction=0.05,
verbose=True,
)
# Save to file
config.save("env_config.json")
print("Configuration saved to env_config.json")
# Load from file
loaded_config = EnvConfig.load("env_config.json")
print("Configuration loaded successfully")
# Verify loaded config
print(f"\nLoaded Configuration:")
print(f" Episode Length: {loaded_config.episode_length}")
print(f" Gravity: {loaded_config.gravity}")
print(f" Friction: {loaded_config.friction}")
print(f" Verbose: {loaded_config.verbose}")
# Clean up
import os
if os.path.exists("env_config.json"):
os.remove("env_config.json")
print("\nCleaned up temporary config file")
def main():
"""Run all examples."""
print("\n🚀 OpenEnv Basic Usage Examples\n")
# Example 1: Random agent
random_agent_example()
# Example 2: Custom configuration
custom_config_example()
# Example 3: State inspection
state_inspection_example()
# Example 4: Multiple episodes
multiple_episodes_example()
# Example 5: Save/load config
save_load_config_example()
print("\n" + "=" * 60)
print("All examples completed successfully!")
print("=" * 60)
print("\nNext steps:")
print(" - Try train_openenv.py for RL training examples")
print(" - Read README.md for detailed documentation")
print(" - Explore tests/ for more usage patterns")
if __name__ == "__main__":
main()