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:
@ -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)
|
||||
|
||||
|
||||
@ -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):
|
||||
|
||||
@ -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):
|
||||
|
||||
Reference in New Issue
Block a user