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.
This commit is contained in:
Arthur O'Dwyer
2017-05-01 15:28:38 -07:00
parent 25d73785de
commit ecc2c2e407
3 changed files with 8 additions and 3 deletions

View File

@ -837,7 +837,7 @@ def rule_builder(ctx, codelet):
rule.updateStrength() rule.updateStrength()
assert rule.totalStrength assert rule.totalStrength
# fight against other rules # fight against other rules
if workspace.rule: if workspace.rule is not None:
assert __structureVsStructure(rule, 1.0, workspace.rule, 1.0) assert __structureVsStructure(rule, 1.0, workspace.rule, 1.0)
workspace.buildRule(rule) workspace.buildRule(rule)

View File

@ -19,6 +19,8 @@ class Reporter(object):
def report_temperature(self, temperature): def report_temperature(self, temperature):
pass pass
def report_workspace(self, workspace):
pass
class Copycat(object): class Copycat(object):
def __init__(self, rng_seed=None, reporter=None): def __init__(self, rng_seed=None, reporter=None):
@ -43,6 +45,7 @@ class Copycat(object):
self.coderack.chooseAndRunCodelet() self.coderack.chooseAndRunCodelet()
self.reporter.report_coderack(self.coderack) self.reporter.report_coderack(self.coderack)
self.reporter.report_temperature(self.temperature) self.reporter.report_temperature(self.temperature)
self.reporter.report_workspace(self.workspace)
return lastUpdate return lastUpdate
def runTrial(self): def runTrial(self):

View File

@ -138,7 +138,7 @@ class Workspace(object):
def slippages(self): def slippages(self):
result = [] result = []
if self.changedObject and self.changedObject.correspondence: if self.changedObject and self.changedObject.correspondence:
result = self.changedObject.correspondence.conceptMappings[:] result += self.changedObject.correspondence.conceptMappings
for o in self.initial.objects: for o in self.initial.objects:
if o.correspondence: if o.correspondence:
for mapping in o.correspondence.slippages(): for mapping in o.correspondence.slippages():
@ -147,13 +147,15 @@ class Workspace(object):
return result return result
def buildRule(self, rule): def buildRule(self, rule):
if self.rule: if self.rule is not None:
self.structures.remove(self.rule) self.structures.remove(self.rule)
self.rule = rule self.rule = rule
self.structures += [rule] self.structures += [rule]
rule.activateRuleDescriptions() rule.activateRuleDescriptions()
def breakRule(self): def breakRule(self):
if self.rule is not None:
self.structures.remove(self.rule)
self.rule = None self.rule = None
def buildDescriptions(self, objekt): def buildDescriptions(self, objekt):