From ecc2c2e4078f1a5f4bc853c7413b7e2aa485bede Mon Sep 17 00:00:00 2001 From: Arthur O'Dwyer Date: Mon, 1 May 2017 15:28:38 -0700 Subject: [PATCH] Add report_workspace() to Reporter, and remove dead rules from the workspace. I think the change to `workspace.breakRule()` is harmless. In theory, it should make Copycat less hesitant to come up with rules that conflict with the already-broken rule. --- copycat/codeletMethods.py | 2 +- copycat/copycat.py | 3 +++ copycat/workspace.py | 6 ++++-- 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/copycat/codeletMethods.py b/copycat/codeletMethods.py index 669b4db..babda48 100644 --- a/copycat/codeletMethods.py +++ b/copycat/codeletMethods.py @@ -837,7 +837,7 @@ def rule_builder(ctx, codelet): rule.updateStrength() assert rule.totalStrength # fight against other rules - if workspace.rule: + if workspace.rule is not None: assert __structureVsStructure(rule, 1.0, workspace.rule, 1.0) workspace.buildRule(rule) diff --git a/copycat/copycat.py b/copycat/copycat.py index ee0e6dd..cc1218b 100644 --- a/copycat/copycat.py +++ b/copycat/copycat.py @@ -19,6 +19,8 @@ class Reporter(object): def report_temperature(self, temperature): pass + def report_workspace(self, workspace): + pass class Copycat(object): def __init__(self, rng_seed=None, reporter=None): @@ -43,6 +45,7 @@ class Copycat(object): self.coderack.chooseAndRunCodelet() self.reporter.report_coderack(self.coderack) self.reporter.report_temperature(self.temperature) + self.reporter.report_workspace(self.workspace) return lastUpdate def runTrial(self): diff --git a/copycat/workspace.py b/copycat/workspace.py index 7ce11d2..024bb9b 100644 --- a/copycat/workspace.py +++ b/copycat/workspace.py @@ -138,7 +138,7 @@ class Workspace(object): def slippages(self): result = [] if self.changedObject and self.changedObject.correspondence: - result = self.changedObject.correspondence.conceptMappings[:] + result += self.changedObject.correspondence.conceptMappings for o in self.initial.objects: if o.correspondence: for mapping in o.correspondence.slippages(): @@ -147,13 +147,15 @@ class Workspace(object): return result def buildRule(self, rule): - if self.rule: + if self.rule is not None: self.structures.remove(self.rule) self.rule = rule self.structures += [rule] rule.activateRuleDescriptions() def breakRule(self): + if self.rule is not None: + self.structures.remove(self.rule) self.rule = None def buildDescriptions(self, objekt):