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