From bf2ce5fdae8f901697c9e784d06c5b90b5f1a866 Mon Sep 17 00:00:00 2001 From: James Elson Date: Mon, 11 Nov 2024 15:03:12 +0000 Subject: [PATCH 1/2] fix: improved reproducability for non-louvain methods Iterating over an unordered type (set) produced inconsistent results --- simpleoptions/environment.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/simpleoptions/environment.py b/simpleoptions/environment.py index 5b6cdd5..e3bb4a5 100644 --- a/simpleoptions/environment.py +++ b/simpleoptions/environment.py @@ -175,7 +175,7 @@ def set_options(self, new_options: List["BaseOption"], append: bool = False) -> self._option_availability_maps = {} for state in self.get_state_space(): - for option in self._options: + for option in sorted(self._options, key=lambda x: str(x)): # TODO: temporary fix for repeatability if option.initiation(state): self._option_availability_maps[state] = self._option_availability_maps.get(state, list()) self._option_availability_maps[state].append(option) @@ -196,7 +196,7 @@ def set_exploration_options(self, new_options: List["BaseOption"], append: bool self._exploration_option_availability_maps = {} for state in self.get_state_space(): - for exploration_option in self.exploration_options: + for exploration_option in sorted(self.exploration_options, key=lambda x: str(x)): # TODO: temporary fix for repeatability if exploration_option.initiation(state): self._exploration_option_availability_maps[state] = self._exploration_option_availability_maps.get( state, list() From bb09389a28f6195e980e9d23b3edefcaec06c91a Mon Sep 17 00:00:00 2001 From: James Elson Date: Tue, 12 Nov 2024 12:13:46 +0000 Subject: [PATCH 2/2] refactor: removed graph outputs --- simpleoptions/implementations/betweenness.py | 2 +- simpleoptions/implementations/diffusion_options.py | 2 +- simpleoptions/implementations/eigenoptions.py | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/simpleoptions/implementations/betweenness.py b/simpleoptions/implementations/betweenness.py index 42bab3b..79cf915 100644 --- a/simpleoptions/implementations/betweenness.py +++ b/simpleoptions/implementations/betweenness.py @@ -78,7 +78,7 @@ def generate_options( stg.nodes[state][f"{option.subgoal} Policy"] = str(option.policy(state)) elif state == option.subgoal: stg.nodes[state][f"{option.subgoal} Policy"] = "GOAL" - nx.write_gexf(stg, "betweenness_test.gexf", prettyprint=True) + # nx.write_gexf(stg, "betweenness_test.gexf", prettyprint=True) if return_subgoals: return options, subgoals diff --git a/simpleoptions/implementations/diffusion_options.py b/simpleoptions/implementations/diffusion_options.py index 8ef510d..b55b086 100644 --- a/simpleoptions/implementations/diffusion_options.py +++ b/simpleoptions/implementations/diffusion_options.py @@ -98,7 +98,7 @@ def generate_options( stg.nodes[state][f"{option.subgoal} Policy"] = str(option.policy(state)) elif state == option.subgoal: stg.nodes[state][f"{option.subgoal} Policy"] = "GOAL" - nx.write_gexf(stg, "diffusion_test.gexf", prettyprint=True) + # nx.write_gexf(stg, "diffusion_test.gexf", prettyprint=True) if return_subgoals: return options, subgoals diff --git a/simpleoptions/implementations/eigenoptions.py b/simpleoptions/implementations/eigenoptions.py index 1a82c67..84e5956 100644 --- a/simpleoptions/implementations/eigenoptions.py +++ b/simpleoptions/implementations/eigenoptions.py @@ -99,7 +99,7 @@ def _generate_from_laplacian(self, env: BaseEnvironment, debug: bool = False): print(f"PVF {eigenoption.pvf_id} Values") if state in eigenoption.primitive_policy: stg.nodes[state][f"PVF {eigenoption.pvf_id} Policy"] = str(eigenoption.policy(state)) - nx.write_gexf(stg, "eigen_test.gexf", prettyprint=True) + # nx.write_gexf(stg, "eigen_test.gexf", prettyprint=True) return eigenoptions, pvfs