Source code for gym_electric_motor.visualization.console_printer

import numpy as np

from ..core import ElectricMotorVisualization


[docs]class ConsolePrinter(ElectricMotorVisualization): """Prints current training values of the environment on the console. These include environment state and reference values as well as the number of training steps, the rewards and the cumulative reward. It also shows why an episode has terminated (external, constraint violation) """ def __init__(self, verbose=0, update_freq=1): """ Args: verbose(Int): Integer indicating whether and at which frequency the console will be printed. Options: 0: No Printing 1: Printing after an episode has terminated 2: Printing at each step of an episode update_freq(Int): Unsigned Integer setting the update frequency if verbose is 2. It's value n means that each nth step the corresponding output will be printed """ super().__init__() self._limits = None self._state = np.nan self._reference = np.nan self._action = np.nan self._reward = np.nan self._k = 0 self._print_freq = verbose self._update_freq = update_freq self._num_steps = 0 self._cum_reward = 0 self._done = False self._episode = 0 np.set_printoptions(formatter={"float": "{:9.3f}".format}) self._reset = False
[docs] def on_reset_begin(self): """Gets called on environment reset. Handles internal value reset and External reset printing""" self._reset = True
[docs] def on_reset_end(self, state, reference): self._reference = reference self._state = state
[docs] def set_env(self, env): """Gets the limits of the current physical system for accurate printing""" self._limits = env.physical_system.limits
[docs] def on_step_begin(self, k, action): self._k = k self._action = action
[docs] def on_step_end(self, k, state, reference, reward, terminated): """Gets called at each step of the environment. Handles per step printing as well es constraint violation printing""" self._k = k self._state = state self._reference = reference self._reward = reward self._cum_reward += reward self._done = terminated
[docs] def render(self): if self._print_freq > 0: if self._reset: print( f"\nEpisode {self._episode} ", "Constraint Violation! " if self._done else "External Reset. ", f"Number of steps: {self._k: 8d} ", f"Cumulative Reward: {self._cum_reward:7.3f}\n", ) self._cum_reward = 0 self._reset = False self._episode += 1 if self._print_freq == 2 and (self._k % self._update_freq) == 0: print( f"Episode {self._episode} " f"Step {self._k: 8d} " f"State {self._state * self._limits} " f"Reference {self._reference * self._limits} " f"Reward {self._reward:7.3f} " f"Cumulative Reward {self._cum_reward:7.3f}", end="\r", )