diff --git a/flatland/utils/editor.py b/flatland/utils/editor.py index 1f4a604770575f5bd24d62ade3092cbd251081be..ccff0fa7ca68e9f91aca74ff65e6c84614700ed5 100644 --- a/flatland/utils/editor.py +++ b/flatland/utils/editor.py @@ -177,7 +177,15 @@ class View(object): with self.wOutput: # plt.figure(figsize=(10, 10)) self.oRT.set_new_rail() - self.oRT.renderEnv(spacing=False, arrows=False, sRailColor="gray", + + self.model.env.agents = self.model.env.agents_static + for a in self.model.env.agents: + if hasattr(a, 'old_position') == False: + a.old_position = a.position + if hasattr(a, 'old_direction') == False: + a.old_direction = a.direction + + self.oRT.renderEnv(spacing=False, arrows=False, sRailColor="gray",agents=True, show=False, iSelectedAgent=self.model.iSelectedAgent, show_observations=self.show_observations()) img = self.oRT.getImage() @@ -344,6 +352,7 @@ class Controller(object): continue if iAgent == self.model.iSelectedAgent: agent.direction = (agent.direction + 1) % 4 + agent.old_direction = agent.direction self.model.redraw() def restartAgents(self, event): diff --git a/flatland/utils/graphics_pil.py b/flatland/utils/graphics_pil.py index d9a28649edd7c440f10c6c1a81b3b8021c1d9f7f..2a06f40176c206b90b78c0fdbbd3ad3c17239347 100644 --- a/flatland/utils/graphics_pil.py +++ b/flatland/utils/graphics_pil.py @@ -147,7 +147,7 @@ class PILGL(GraphicsLayer): def show(self, block=False): img = self.alpha_composite_layers() - + if not self.window_open: self.open_window() diff --git a/flatland/utils/rendertools.py b/flatland/utils/rendertools.py index a4ad66d95184203015110c68a3f38c16eae0e192..1c2185b69d8b3c7ba7163534a0986c19c68890f8 100644 --- a/flatland/utils/rendertools.py +++ b/flatland/utils/rendertools.py @@ -773,6 +773,7 @@ class RenderTool(object): self.gl.setRailAt(r, c, binTrans, iTarget=target) for iAgent, agent in enumerate(self.env.agents): + if agent is None: continue diff --git a/notebooks/Editor2.ipynb b/notebooks/Editor2.ipynb index 0705369b514edbae16f161ec0b672b340ec711d7..ef0a2080ecb653b92793ec33384f1ff58cc38b2d 100644 --- a/notebooks/Editor2.ipynb +++ b/notebooks/Editor2.ipynb @@ -78,7 +78,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "<flatland.utils.graphics_pil.PILSVG object at 0x00000207B4DA0198> <class 'flatland.utils.graphics_pil.PILSVG'>\n", + "<flatland.utils.graphics_pil.PILSVG object at 0x000001FFD1ED30B8> <class 'flatland.utils.graphics_pil.PILSVG'>\n", "<super: <class 'PILSVG'>, <PILSVG object>> <class 'super'>\n", " 0000000000000000 Background_#91D1DD.svg\n", "WE 0000000000000100 Gleis_Deadend.svg\n", @@ -149,7 +149,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "198e07236e2e4996accf8134a4641f6b", + "model_id": "9112df48349a47eb8f3a790e1565c011", "version_major": 2, "version_minor": 0 }, @@ -159,6 +159,36 @@ }, "metadata": {}, "output_type": "display_data" + }, + { + "ename": "TypeError", + "evalue": "can not serialize 'numpy.int32' object", + "output_type": "error", + "traceback": [ + "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[1;31mTypeError\u001b[0m Traceback (most recent call last)", + "\u001b[1;32mc:\\users\\u216993\\appdata\\local\\programs\\python\\python36\\lib\\site-packages\\flatland_rl-0.1.1-py3.6.egg\\flatland\\utils\\editor.py\u001b[0m in \u001b[0;36msave\u001b[1;34m(self, event)\u001b[0m\n\u001b[0;32m 374\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 375\u001b[0m \u001b[1;32mdef\u001b[0m \u001b[0msave\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mevent\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 376\u001b[1;33m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mmodel\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0msave\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 377\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 378\u001b[0m \u001b[1;32mdef\u001b[0m \u001b[0mstep\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mevent\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", + "\u001b[1;32mc:\\users\\u216993\\appdata\\local\\programs\\python\\python36\\lib\\site-packages\\flatland_rl-0.1.1-py3.6.egg\\flatland\\utils\\editor.py\u001b[0m in \u001b[0;36msave\u001b[1;34m(self)\u001b[0m\n\u001b[0;32m 670\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mlog\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m\"save to \"\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0menv_filename\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;34m\" working dir: \"\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mos\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mgetcwd\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 671\u001b[0m \u001b[1;31m# self.env.rail.save_transition_map(self.env_filename)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 672\u001b[1;33m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0menv\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0msave\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0menv_filename\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 673\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 674\u001b[0m \u001b[1;32mdef\u001b[0m \u001b[0mregenerate\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mmethod\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;32mNone\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mnAgents\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;36m0\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0menv\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;32mNone\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", + "\u001b[1;32mc:\\users\\u216993\\appdata\\local\\programs\\python\\python36\\lib\\site-packages\\flatland_rl-0.1.1-py3.6.egg\\flatland\\envs\\rail_env.py\u001b[0m in \u001b[0;36msave\u001b[1;34m(self, filename)\u001b[0m\n\u001b[0;32m 372\u001b[0m \u001b[1;32mdef\u001b[0m \u001b[0msave\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mfilename\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 373\u001b[0m \u001b[1;32mwith\u001b[0m \u001b[0mopen\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mfilename\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;34m\"wb\"\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;32mas\u001b[0m \u001b[0mfile_out\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 374\u001b[1;33m \u001b[0mfile_out\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mwrite\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mget_full_state_msg\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 375\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 376\u001b[0m \u001b[1;32mdef\u001b[0m \u001b[0mload\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mfilename\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", + "\u001b[1;32mc:\\users\\u216993\\appdata\\local\\programs\\python\\python36\\lib\\site-packages\\flatland_rl-0.1.1-py3.6.egg\\flatland\\envs\\rail_env.py\u001b[0m in \u001b[0;36mget_full_state_msg\u001b[1;34m(self)\u001b[0m\n\u001b[0;32m 343\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 344\u001b[0m \u001b[0mmsgpack\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mpackb\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mgrid_data\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 345\u001b[1;33m \u001b[0mmsgpack\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mpackb\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0magent_data\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 346\u001b[0m \u001b[0mmsgpack\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mpackb\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0magent_static_data\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 347\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n", + "\u001b[1;32mc:\\users\\u216993\\appdata\\local\\programs\\python\\python36\\lib\\site-packages\\msgpack\\__init__.py\u001b[0m in \u001b[0;36mpackb\u001b[1;34m(o, **kwargs)\u001b[0m\n\u001b[0;32m 44\u001b[0m \u001b[0mSee\u001b[0m \u001b[1;33m:\u001b[0m\u001b[1;32mclass\u001b[0m\u001b[1;33m:\u001b[0m\u001b[0;31m`\u001b[0m\u001b[0mPacker\u001b[0m\u001b[0;31m`\u001b[0m \u001b[1;32mfor\u001b[0m \u001b[0moptions\u001b[0m\u001b[1;33m.\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 45\u001b[0m \"\"\"\n\u001b[1;32m---> 46\u001b[1;33m \u001b[1;32mreturn\u001b[0m \u001b[0mPacker\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mpack\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mo\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 47\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 48\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n", + "\u001b[1;32mmsgpack\\_packer.pyx\u001b[0m in \u001b[0;36mmsgpack._cmsgpack.Packer.pack\u001b[1;34m()\u001b[0m\n", + "\u001b[1;32mmsgpack\\_packer.pyx\u001b[0m in \u001b[0;36mmsgpack._cmsgpack.Packer.pack\u001b[1;34m()\u001b[0m\n", + "\u001b[1;32mmsgpack\\_packer.pyx\u001b[0m in \u001b[0;36mmsgpack._cmsgpack.Packer.pack\u001b[1;34m()\u001b[0m\n", + "\u001b[1;32mmsgpack\\_packer.pyx\u001b[0m in \u001b[0;36mmsgpack._cmsgpack.Packer._pack\u001b[1;34m()\u001b[0m\n", + "\u001b[1;32mmsgpack\\_packer.pyx\u001b[0m in \u001b[0;36mmsgpack._cmsgpack.Packer._pack\u001b[1;34m()\u001b[0m\n", + "\u001b[1;32mmsgpack\\_packer.pyx\u001b[0m in \u001b[0;36mmsgpack._cmsgpack.Packer._pack\u001b[1;34m()\u001b[0m\n", + "\u001b[1;32mmsgpack\\_packer.pyx\u001b[0m in \u001b[0;36mmsgpack._cmsgpack.Packer._pack\u001b[1;34m()\u001b[0m\n", + "\u001b[1;31mTypeError\u001b[0m: can not serialize 'numpy.int32' object" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Clear rails\n", + "Clear rails\n" + ] } ], "source": [ @@ -175,7 +205,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "47371e94faa3422ca2d6b1d6e7a83e4f", + "model_id": "2e4b58af24e84522a374d8bd7221c273", "version_major": 2, "version_minor": 0 },