Replace the coderack->workspaceFormulas coupling with coderack->workspace.

This feels slightly less tangled. Still needs work.
This commit is contained in:
Arthur O'Dwyer
2017-04-16 23:52:49 -07:00
parent 63b3fd4999
commit fa2142efaa
2 changed files with 59 additions and 64 deletions

View File

@ -4,11 +4,11 @@ import random
import codeletMethods import codeletMethods
import formulas import formulas
import workspaceFormulas
from slipnet import slipnet from slipnet import slipnet
from codelet import Codelet from codelet import Codelet
from coderackPressure import CoderackPressures from coderackPressure import CoderackPressures
from temperature import temperature from temperature import temperature
from workspace import workspace
NUMBER_OF_BINS = 7 NUMBER_OF_BINS = 7
@ -21,6 +21,57 @@ def getUrgencyBin(urgency):
return i + 1 return i + 1
def probabilityOfPosting(workspace, codeletName):
if codeletName == 'breaker':
return 1.0
if 'description' in codeletName:
result = (formulas.Temperature / 100.0) ** 2
else:
result = workspace.intraStringUnhappiness / 100.0
if 'correspondence' in codeletName:
result = workspace.interStringUnhappiness / 100.0
if 'replacement' in codeletName:
if workspace.numberOfUnreplacedObjects() > 0:
return 1.0
return 0.0
if 'rule' in codeletName:
if not workspace.rule:
return 1.0
return workspace.rule.totalWeakness() / 100.0
if 'translator' in codeletName:
assert False
return result
def howManyToPost(workspace, codeletName):
if codeletName == 'breaker' or 'description' in codeletName:
return 1
if 'translator' in codeletName:
if not workspace.rule:
return 0
return 1
if 'rule' in codeletName:
return 2
if 'group' in codeletName and not workspace.numberOfBonds():
return 0
if 'replacement' in codeletName and workspace.rule:
return 0
number = 0
if 'bond' in codeletName:
number = workspace.numberOfUnrelatedObjects()
if 'group' in codeletName:
number = workspace.numberOfUngroupedObjects()
if 'replacement' in codeletName:
number = workspace.numberOfUnreplacedObjects()
if 'correspondence' in codeletName:
number = workspace.numberOfUncorrespondingObjects()
if number < formulas.blur(2.0):
return 1
if number < formulas.blur(4.0):
return 2
return 3
class Coderack(object): class Coderack(object):
def __init__(self): def __init__(self):
self.pressures = CoderackPressures() self.pressures = CoderackPressures()
@ -61,11 +112,10 @@ class Coderack(object):
continue continue
#logging.info('using slipnode: %s' % node.get_name()) #logging.info('using slipnode: %s' % node.get_name())
for codeletName in node.codelets: for codeletName in node.codelets:
probability = workspaceFormulas.probabilityOfPosting( probability = probabilityOfPosting(workspace, codeletName)
codeletName) howMany = howManyToPost(workspace, codeletName)
howMany = workspaceFormulas.howManyToPost(codeletName)
for _ in xrange(howMany): for _ in xrange(howMany):
if random.random() >= probability: if not formulas.coinFlip(probability):
continue continue
urgency = getUrgencyBin( urgency = getUrgencyBin(
node.activation * node.conceptualDepth / 100.0) node.activation * node.conceptualDepth / 100.0)
@ -88,15 +138,15 @@ class Coderack(object):
self.__postBottomUpCodelets('breaker') self.__postBottomUpCodelets('breaker')
def __postBottomUpCodelets(self, codeletName): def __postBottomUpCodelets(self, codeletName):
probability = workspaceFormulas.probabilityOfPosting(codeletName) probability = probabilityOfPosting(workspace, codeletName)
howMany = workspaceFormulas.howManyToPost(codeletName) howMany = howManyToPost(workspace, codeletName)
urgency = 3 urgency = 3
if codeletName == 'breaker': if codeletName == 'breaker':
urgency = 1 urgency = 1
if formulas.Temperature < 25.0 and 'translator' in codeletName: if formulas.Temperature < 25.0 and 'translator' in codeletName:
urgency = 5 urgency = 5
for _ in xrange(howMany): for _ in xrange(howMany):
if random.random() < probability: if formulas.coinFlip(probability):
codelet = Codelet(codeletName, urgency, self.codeletsRun) codelet = Codelet(codeletName, urgency, self.codeletsRun)
self.post(codelet) self.post(codelet)
@ -214,7 +264,7 @@ class Coderack(object):
def postInitialCodelets(self): def postInitialCodelets(self):
for name in self.initialCodeletNames: for name in self.initialCodeletNames:
for _ in xrange(2 * workspaceFormulas.numberOfObjects()): 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)

View File

@ -6,10 +6,6 @@ from slipnet import slipnet
import formulas import formulas
def numberOfObjects():
return len(workspace.objects)
def chooseUnmodifiedObject(attribute, inObjects): def chooseUnmodifiedObject(attribute, inObjects):
objects = [o for o in inObjects if o.string != workspace.modified] objects = [o for o in inObjects if o.string != workspace.modified]
if not len(objects): if not len(objects):
@ -85,54 +81,3 @@ def __descriptionTypeSupport(descriptionType, string):
if description.descriptionType == descriptionType: if description.descriptionType == descriptionType:
described_count += 1 described_count += 1
return described_count / float(total) return described_count / float(total)
def probabilityOfPosting(codeletName):
if codeletName == 'breaker':
return 1.0
if 'description' in codeletName:
result = (formulas.Temperature / 100.0) ** 2
else:
result = workspace.intraStringUnhappiness / 100.0
if 'correspondence' in codeletName:
result = workspace.interStringUnhappiness / 100.0
if 'replacement' in codeletName:
if workspace.numberOfUnreplacedObjects() > 0:
return 1.0
return 0.0
if 'rule' in codeletName:
if not workspace.rule:
return 1.0
return workspace.rule.totalWeakness() / 100.0
if 'translator' in codeletName:
assert False
return result
def howManyToPost(codeletName):
if codeletName == 'breaker' or 'description' in codeletName:
return 1
if 'translator' in codeletName:
if not workspace.rule:
return 0
return 1
if 'rule' in codeletName:
return 2
if 'group' in codeletName and not workspace.numberOfBonds():
return 0
if 'replacement' in codeletName and workspace.rule:
return 0
number = 0
if 'bond' in codeletName:
number = workspace.numberOfUnrelatedObjects()
if 'group' in codeletName:
number = workspace.numberOfUngroupedObjects()
if 'replacement' in codeletName:
number = workspace.numberOfUnreplacedObjects()
if 'correspondence' in codeletName:
number = workspace.numberOfUncorrespondingObjects()
if number < formulas.blur(2.0):
return 1
if number < formulas.blur(4.0):
return 2
return 3