Untangle some initialization code. Assert invariants. NFC.

This commit is contained in:
Arthur O'Dwyer
2017-04-17 00:08:54 -07:00
parent fa2142efaa
commit e17dc2aa45
2 changed files with 44 additions and 51 deletions

View File

@ -75,16 +75,42 @@ def howManyToPost(workspace, codeletName):
class Coderack(object): class Coderack(object):
def __init__(self): def __init__(self):
self.pressures = CoderackPressures() self.pressures = CoderackPressures()
self.pressures.initialisePressures()
self.reset() self.reset()
self.initialCodeletNames = (
'bottom-up-bond-scout',
'replacement-finder',
'bottom-up-correspondence-scout',
)
self.runCodelets = {} self.runCodelets = {}
self.postings = {} 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): def reset(self):
self.codelets = [] self.codelets = []
@ -263,56 +289,26 @@ class Coderack(object):
return self.codelets[0] return self.codelets[0]
def postInitialCodelets(self): 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)): for _ in xrange(2 * len(workspace.objects)):
codelet = Codelet(name, 1, self.codeletsRun) codelet = Codelet(name, 1, self.codeletsRun)
self.post(codelet) 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): def chooseAndRunCodelet(self):
if not len(self.codelets): if not len(self.codelets):
# Indeed, this happens fairly often.
self.postInitialCodelets() self.postInitialCodelets()
codelet = self.chooseCodeletToRun() codelet = self.chooseCodeletToRun()
if codelet: self.run(codelet)
self.run(codelet)
def chooseCodeletToRun(self): def chooseCodeletToRun(self):
if not self.codelets: assert self.codelets
return None
scale = (100.0 - formulas.Temperature + 10.0) / 15.0 scale = (100.0 - formulas.Temperature + 10.0) / 15.0
urgsum = sum(codelet.urgency ** scale for codelet in self.codelets) urgsum = sum(codelet.urgency ** scale for codelet in self.codelets)
threshold = random.random() * urgsum threshold = random.random() * urgsum

View File

@ -56,10 +56,6 @@ def _codelet_index(codelet):
class CoderackPressures(object): class CoderackPressures(object):
def __init__(self): def __init__(self):
self.initialisePressures()
self.reset()
def initialisePressures(self):
self.pressures = [ self.pressures = [
CoderackPressure('Bottom Up Bonds'), CoderackPressure('Bottom Up Bonds'),
CoderackPressure('Top Down Successor Bonds'), CoderackPressure('Top Down Successor Bonds'),
@ -80,6 +76,7 @@ class CoderackPressures(object):
CoderackPressure('Important Object Correspondences'), CoderackPressure('Important Object Correspondences'),
CoderackPressure('Breakers'), CoderackPressure('Breakers'),
] ]
self.reset()
def calculatePressures(self): def calculatePressures(self):
scale = (100.0 - Temperature + 10.0) / 15.0 scale = (100.0 - Temperature + 10.0) / 15.0