From cd8817339b9facae40fb45635a71daeafe1c9203 Mon Sep 17 00:00:00 2001 From: scsanty <64268196+scsanty@users.noreply.github.com> Date: Sat, 23 Oct 2021 22:46:08 +0100 Subject: [PATCH] Added Observer base class in agents.py Matplotlib can be a nice observer tool, the base class can help users to extend and modify accordingly --- agents.py | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/agents.py b/agents.py index d29b0c382..449a54c3b 100644 --- a/agents.py +++ b/agents.py @@ -34,6 +34,7 @@ from ipythonblocks import BlockGrid from IPython.display import HTML, display, clear_output from time import sleep +import matplotlib.pyplot as plt import random import copy @@ -98,6 +99,42 @@ def can_grab(self, thing): return False +class Observer(): + def __init__(self, figsize=None): + self.figure = plt.figure(num='Observer', figsize=figsize) + self.observer = self.figure.add_axes([0.1, 0.1, 0.8 ,0.8]) + self.observer.axis('off') + + def thing_moved(self, thing): + raise NotImplementedError + + def thing_added(self, thing): + raise NotImplementedError + + def thing_deleted(self, thing): + raise NotImplementedError + + def keep_plot_on(self): + self.figure.show() + plt.show() + + def pause_observer(self, secs): + plt.pause(secs) + + def set_plot_label(self, text): + self.observer.set_title(text) + self.refresh_canvas() + + def observer_self_cleanup(self): + self.figure.clear() + plt.close('all') + del(self) + + def refresh_canvas(self): + self.figure.canvas.draw_idle() + self.figure.show() + + def TraceAgent(agent): """Wrap the agent's program to print its input and output. This will let you see what the agent is doing in the environment."""