-
Notifications
You must be signed in to change notification settings - Fork 0
/
algo_stat.py
76 lines (61 loc) · 1.8 KB
/
algo_stat.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
import glob
import numpy
def makespan(f):
try:
f = open(f, 'r')
last_line = ''
for l in f:
last_line = l
last_token = last_line.split()
last_token = last_token[len(last_token) - 1]
return float(last_token)
except:
return None
def makespans(algo, variant):
return sorted(
filter(lambda x: x != None, [
makespan(f)
for f
in glob.glob('./out/' + variant + '/' + algo + '.*') ]))
def box_and_whisker_data(l):
if len(l) % 2 == 0:
lower_half = l[:len(l) / 2]
upper_half = l[len(l) / 2:]
else:
lower_half = l[:len(l) / 2]
upper_half = l[len(l) / 2 + 1:]
q1 = numpy.median(lower_half)
q2 = numpy.median(l)
q3 = numpy.median(upper_half)
return (min(l), q1, q2, q3, max(l))
def confidence_interval(l, confidence=0.95):
#
# http://stackoverflow.com/questions/15033511/compute-a-confidence-interval-from-sample-data
#
if len(l) == 0:
return 0, 0, 0
import numpy as np
import scipy as sp
import scipy.stats
a = 1.0 * np.array(l)
n = len(a)
m, se = np.mean(a), scipy.stats.sem(a)
h = se * sp.stats.t._ppf((1 + confidence) / 2., n - 1)
return m, h
if __name__ == '__main__':
import argparse
variants = []
for x in ['c', 'i', 's']:
for y in ['l', 'h']:
for z in ['l', 'h']:
var = x + '-' + y + '-' + z
variants.append(var)
parser = argparse.ArgumentParser('Data Collector')
parser.add_argument('-a', choices=[ 'astar', 'ga', 'gsa', 'mct', 'minmin', 'olb', 'tabu' ], dest='algo', help='The algorithm to run', required=True)
parser.add_argument('-v', choices=variants, dest='variant', help='The variant of the data file to run', default='i-l-l')
args = parser.parse_args()
# print ','.join(map(
# lambda x: str(x),
# box_and_whisker_data(makespans)
# ))
print ','.join(map(lambda x: str(x), confidence_interval(makespans(args.algo, args.variant))))