Frozenlake Visualisation

[26]:
import gymnasium as gym
[27]:
from gymcts.gymcts_agent import GymctsAgent
from gymcts.gymcts_deepcopy_wrapper import DeepCopyMCTSGymEnvWrapper
[28]:
from gymcts.logger import log
[29]:
log.setLevel(20)
[30]:
if __name__ == '__main__':
    log.debug("Starting example")

    # 0. create the environment
    env = gym.make('FrozenLake-v1', desc=None, map_name="4x4", is_slippery=False, render_mode="rgb_array")
    env.reset()

    # 1. wrap the environment with the naive wrapper or a custom gymcts wrapper
    env = DeepCopyMCTSGymEnvWrapper(env)

    # 2. create the agent
    agent = GymctsAgent(
        env=env,
        clear_mcts_tree_after_step=False,
        render_tree_after_step=True,
        number_of_simulations_per_step=200,
        exclude_unvisited_nodes_from_render=True
    )

    # 3. solve the environment
    actions = agent.solve()

    # 4. render the environment solution
    env = gym.wrappers.RecordVideo(
        env,
        video_folder="./videos",
        episode_trigger=lambda episode_id: True,
        name_prefix="frozenlake_4x4"
    )
    env.reset()

    for a in actions:
        obs, rew, term, trun, info = env.step(a)
    env.close()

    # 5. print the solution
    # read the solution from the info provided by the RecordEpisodeStatistics wrapper (that NaiveSoloMCTSGymEnvWrapper wraps internally)
    episode_length = info["episode"]["l"]
    episode_return = info["episode"]["r"]

    if episode_return == 1.0:
        print(f"Environment solved in {episode_length} steps.")
    else:
        print(f"Environment not solved in {episode_length} steps.")
(N=200, Q_v=0.02, best=1.00)
├── (a=0, N=44, Q_v=0.00, best=0.00, ubc=0.25)
│   ├── (a=0, N=11, Q_v=0.00, best=0.00, ubc=0.41)
│   ├── (a=0, N=3, Q_v=0.00, best=0.00, ubc=0.63)
│   ├── (a=1, N=3, Q_v=0.00, best=0.00, ubc=0.63)
│   ├── (a=2, N=2, Q_v=0.00, best=0.00, ubc=0.77)
│   └── (a=3, N=2, Q_v=0.00, best=0.00, ubc=0.77)
│   ├── (a=1, N=11, Q_v=0.00, best=0.00, ubc=0.41)
│   ├── (a=0, N=3, Q_v=0.00, best=0.00, ubc=0.63)
│   ├── (a=1, N=3, Q_v=0.00, best=0.00, ubc=0.63)
│   ├── (a=2, N=2, Q_v=0.00, best=0.00, ubc=0.77)
│   └── (a=3, N=2, Q_v=0.00, best=0.00, ubc=0.77)
│   ├── (a=2, N=11, Q_v=0.00, best=0.00, ubc=0.41)
│   ├── (a=0, N=3, Q_v=0.00, best=0.00, ubc=0.63)
│   ├── (a=1, N=3, Q_v=0.00, best=0.00, ubc=0.63)
│   ├── (a=2, N=2, Q_v=0.00, best=0.00, ubc=0.77)
│   └── (a=3, N=2, Q_v=0.00, best=0.00, ubc=0.77)
│   └── (a=3, N=10, Q_v=0.00, best=0.00, ubc=0.43)
│       ├── (a=0, N=3, Q_v=0.00, best=0.00, ubc=0.62)
│       ├── (a=1, N=2, Q_v=0.00, best=0.00, ubc=0.76)
│       ├── (a=2, N=2, Q_v=0.00, best=0.00, ubc=0.76)
│       └── (a=3, N=2, Q_v=0.00, best=0.00, ubc=0.76)
├── (a=1, N=44, Q_v=0.00, best=0.00, ubc=0.25)
│   ├── (a=0, N=11, Q_v=0.00, best=0.00, ubc=0.41)
│   ├── (a=0, N=3, Q_v=0.00, best=0.00, ubc=0.63)
│   ├── (a=1, N=3, Q_v=0.00, best=0.00, ubc=0.63)
│   ├── (a=2, N=2, Q_v=0.00, best=0.00, ubc=0.77)
│   └── (a=3, N=2, Q_v=0.00, best=0.00, ubc=0.77)
│   ├── (a=1, N=11, Q_v=0.00, best=0.00, ubc=0.41)
│   ├── (a=0, N=3, Q_v=0.00, best=0.00, ubc=0.63)
│   ├── (a=1, N=3, Q_v=0.00, best=0.00, ubc=0.63)
│   ├── (a=2, N=2, Q_v=0.00, best=0.00, ubc=0.77)
│   └── (a=3, N=2, Q_v=0.00, best=0.00, ubc=0.77)
│   ├── (a=2, N=11, Q_v=0.00, best=0.00, ubc=0.41)
│   └── (a=3, N=10, Q_v=0.00, best=0.00, ubc=0.43)
│       ├── (a=0, N=3, Q_v=0.00, best=0.00, ubc=0.62)
│       ├── (a=1, N=2, Q_v=0.00, best=0.00, ubc=0.76)
│       ├── (a=2, N=2, Q_v=0.00, best=0.00, ubc=0.76)
│       └── (a=3, N=2, Q_v=0.00, best=0.00, ubc=0.76)
├── (a=2, N=67, Q_v=0.04, best=1.00, ubc=0.24)
│   ├── (a=0, N=18, Q_v=0.06, best=1.00, ubc=0.40)
│   ├── (a=0, N=5, Q_v=0.00, best=0.00, ubc=0.54)
│   ├── (a=1, N=4, Q_v=0.00, best=0.00, ubc=0.60)
│   ├── (a=2, N=4, Q_v=0.00, best=0.00, ubc=0.60)
│   └── (a=3, N=4, Q_v=0.00, best=0.00, ubc=0.60)
│   ├── (a=1, N=13, Q_v=0.00, best=0.00, ubc=0.40)
│   ├── (a=2, N=22, Q_v=0.09, best=1.00, ubc=0.40)
│   ├── (a=0, N=4, Q_v=0.00, best=0.00, ubc=0.62)
│   ├── (a=1, N=9, Q_v=0.22, best=1.00, ubc=0.64)
│   ├── (a=2, N=4, Q_v=0.00, best=0.00, ubc=0.62)
│   └── (a=3, N=4, Q_v=0.00, best=0.00, ubc=0.62)
│   └── (a=3, N=13, Q_v=0.00, best=0.00, ubc=0.40)
│       ├── (a=0, N=3, Q_v=0.00, best=0.00, ubc=0.65)
│       ├── (a=1, N=3, Q_v=0.00, best=0.00, ubc=0.65)
│       ├── (a=2, N=3, Q_v=0.00, best=0.00, ubc=0.65)
│       └── (a=3, N=3, Q_v=0.00, best=0.00, ubc=0.65)
└── (a=3, N=44, Q_v=0.00, best=0.00, ubc=0.25)
    ├── (a=0, N=11, Q_v=0.00, best=0.00, ubc=0.41)
    ├── (a=0, N=3, Q_v=0.00, best=0.00, ubc=0.63)
    ├── (a=1, N=3, Q_v=0.00, best=0.00, ubc=0.63)
    ├── (a=2, N=2, Q_v=0.00, best=0.00, ubc=0.77)
    └── (a=3, N=2, Q_v=0.00, best=0.00, ubc=0.77)
    ├── (a=1, N=11, Q_v=0.00, best=0.00, ubc=0.41)
    ├── (a=0, N=3, Q_v=0.00, best=0.00, ubc=0.63)
    ├── (a=1, N=3, Q_v=0.00, best=0.00, ubc=0.63)
    ├── (a=2, N=2, Q_v=0.00, best=0.00, ubc=0.77)
    └── (a=3, N=2, Q_v=0.00, best=0.00, ubc=0.77)
    ├── (a=2, N=11, Q_v=0.00, best=0.00, ubc=0.41)
    ├── (a=0, N=3, Q_v=0.00, best=0.00, ubc=0.63)
    ├── (a=1, N=3, Q_v=0.00, best=0.00, ubc=0.63)
    ├── (a=2, N=2, Q_v=0.00, best=0.00, ubc=0.77)
    └── (a=3, N=2, Q_v=0.00, best=0.00, ubc=0.77)
    └── (a=3, N=10, Q_v=0.00, best=0.00, ubc=0.43)
        ├── (a=0, N=3, Q_v=0.00, best=0.00, ubc=0.62)
        ├── (a=1, N=2, Q_v=0.00, best=0.00, ubc=0.76)
        ├── (a=2, N=2, Q_v=0.00, best=0.00, ubc=0.76)
        └── (a=3, N=2, Q_v=0.00, best=0.00, ubc=0.76)
[16:50:26] INFO     selected action 2 after 200 simulations.
           INFO     current action list: [2]
(a=2, N=267, Q_v=0.36, best=1.00, ubc=0.47)
├── (a=0, N=41, Q_v=0.02, best=1.00, ubc=0.29)
├── (a=0, N=10, Q_v=0.00, best=0.00, ubc=0.43)
├── (a=0, N=3, Q_v=0.00, best=0.00, ubc=0.62)
├── (a=1, N=2, Q_v=0.00, best=0.00, ubc=0.76)
├── (a=2, N=2, Q_v=0.00, best=0.00, ubc=0.76)
└── (a=3, N=2, Q_v=0.00, best=0.00, ubc=0.76)
├── (a=1, N=10, Q_v=0.00, best=0.00, ubc=0.43)
├── (a=0, N=3, Q_v=0.00, best=0.00, ubc=0.62)
├── (a=1, N=2, Q_v=0.00, best=0.00, ubc=0.76)
├── (a=2, N=2, Q_v=0.00, best=0.00, ubc=0.76)
└── (a=3, N=2, Q_v=0.00, best=0.00, ubc=0.76)
├── (a=2, N=10, Q_v=0.00, best=0.00, ubc=0.43)
├── (a=0, N=3, Q_v=0.00, best=0.00, ubc=0.62)
├── (a=1, N=2, Q_v=0.00, best=0.00, ubc=0.76)
├── (a=2, N=2, Q_v=0.00, best=0.00, ubc=0.76)
└── (a=3, N=2, Q_v=0.00, best=0.00, ubc=0.76)
└── (a=3, N=10, Q_v=0.00, best=0.00, ubc=0.43)
    ├── (a=0, N=3, Q_v=0.00, best=0.00, ubc=0.62)
    ├── (a=1, N=2, Q_v=0.00, best=0.00, ubc=0.76)
    ├── (a=2, N=2, Q_v=0.00, best=0.00, ubc=0.76)
    └── (a=3, N=2, Q_v=0.00, best=0.00, ubc=0.76)
├── (a=1, N=34, Q_v=0.00, best=0.00, ubc=0.29)
├── (a=2, N=157, Q_v=0.61, best=1.00, ubc=0.74)
├── (a=0, N=11, Q_v=0.00, best=0.00, ubc=0.48)
├── (a=0, N=3, Q_v=0.00, best=0.00, ubc=0.63)
├── (a=1, N=3, Q_v=0.00, best=0.00, ubc=0.63)
├── (a=2, N=2, Q_v=0.00, best=0.00, ubc=0.77)
└── (a=3, N=2, Q_v=0.00, best=0.00, ubc=0.77)
├── (a=1, N=123, Q_v=0.78, best=1.00, ubc=0.92)
├── (a=0, N=4, Q_v=0.00, best=0.00, ubc=0.78)
├── (a=1, N=110, Q_v=0.87, best=1.00, ubc=1.02)
├── (a=2, N=4, Q_v=0.00, best=0.00, ubc=0.78)
└── (a=3, N=4, Q_v=0.00, best=0.00, ubc=0.78)
├── (a=2, N=11, Q_v=0.00, best=0.00, ubc=0.48)
├── (a=0, N=3, Q_v=0.00, best=0.00, ubc=0.63)
├── (a=1, N=3, Q_v=0.00, best=0.00, ubc=0.63)
├── (a=2, N=2, Q_v=0.00, best=0.00, ubc=0.77)
└── (a=3, N=2, Q_v=0.00, best=0.00, ubc=0.77)
└── (a=3, N=11, Q_v=0.00, best=0.00, ubc=0.48)
    ├── (a=0, N=3, Q_v=0.00, best=0.00, ubc=0.63)
    ├── (a=1, N=3, Q_v=0.00, best=0.00, ubc=0.63)
    ├── (a=2, N=2, Q_v=0.00, best=0.00, ubc=0.77)
    └── (a=3, N=2, Q_v=0.00, best=0.00, ubc=0.77)
└── (a=3, N=34, Q_v=0.00, best=0.00, ubc=0.29)
    ├── (a=0, N=9, Q_v=0.00, best=0.00, ubc=0.44)
    ├── (a=0, N=2, Q_v=0.00, best=0.00, ubc=0.74)
    ├── (a=1, N=2, Q_v=0.00, best=0.00, ubc=0.74)
    ├── (a=2, N=2, Q_v=0.00, best=0.00, ubc=0.74)
    └── (a=3, N=2, Q_v=0.00, best=0.00, ubc=0.74)
    ├── (a=1, N=8, Q_v=0.00, best=0.00, ubc=0.47)
    ├── (a=2, N=8, Q_v=0.00, best=0.00, ubc=0.47)
    ├── (a=0, N=2, Q_v=0.00, best=0.00, ubc=0.72)
    ├── (a=1, N=2, Q_v=0.00, best=0.00, ubc=0.72)
    ├── (a=2, N=2, Q_v=0.00, best=0.00, ubc=0.72)
    └── (a=3, N=1, Q_v=0.00, best=0.00, ubc=1.02)
    └── (a=3, N=8, Q_v=0.00, best=0.00, ubc=0.47)
        ├── (a=0, N=2, Q_v=0.00, best=0.00, ubc=0.72)
        ├── (a=1, N=2, Q_v=0.00, best=0.00, ubc=0.72)
        ├── (a=2, N=2, Q_v=0.00, best=0.00, ubc=0.72)
        └── (a=3, N=1, Q_v=0.00, best=0.00, ubc=1.02)
           INFO     selected action 2 after 200 simulations.
           INFO     current action list: [2, 2]
(a=2, N=357, Q_v=0.80, best=1.00, ubc=0.90)
├── (a=0, N=11, Q_v=0.00, best=0.00, ubc=0.52)
├── (a=0, N=3, Q_v=0.00, best=0.00, ubc=0.63)
├── (a=0, N=1, Q_v=0.00, best=0.00, ubc=0.74)
└── (a=1, N=1, Q_v=0.00, best=0.00, ubc=0.74)
├── (a=1, N=3, Q_v=0.00, best=0.00, ubc=0.63)
├── (a=2, N=2, Q_v=0.00, best=0.00, ubc=0.77)
└── (a=2, N=1, Q_v=0.00, best=0.00, ubc=0.59)
└── (a=3, N=2, Q_v=0.00, best=0.00, ubc=0.77)
    └── (a=2, N=1, Q_v=0.00, best=0.00, ubc=0.59)
├── (a=1, N=323, Q_v=0.89, best=1.00, ubc=0.98)
├── (a=0, N=4, Q_v=0.00, best=0.00, ubc=0.85)
├── (a=1, N=310, Q_v=0.93, best=1.00, ubc=1.02)
├── (a=0, N=5, Q_v=0.20, best=1.00, ubc=0.96)
├── (a=1, N=296, Q_v=0.96, best=1.00, ubc=1.06)
├── (a=2, N=3, Q_v=0.00, best=0.00, ubc=0.98)
└── (a=3, N=5, Q_v=0.20, best=1.00, ubc=0.96)
├── (a=2, N=4, Q_v=0.00, best=0.00, ubc=0.85)
└── (a=3, N=4, Q_v=0.00, best=0.00, ubc=0.85)
    ├── (a=0, N=1, Q_v=0.00, best=0.00, ubc=0.83)
    ├── (a=1, N=1, Q_v=0.00, best=0.00, ubc=0.83)
    └── (a=2, N=1, Q_v=0.00, best=0.00, ubc=0.83)
├── (a=2, N=11, Q_v=0.00, best=0.00, ubc=0.52)
├── (a=0, N=3, Q_v=0.00, best=0.00, ubc=0.63)
├── (a=0, N=1, Q_v=0.00, best=0.00, ubc=0.74)
└── (a=3, N=1, Q_v=0.00, best=0.00, ubc=0.74)
├── (a=1, N=3, Q_v=0.00, best=0.00, ubc=0.63)
├── (a=2, N=2, Q_v=0.00, best=0.00, ubc=0.77)
└── (a=3, N=1, Q_v=0.00, best=0.00, ubc=0.59)
└── (a=3, N=2, Q_v=0.00, best=0.00, ubc=0.77)
    └── (a=3, N=1, Q_v=0.00, best=0.00, ubc=0.59)
└── (a=3, N=11, Q_v=0.00, best=0.00, ubc=0.52)
    ├── (a=0, N=3, Q_v=0.00, best=0.00, ubc=0.63)
    ├── (a=0, N=1, Q_v=0.00, best=0.00, ubc=0.74)
    └── (a=1, N=1, Q_v=0.00, best=0.00, ubc=0.74)
    ├── (a=1, N=3, Q_v=0.00, best=0.00, ubc=0.63)
    ├── (a=0, N=1, Q_v=0.00, best=0.00, ubc=0.74)
    └── (a=1, N=1, Q_v=0.00, best=0.00, ubc=0.74)
    ├── (a=2, N=2, Q_v=0.00, best=0.00, ubc=0.77)
    └── (a=2, N=1, Q_v=0.00, best=0.00, ubc=0.59)
    └── (a=3, N=2, Q_v=0.00, best=0.00, ubc=0.77)
        └── (a=0, N=1, Q_v=0.00, best=0.00, ubc=0.59)
[16:50:27] INFO     selected action 1 after 200 simulations.
           INFO     current action list: [2, 2, 1]
(a=1, N=523, Q_v=0.93, best=1.00, ubc=1.01)
├── (a=0, N=4, Q_v=0.00, best=0.00, ubc=0.88)
├── (a=1, N=510, Q_v=0.95, best=1.00, ubc=1.03)
├── (a=0, N=5, Q_v=0.20, best=1.00, ubc=0.99)
├── (a=0, N=1, Q_v=1.00, best=1.00, ubc=1.90)
├── (a=1, N=1, Q_v=0.00, best=0.00, ubc=0.90)
├── (a=2, N=1, Q_v=0.00, best=0.00, ubc=0.90)
└── (a=3, N=1, Q_v=0.00, best=0.00, ubc=0.90)
├── (a=1, N=496, Q_v=0.97, best=1.00, ubc=1.05)
├── (a=0, N=3, Q_v=0.00, best=0.00, ubc=1.02)
├── (a=1, N=164, Q_v=0.96, best=1.00, ubc=1.09)
├── (a=2, N=325, Q_v=1.00, best=1.00, ubc=1.10)
└── (a=3, N=3, Q_v=0.00, best=0.00, ubc=1.02)
├── (a=2, N=3, Q_v=0.00, best=0.00, ubc=1.02)
└── (a=3, N=5, Q_v=0.20, best=1.00, ubc=0.99)
    ├── (a=0, N=1, Q_v=0.00, best=0.00, ubc=0.90)
    ├── (a=1, N=1, Q_v=1.00, best=1.00, ubc=1.90)
    ├── (a=2, N=1, Q_v=0.00, best=0.00, ubc=0.90)
    └── (a=3, N=1, Q_v=0.00, best=0.00, ubc=0.90)
├── (a=2, N=4, Q_v=0.00, best=0.00, ubc=0.88)
└── (a=3, N=4, Q_v=0.00, best=0.00, ubc=0.88)
    ├── (a=0, N=1, Q_v=0.00, best=0.00, ubc=0.83)
    ├── (a=1, N=1, Q_v=0.00, best=0.00, ubc=0.83)
    └── (a=2, N=1, Q_v=0.00, best=0.00, ubc=0.83)
           INFO     selected action 1 after 200 simulations.
           INFO     current action list: [2, 2, 1, 1]
(a=1, N=710, Q_v=0.96, best=1.00, ubc=1.03)
├── (a=0, N=5, Q_v=0.20, best=1.00, ubc=1.01)
├── (a=0, N=1, Q_v=1.00, best=1.00, ubc=1.90)
├── (a=1, N=1, Q_v=0.00, best=0.00, ubc=0.90)
├── (a=2, N=1, Q_v=0.00, best=0.00, ubc=0.90)
└── (a=3, N=1, Q_v=0.00, best=0.00, ubc=0.90)
├── (a=1, N=696, Q_v=0.98, best=1.00, ubc=1.05)
├── (a=0, N=3, Q_v=0.00, best=0.00, ubc=1.04)
├── (a=0, N=1, Q_v=0.00, best=0.00, ubc=0.74)
└── (a=1, N=1, Q_v=0.00, best=0.00, ubc=0.74)
├── (a=1, N=206, Q_v=0.96, best=1.00, ubc=1.08)
├── (a=0, N=3, Q_v=0.00, best=0.00, ubc=0.94)
├── (a=1, N=3, Q_v=0.00, best=0.00, ubc=0.94)
├── (a=2, N=196, Q_v=1.00, best=1.00, ubc=1.12)
└── (a=3, N=3, Q_v=0.00, best=0.00, ubc=0.94)
├── (a=2, N=483, Q_v=1.00, best=1.00, ubc=1.08)
└── (a=3, N=3, Q_v=0.00, best=0.00, ubc=1.04)
    ├── (a=0, N=1, Q_v=0.00, best=0.00, ubc=0.74)
    └── (a=3, N=1, Q_v=0.00, best=0.00, ubc=0.74)
├── (a=2, N=3, Q_v=0.00, best=0.00, ubc=1.05)
└── (a=3, N=5, Q_v=0.20, best=1.00, ubc=1.01)
    ├── (a=0, N=1, Q_v=0.00, best=0.00, ubc=0.90)
    ├── (a=1, N=1, Q_v=1.00, best=1.00, ubc=1.90)
    ├── (a=2, N=1, Q_v=0.00, best=0.00, ubc=0.90)
    └── (a=3, N=1, Q_v=0.00, best=0.00, ubc=0.90)
           INFO     selected action 1 after 200 simulations.
           INFO     current action list: [2, 2, 1, 1, 1]
(a=1, N=896, Q_v=0.98, best=1.00, ubc=1.04)
├── (a=0, N=3, Q_v=0.00, best=0.00, ubc=1.06)
├── (a=0, N=1, Q_v=0.00, best=0.00, ubc=0.74)
└── (a=1, N=1, Q_v=0.00, best=0.00, ubc=0.74)
├── (a=1, N=303, Q_v=0.97, best=1.00, ubc=1.08)
├── (a=0, N=3, Q_v=0.00, best=0.00, ubc=0.98)
├── (a=0, N=1, Q_v=0.00, best=0.00, ubc=0.74)
└── (a=3, N=1, Q_v=0.00, best=0.00, ubc=0.74)
├── (a=1, N=3, Q_v=0.00, best=0.00, ubc=0.98)
├── (a=0, N=1, Q_v=0.00, best=0.00, ubc=0.74)
└── (a=3, N=1, Q_v=0.00, best=0.00, ubc=0.74)
├── (a=2, N=293, Q_v=1.00, best=1.00, ubc=1.10)
└── (a=3, N=3, Q_v=0.00, best=0.00, ubc=0.98)
    ├── (a=0, N=1, Q_v=0.00, best=0.00, ubc=0.74)
    └── (a=1, N=1, Q_v=0.00, best=0.00, ubc=0.74)
├── (a=2, N=586, Q_v=1.00, best=1.00, ubc=1.08)
└── (a=3, N=3, Q_v=0.00, best=0.00, ubc=1.06)
    ├── (a=0, N=1, Q_v=0.00, best=0.00, ubc=0.74)
    └── (a=3, N=1, Q_v=0.00, best=0.00, ubc=0.74)
           INFO     selected action 2 after 200 simulations.
           INFO     current action list: [2, 2, 1, 1, 1, 2]
           INFO     Final action list: [2, 2, 1, 1, 1, 2]
Environment solved in 6 steps.