Adds final formula comparison code
This commit is contained in:
@ -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):
|
||||||
|
|||||||
@ -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)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user