69 lines
1.8 KiB
Python
69 lines
1.8 KiB
Python
import sys
|
|
import logging
|
|
logging.basicConfig(
|
|
level=logging.INFO,
|
|
#format='%(asctime)s %(filename)s:%(lineno)d %(message)s',
|
|
format='%(message)s',
|
|
filename='./copycat.log',
|
|
filemode='w'
|
|
)
|
|
|
|
from workspace import workspace
|
|
from workspaceFormulas import workspaceFormulas
|
|
from slipnet import slipnet
|
|
from temperature import temperature
|
|
from coderack import coderack
|
|
from coderackPressure import coderackPressures
|
|
|
|
def updateEverything():
|
|
workspace.updateEverything()
|
|
coderack.updateCodelets()
|
|
slipnet.update()
|
|
workspaceFormulas.updateTemperature()
|
|
coderackPressures.calculatePressures()
|
|
|
|
def mainLoop(lastUpdate):
|
|
temperature.tryUnclamp()
|
|
result = lastUpdate
|
|
if coderack.codeletsRun - lastUpdate >= slipnet.timeStepLength or not coderack.codeletsRun:
|
|
updateEverything()
|
|
result = coderack.codeletsRun
|
|
logging.debug('Number of codelets: %d' % len(coderack.codelets))
|
|
coderack.chooseAndRunCodelet()
|
|
return result
|
|
|
|
def runTrial():
|
|
"""Run a trial of the copycat algorithm"""
|
|
answers = {}
|
|
slipnet.reset()
|
|
workspace.reset()
|
|
coderack.reset()
|
|
lastUpdate = 0
|
|
while not workspace.foundAnswer:
|
|
lastUpdate = mainLoop(lastUpdate)
|
|
if workspace.rule:
|
|
answer = workspace.rule.finalAnswer
|
|
else:
|
|
answer = None
|
|
print '%d: %s' % (coderack.codeletsRun,answer)
|
|
answers[answer] = answers.get(answer,0) + 1
|
|
logging.debug('codelets used:')
|
|
for answer,count in answers.iteritems():
|
|
print '%s:%d' % (answer,count)
|
|
|
|
def main():
|
|
#slipnet.setConceptualDepths(50.0)
|
|
"""Run the program"""
|
|
argc = len(sys.argv)
|
|
if argc == 4:
|
|
workspace.setStrings(initial=sys.argv[1].lower(),modified=sys.argv[2].lower(),target=sys.argv[3].lower())
|
|
elif argc == 1:
|
|
workspace.setStrings(initial='abc',modified='abd',target='ijk')
|
|
else:
|
|
print >> sys.stderr, 'Usage: %s [initial modified target]' % sys.argv[0]
|
|
return
|
|
runTrial()
|
|
|
|
if __name__ == '__main__':
|
|
main()
|