Files
copycat/multi-run.py
2017-10-04 15:37:22 -06:00

56 lines
2.1 KiB
Python
Executable File

#!/usr/bin/env python3
import argparse, logging
from copycat import Copycat, Reporter, plot_answers, save_answers
from collections import defaultdict
class SimpleReporter(Reporter):
"""Reports results from a single run."""
def report_answer(self, answer):
"""Self-explanatory code."""
print('Answered %s (time %d, final temperature %.1f)' % (
answer['answer'], answer['time'], answer['temp'],
))
def main():
parser = argparse.ArgumentParser()
parser.add_argument('--iterations', type=int, default=1, help='Run the given case this many times.')
options = parser.parse_args()
copycat = Copycat(reporter=SimpleReporter())
with open('input/reduced_problems.csv', 'r') as infile:
for line in infile:
line = line.replace('\n', '')
a, b, c = line.split(',')
answerList = copycat.run(a, b, c, options.iterations, True)
results = dict()
for formula, answers in answerList:
answers = sorted(answers.items(), key=lambda kv : kv[1]['count'])
keys = [k for k, v in answers]
counts = [v['count'] for k, v in answers]
results[formula] = (keys, counts)
originalCounts = defaultdict(lambda : 0)
originalCounts.update(dict(zip(*results['original'])))
for formula, (keys, counts) in results.items():
if formula != 'original':
chi2 = 0
for answer, count in zip(keys, counts):
originalCount = originalCounts[answer]
if originalCount != 0:
chi2 += (count + originalCount) ** 2 / originalCount
print((formula, chi2))
#for answer, d in sorted(iter(answers.items()), key=lambda kv: kv[1]['avgtemp']):
#print('%s: %d (avg time %.1f, avg temp %.1f)' % (answer, d['count'], d['avgtime'], d['avgtemp']))
#filename = 'output/{}-{}-{}.csv'.format(a, b, c)
#save_answers(answers, filename)
if __name__ == '__main__':
main()