Replace the coderack->workspaceFormulas coupling with coderack->workspace.
This feels slightly less tangled. Still needs work.
This commit is contained in:
@ -4,11 +4,11 @@ import random
|
||||
|
||||
import codeletMethods
|
||||
import formulas
|
||||
import workspaceFormulas
|
||||
from slipnet import slipnet
|
||||
from codelet import Codelet
|
||||
from coderackPressure import CoderackPressures
|
||||
from temperature import temperature
|
||||
from workspace import workspace
|
||||
|
||||
|
||||
NUMBER_OF_BINS = 7
|
||||
@ -21,6 +21,57 @@ def getUrgencyBin(urgency):
|
||||
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):
|
||||
def __init__(self):
|
||||
self.pressures = CoderackPressures()
|
||||
@ -61,11 +112,10 @@ class Coderack(object):
|
||||
continue
|
||||
#logging.info('using slipnode: %s' % node.get_name())
|
||||
for codeletName in node.codelets:
|
||||
probability = workspaceFormulas.probabilityOfPosting(
|
||||
codeletName)
|
||||
howMany = workspaceFormulas.howManyToPost(codeletName)
|
||||
probability = probabilityOfPosting(workspace, codeletName)
|
||||
howMany = howManyToPost(workspace, codeletName)
|
||||
for _ in xrange(howMany):
|
||||
if random.random() >= probability:
|
||||
if not formulas.coinFlip(probability):
|
||||
continue
|
||||
urgency = getUrgencyBin(
|
||||
node.activation * node.conceptualDepth / 100.0)
|
||||
@ -88,15 +138,15 @@ class Coderack(object):
|
||||
self.__postBottomUpCodelets('breaker')
|
||||
|
||||
def __postBottomUpCodelets(self, codeletName):
|
||||
probability = workspaceFormulas.probabilityOfPosting(codeletName)
|
||||
howMany = workspaceFormulas.howManyToPost(codeletName)
|
||||
probability = probabilityOfPosting(workspace, codeletName)
|
||||
howMany = howManyToPost(workspace, codeletName)
|
||||
urgency = 3
|
||||
if codeletName == 'breaker':
|
||||
urgency = 1
|
||||
if formulas.Temperature < 25.0 and 'translator' in codeletName:
|
||||
urgency = 5
|
||||
for _ in xrange(howMany):
|
||||
if random.random() < probability:
|
||||
if formulas.coinFlip(probability):
|
||||
codelet = Codelet(codeletName, urgency, self.codeletsRun)
|
||||
self.post(codelet)
|
||||
|
||||
@ -214,7 +264,7 @@ class Coderack(object):
|
||||
|
||||
def postInitialCodelets(self):
|
||||
for name in self.initialCodeletNames:
|
||||
for _ in xrange(2 * workspaceFormulas.numberOfObjects()):
|
||||
for _ in xrange(2 * len(workspace.objects)):
|
||||
codelet = Codelet(name, 1, self.codeletsRun)
|
||||
self.post(codelet)
|
||||
|
||||
|
||||
@ -6,10 +6,6 @@ from slipnet import slipnet
|
||||
import formulas
|
||||
|
||||
|
||||
def numberOfObjects():
|
||||
return len(workspace.objects)
|
||||
|
||||
|
||||
def chooseUnmodifiedObject(attribute, inObjects):
|
||||
objects = [o for o in inObjects if o.string != workspace.modified]
|
||||
if not len(objects):
|
||||
@ -85,54 +81,3 @@ def __descriptionTypeSupport(descriptionType, string):
|
||||
if description.descriptionType == descriptionType:
|
||||
described_count += 1
|
||||
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
|
||||
|
||||
Reference in New Issue
Block a user