Adds final formula comparison code

This commit is contained in:
LSaldyt
2017-10-16 18:18:55 -07:00
parent 1835367ea9
commit 176e6cd4e2
2 changed files with 22 additions and 24 deletions

View File

@ -4,6 +4,8 @@ from .slipnet import Slipnet
from .temperature import Temperature from .temperature import Temperature
from .workspace import Workspace from .workspace import Workspace
from pprint import pprint
class Reporter(object): class Reporter(object):
"""Do-nothing base class for defining new reporter types""" """Do-nothing base class for defining new reporter types"""
def report_answer(self, answer): def report_answer(self, answer):
@ -68,31 +70,27 @@ class Copycat(object):
def run(self, initial, modified, target, iterations): def run(self, initial, modified, target, iterations):
self.workspace.resetWithStrings(initial, modified, target) self.workspace.resetWithStrings(initial, modified, target)
#self.temperature.useAdj('original')
#self.temperature.useAdj('entropy')
#self.temperature.useAdj('inverse') # 100 weight
#self.temperature.useAdj('fifty_converge')
#self.temperature.useAdj('soft')
#self.temperature.useAdj('weighted_soft')
#self.temperature.useAdj('alt_fifty')
#self.temperature.useAdj('average_alt')
self.temperature.useAdj('best')
answers = {} answers = {}
for i in range(iterations): for formula in ['original', 'best']:
answer = self.runTrial() self.temperature.useAdj(formula)
d = answers.setdefault(answer['answer'], { answers = {}
'count': 0, for i in range(iterations):
'sumtemp': 0, # TODO: use entropy answer = self.runTrial()
'sumtime': 0 d = answers.setdefault(answer['answer'], {
}) 'count': 0,
d['count'] += 1 'sumtemp': 0, # TODO: use entropy
d['sumtemp'] += answer['temp'] # TODO: use entropy 'sumtime': 0
d['sumtime'] += answer['time'] })
d['count'] += 1
d['sumtemp'] += answer['temp'] # TODO: use entropy
d['sumtime'] += answer['time']
for answer, d in answers.items():
d['avgtemp'] = d.pop('sumtemp') / d['count']
d['avgtime'] = d.pop('sumtime') / d['count']
print('The formula {} provided:'.format(formula))
pprint(answers)
for answer, d in answers.items():
d['avgtemp'] = d.pop('sumtemp') / d['count']
d['avgtime'] = d.pop('sumtime') / d['count']
return answers return answers
def run_forever(self, initial, modified, target): def run_forever(self, initial, modified, target):

View File

@ -58,7 +58,7 @@ def _averaged_alt(temp, prob):
def _working_best(temp, prob): def _working_best(temp, prob):
s = .5 # convergence s = .5 # convergence
r = 1.05 # power r = 2 # power
u = prob ** r if prob < .5 else prob ** (1/r) u = prob ** r if prob < .5 else prob ** (1/r)
return _weighted(temp, prob, s, u) return _weighted(temp, prob, s, u)