From 176e6cd4e2a31ca6b06961f61a7e74c4ccfefaaa Mon Sep 17 00:00:00 2001 From: LSaldyt Date: Mon, 16 Oct 2017 18:18:55 -0700 Subject: [PATCH] Adds final formula comparison code --- copycat/copycat.py | 44 ++++++++++++++++++++---------------------- copycat/temperature.py | 2 +- 2 files changed, 22 insertions(+), 24 deletions(-) diff --git a/copycat/copycat.py b/copycat/copycat.py index e66a738..e80a2c6 100644 --- a/copycat/copycat.py +++ b/copycat/copycat.py @@ -4,6 +4,8 @@ from .slipnet import Slipnet from .temperature import Temperature from .workspace import Workspace +from pprint import pprint + class Reporter(object): """Do-nothing base class for defining new reporter types""" def report_answer(self, answer): @@ -68,31 +70,27 @@ class Copycat(object): def run(self, initial, modified, target, iterations): 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 = {} - for i in range(iterations): - answer = self.runTrial() - d = answers.setdefault(answer['answer'], { - 'count': 0, - 'sumtemp': 0, # TODO: use entropy - 'sumtime': 0 - }) - d['count'] += 1 - d['sumtemp'] += answer['temp'] # TODO: use entropy - d['sumtime'] += answer['time'] + for formula in ['original', 'best']: + self.temperature.useAdj(formula) + answers = {} + for i in range(iterations): + answer = self.runTrial() + d = answers.setdefault(answer['answer'], { + 'count': 0, + 'sumtemp': 0, # TODO: use entropy + 'sumtime': 0 + }) + 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 def run_forever(self, initial, modified, target): diff --git a/copycat/temperature.py b/copycat/temperature.py index e62f0a8..17f586e 100644 --- a/copycat/temperature.py +++ b/copycat/temperature.py @@ -58,7 +58,7 @@ def _averaged_alt(temp, prob): def _working_best(temp, prob): s = .5 # convergence - r = 1.05 # power + r = 2 # power u = prob ** r if prob < .5 else prob ** (1/r) return _weighted(temp, prob, s, u)