From df8998f51789d897b847d6577c01023299975427 Mon Sep 17 00:00:00 2001 From: "Egli Adrian (IT-SCI-API-PFI)" <adrian.egli@sbb.ch> Date: Thu, 23 May 2019 16:53:41 +0200 Subject: [PATCH] editor2.py supports [w,h] grids --- flatland/utils/editor.py | 64 +++++++++++++++++++++++++++++----------- notebooks/Editor2.ipynb | 33 ++++++++------------- 2 files changed, 59 insertions(+), 38 deletions(-) diff --git a/flatland/utils/editor.py b/flatland/utils/editor.py index 7e813d76..91d81faa 100644 --- a/flatland/utils/editor.py +++ b/flatland/utils/editor.py @@ -98,9 +98,15 @@ class View(object): self.wFilename.observe(self.controller.setFilename, names="value") # Size of environment when regenerating - self.wRegenSize = IntSlider(value=10, min=5, max=100, step=5, description="Regen Size", + + + self.wRegenSizeWidth = IntSlider(value=10, min=5, max=100, step=5, description="Regen Size (Width)", + tip="Click Regenerate after changing this") + self.wRegenSizeWidth.observe(self.controller.setRegenSizeWidth, names="value") + + self.wRegenSizeHeight = IntSlider(value=10, min=5, max=100, step=5, description="Regen Size (Height)", tip="Click Regenerate after changing this") - self.wRegenSize.observe(self.controller.setRegenSize, names="value") + self.wRegenSizeHeight.observe(self.controller.setRegenSizeHeight, names="value") # Number of Agents when regenerating self.wRegenNAgents = IntSlider(value=1, min=0, max=20, step=1, description="# Agents", @@ -115,7 +121,7 @@ class View(object): self.wTab.set_title(i, title) self.wTab.children = [ VBox([self.wDebug, self.wDebug_move, self.wShowObs]), - VBox([self.wRegenSize, self.wRegenNAgents, self.wRegenMethod, self.wReplaceAgents])] + VBox([self.wRegenSizeWidth, self.wRegenSizeHeight, self.wRegenNAgents, self.wRegenMethod, self.wReplaceAgents])] # Progress bar intended for stepping in the background (not yet working) self.wProg_steps = ipywidgets.IntProgress(value=0, min=0, max=20, step=1, description="Step") @@ -314,6 +320,8 @@ class Controller(object): def reset(self, event): self.log("Reset - nAgents:", self.view.wRegenNAgents.value) + self.log("Reset - size:", self.model.regen_size_width) + self.log("Reset - size:", self.model.regen_size_height) self.model.reset(replace_agents=self.view.wReplaceAgents.value, nAgents=self.view.wRegenNAgents.value) @@ -326,8 +334,11 @@ class Controller(object): nAgents = self.view.wRegenNAgents.value self.model.regenerate(method, nAgents) - def setRegenSize(self, event): - self.model.setRegenSize(event["new"]) + def setRegenSizeWidth(self, event): + self.model.setRegenSizeWidth(event["new"]) + + def setRegenSizeHeight(self, event): + self.model.setRegenSizeHeight(event["new"]) def load(self, event): self.model.load() @@ -355,7 +366,8 @@ class EditorModel(object): def __init__(self, env): self.view = None self.env = env - self.regen_size = 10 + self.regen_size_width = 10 + self.regen_size_height = 10 self.lrcStroke = [] self.iTransLast = -1 @@ -607,6 +619,13 @@ class EditorModel(object): self.log("load file: ", self.env_filename) # self.env.rail.load_transition_map(self.env_filename, override_gridsize=True) self.env.load(self.env_filename) + + if not self.regen_size_height == self.env.height and not self.regen_size_width == self.env.width: + self.regen_size_height = self.env.height + self.regen_size_width = self.env.width + self.regenerate(None, 0, self.env) + self.env.load(self.env_filename) + self.fix_env() self.set_env(self.env) self.redraw() @@ -618,8 +637,10 @@ class EditorModel(object): # self.env.rail.save_transition_map(self.env_filename) self.env.save(self.env_filename) - def regenerate(self, method=None, nAgents=0): - self.log("Regenerate size", self.regen_size) + def regenerate(self, method=None, nAgents=0,env=None): + self.log("Regenerate size", + self.regen_size_width, + self.regen_size_height) if method is None or method == "Empty": fnMethod = empty_rail_generator() @@ -628,12 +649,15 @@ class EditorModel(object): else: fnMethod = complex_rail_generator(nr_start_goal=5, nr_extra=20, min_dist=12) - self.env = RailEnv(width=self.regen_size, - height=self.regen_size, - rail_generator=fnMethod, - # number_of_agents=self.env.get_num_agents(), - number_of_agents=nAgents, - obs_builder_object=TreeObsForRailEnv(max_depth=2)) + if env is None: + self.env = RailEnv(width=self.regen_size_width, + height=self.regen_size_height, + rail_generator=fnMethod, + # number_of_agents=self.env.get_num_agents(), + number_of_agents=nAgents, + obs_builder_object=TreeObsForRailEnv(max_depth=2)) + else: + self.env = env self.env.reset(regen_rail=True) self.fix_env() self.set_env(self.env) @@ -642,8 +666,13 @@ class EditorModel(object): # self.view.init_canvas() # Can't do init_canvas - need to keep the same canvas widget! self.redraw() - def setRegenSize(self, size): - self.regen_size = size + + def setRegenSizeWidth(self, size): + self.regen_size_width = size + + def setRegenSizeHeight(self, size): + self.regen_size_height = size + def find_agent_at(self, rcCell): for iAgent, agent in enumerate(self.env.agents_static): @@ -666,7 +695,8 @@ class EditorModel(object): # No if self.iSelectedAgent is None: # Create a new agent and select it. - agent_static = EnvAgentStatic(rcCell, 0, rcCell) + ## ADRIAN + agent_static = EnvAgentStatic(rcCell, np.random.choice(4), rcCell) self.iSelectedAgent = self.env.add_agent_static(agent_static) self.player = None # will need to start a new player else: diff --git a/notebooks/Editor2.ipynb b/notebooks/Editor2.ipynb index 5dcfd559..8305d115 100644 --- a/notebooks/Editor2.ipynb +++ b/notebooks/Editor2.ipynb @@ -9,18 +9,9 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": 1, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "The autoreload extension is already loaded. To reload it, use:\n", - " %reload_ext autoreload\n" - ] - } - ], + "outputs": [], "source": [ "%load_ext autoreload\n", "%autoreload 2" @@ -28,7 +19,7 @@ }, { "cell_type": "code", - "execution_count": 26, + "execution_count": 2, "metadata": {}, "outputs": [], "source": [ @@ -41,7 +32,7 @@ }, { "cell_type": "code", - "execution_count": 27, + "execution_count": 3, "metadata": {}, "outputs": [ { @@ -63,7 +54,7 @@ }, { "cell_type": "code", - "execution_count": 28, + "execution_count": 4, "metadata": {}, "outputs": [], "source": [ @@ -72,7 +63,7 @@ }, { "cell_type": "code", - "execution_count": 29, + "execution_count": 5, "metadata": {}, "outputs": [ { @@ -106,7 +97,7 @@ }, { "cell_type": "code", - "execution_count": 30, + "execution_count": 6, "metadata": { "scrolled": false }, @@ -114,7 +105,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "47af532101994c36a053e16a9b31dcd6", + "model_id": "83640a5c6059421d92e0d69049ad232f", "version_major": 2, "version_minor": 0 }, @@ -132,7 +123,7 @@ }, { "cell_type": "code", - "execution_count": 31, + "execution_count": 7, "metadata": { "scrolled": false }, @@ -140,7 +131,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "949dc7440647445e82dd1ca0f250e5ca", + "model_id": "dc7691bf5f804c5c95604cb551dbb335", "version_major": 2, "version_minor": 0 }, @@ -159,7 +150,7 @@ }, { "cell_type": "code", - "execution_count": 32, + "execution_count": 8, "metadata": {}, "outputs": [ { @@ -168,7 +159,7 @@ "(0, 0)" ] }, - "execution_count": 32, + "execution_count": 8, "metadata": {}, "output_type": "execute_result" } -- GitLab