Fixes bugs with multi-formula distributions
This commit is contained in:
BIN
.distributions
BIN
.distributions
Binary file not shown.
@ -71,26 +71,23 @@ class Copycat(object):
|
|||||||
self.workspace.resetWithStrings(initial, modified, target)
|
self.workspace.resetWithStrings(initial, modified, target)
|
||||||
|
|
||||||
answers = {}
|
answers = {}
|
||||||
for formula in ['original', 'best', 'sbest', 'pbest', 'meta', 'pmeta', 'none']:
|
for i in range(iterations):
|
||||||
self.temperature.useAdj(formula)
|
answer = self.runTrial()
|
||||||
answers = {}
|
d = answers.setdefault(answer['answer'], {
|
||||||
for i in range(iterations):
|
'count': 0,
|
||||||
answer = self.runTrial()
|
'sumtemp': 0, # TODO: use entropy
|
||||||
d = answers.setdefault(answer['answer'], {
|
'sumtime': 0
|
||||||
'count': 0,
|
})
|
||||||
'sumtemp': 0, # TODO: use entropy
|
d['count'] += 1
|
||||||
'sumtime': 0
|
d['sumtemp'] += answer['temp'] # TODO: use entropy
|
||||||
})
|
d['sumtime'] += answer['time']
|
||||||
d['count'] += 1
|
|
||||||
d['sumtemp'] += answer['temp'] # TODO: use entropy
|
|
||||||
d['sumtime'] += answer['time']
|
|
||||||
|
|
||||||
for answer, d in answers.items():
|
for answer, d in answers.items():
|
||||||
d['avgtemp'] = d.pop('sumtemp') / d['count']
|
d['avgtemp'] = d.pop('sumtemp') / d['count']
|
||||||
d['avgtime'] = d.pop('sumtime') / d['count']
|
d['avgtime'] = d.pop('sumtime') / d['count']
|
||||||
print('The formula {} provided:'.format(formula))
|
#print('The formula {} provided:'.format(formula))
|
||||||
print('Average difference: {}'.format(self.temperature.getAverageDifference()))
|
#print('Average difference: {}'.format(self.temperature.getAverageDifference()))
|
||||||
pprint(answers)
|
#pprint(answers)
|
||||||
|
|
||||||
return answers
|
return answers
|
||||||
|
|
||||||
|
|||||||
@ -5,6 +5,12 @@ from pprint import pprint
|
|||||||
class Problem:
|
class Problem:
|
||||||
def __init__(self, initial, modified, target, iterations, distributions=None, formulas=None):
|
def __init__(self, initial, modified, target, iterations, distributions=None, formulas=None):
|
||||||
self.formulas = formulas
|
self.formulas = formulas
|
||||||
|
if formulas is not None:
|
||||||
|
assert hasattr(Copycat(), 'temperature')
|
||||||
|
else:
|
||||||
|
if hasattr(Copycat(), 'temperature'):
|
||||||
|
self.formulas = set(Copycat().temperature.adj_formulas())
|
||||||
|
print(self.formulas)
|
||||||
self.initial = initial
|
self.initial = initial
|
||||||
self.modified = modified
|
self.modified = modified
|
||||||
self.target = target
|
self.target = target
|
||||||
@ -14,8 +20,7 @@ class Problem:
|
|||||||
self.distributions = self.solve()
|
self.distributions = self.solve()
|
||||||
else:
|
else:
|
||||||
self.distributions = distributions
|
self.distributions = distributions
|
||||||
if formulas is not None:
|
print(self.formulas)
|
||||||
assert hasattr(Copycat().workspace, 'temperature')
|
|
||||||
|
|
||||||
def test(self, comparison, expected=None):
|
def test(self, comparison, expected=None):
|
||||||
print('-' * 120)
|
print('-' * 120)
|
||||||
@ -41,8 +46,8 @@ class Problem:
|
|||||||
copycat = Copycat()
|
copycat = Copycat()
|
||||||
answers = dict()
|
answers = dict()
|
||||||
if self.formulas == None:
|
if self.formulas == None:
|
||||||
if hasattr(copycat.workspace, 'temperature'):
|
if hasattr(copycat, 'temperature'):
|
||||||
formula = copycat.workspace.temperature.getAdj()
|
formula = copycat.temperature.getAdj()
|
||||||
else:
|
else:
|
||||||
formula = None
|
formula = None
|
||||||
answers[formula] = copycat.run(self.initial,
|
answers[formula] = copycat.run(self.initial,
|
||||||
@ -50,12 +55,14 @@ class Problem:
|
|||||||
self.target,
|
self.target,
|
||||||
self.iterations)
|
self.iterations)
|
||||||
else:
|
else:
|
||||||
|
print(self.formulas)
|
||||||
for formula in self.formulas:
|
for formula in self.formulas:
|
||||||
copycat.temperature.useAdj(formula)
|
copycat.temperature.useAdj(formula)
|
||||||
answers[formulas] = copycat.run(self.initial,
|
answers[formula] = copycat.run(self.initial,
|
||||||
self.modified,
|
self.modified,
|
||||||
self.target,
|
self.target,
|
||||||
self.iterations)
|
self.iterations)
|
||||||
|
print('Done with {}'.format(formula))
|
||||||
return answers
|
return answers
|
||||||
|
|
||||||
def generate(self):
|
def generate(self):
|
||||||
|
|||||||
Reference in New Issue
Block a user