From e17dc2aa45105fe14adb48b666e735675fafbc01 Mon Sep 17 00:00:00 2001 From: Arthur O'Dwyer Date: Mon, 17 Apr 2017 00:08:54 -0700 Subject: [PATCH] Untangle some initialization code. Assert invariants. NFC. --- copycat/coderack.py | 90 ++++++++++++++++++------------------- copycat/coderackPressure.py | 5 +-- 2 files changed, 44 insertions(+), 51 deletions(-) diff --git a/copycat/coderack.py b/copycat/coderack.py index c66a2f6..cc1924e 100644 --- a/copycat/coderack.py +++ b/copycat/coderack.py @@ -75,16 +75,42 @@ def howManyToPost(workspace, codeletName): class Coderack(object): def __init__(self): self.pressures = CoderackPressures() - self.pressures.initialisePressures() self.reset() - self.initialCodeletNames = ( - 'bottom-up-bond-scout', - 'replacement-finder', - 'bottom-up-correspondence-scout', - ) self.runCodelets = {} self.postings = {} - self.getCodeletMethods() + self.methods = {} + + for name in dir(codeletMethods): + method = getattr(codeletMethods, name) + if getattr(method, 'is_codelet_method', False): + self.methods[method.codelet_name] = method + + assert set(self.methods.keys()) == set([ + 'breaker', + 'bottom-up-description-scout', + 'top-down-description-scout', + 'description-strength-tester', + 'description-builder', + 'bottom-up-bond-scout', + 'top-down-bond-scout--category', + 'top-down-bond-scout--direction', + 'bond-strength-tester', + 'bond-builder', + 'top-down-group-scout--category', + 'top-down-group-scout--direction', + 'group-scout--whole-string', + 'group-strength-tester', + 'group-builder', + 'replacement-finder', + 'rule-scout', + 'rule-strength-tester', + 'rule-builder', + 'rule-translator', + 'bottom-up-correspondence-scout', + 'important-object-correspondence-scout', + 'correspondence-strength-tester', + 'correspondence-builder', + ]) def reset(self): self.codelets = [] @@ -263,56 +289,26 @@ class Coderack(object): return self.codelets[0] def postInitialCodelets(self): - for name in self.initialCodeletNames: + logging.info("posting initial codelets") + codeletsToPost = [ + 'bottom-up-bond-scout', + 'replacement-finder', + 'bottom-up-correspondence-scout', + ] + for name in codeletsToPost: for _ in xrange(2 * len(workspace.objects)): codelet = Codelet(name, 1, self.codeletsRun) self.post(codelet) - def getCodeletMethods(self): - self.methods = {} - for name in dir(codeletMethods): - method = getattr(codeletMethods, name) - if getattr(method, 'is_codelet_method', False): - self.methods[method.codelet_name] = method - - assert set(self.methods.keys()) == set([ - 'breaker', - 'bottom-up-description-scout', - 'top-down-description-scout', - 'description-strength-tester', - 'description-builder', - 'bottom-up-bond-scout', - 'top-down-bond-scout--category', - 'top-down-bond-scout--direction', - 'bond-strength-tester', - 'bond-builder', - 'top-down-group-scout--category', - 'top-down-group-scout--direction', - 'group-scout--whole-string', - 'group-strength-tester', - 'group-builder', - 'replacement-finder', - 'rule-scout', - 'rule-strength-tester', - 'rule-builder', - 'rule-translator', - 'bottom-up-correspondence-scout', - 'important-object-correspondence-scout', - 'correspondence-strength-tester', - 'correspondence-builder', - ]) - def chooseAndRunCodelet(self): if not len(self.codelets): + # Indeed, this happens fairly often. self.postInitialCodelets() codelet = self.chooseCodeletToRun() - if codelet: - self.run(codelet) + self.run(codelet) def chooseCodeletToRun(self): - if not self.codelets: - return None - + assert self.codelets scale = (100.0 - formulas.Temperature + 10.0) / 15.0 urgsum = sum(codelet.urgency ** scale for codelet in self.codelets) threshold = random.random() * urgsum diff --git a/copycat/coderackPressure.py b/copycat/coderackPressure.py index c4103f6..229b7d7 100644 --- a/copycat/coderackPressure.py +++ b/copycat/coderackPressure.py @@ -56,10 +56,6 @@ def _codelet_index(codelet): class CoderackPressures(object): def __init__(self): - self.initialisePressures() - self.reset() - - def initialisePressures(self): self.pressures = [ CoderackPressure('Bottom Up Bonds'), CoderackPressure('Top Down Successor Bonds'), @@ -80,6 +76,7 @@ class CoderackPressures(object): CoderackPressure('Important Object Correspondences'), CoderackPressure('Breakers'), ] + self.reset() def calculatePressures(self): scale = (100.0 - Temperature + 10.0) / 15.0