Files
copycat/copycat.py
2012-10-26 17:35:08 +01:00

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()