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