In [1]:
import sklearn
import json
import operator
import matplotlib.pyplot as plt
import prettyplotlib as ppl
%matplotlib inline


/usr/local/lib/python3.4/dist-packages/matplotlib/backends/backend_gtk3agg.py:18: UserWarning: The Gtk3Agg backend is known to not work on Python 3.x with pycairo. Try installing cairocffi.
  "The Gtk3Agg backend is known to not work on Python 3.x with pycairo. "

In [2]:
agent1 = [sklearn.externals.joblib.load('agent1_consolidate')]
agent2 = [sklearn.externals.joblib.load('agent2_consolidate')]

In [3]:
def loader(dictionary):
    def load_keys(k):
        unjsoned = json.loads(k)
        loaded = tuple( ((tuple(unjsoned[0])), unjsoned[1] ))
        return loaded
    return {load_keys(k):v for k,v in dictionary.items()}
loaded1 = [loader(i) for i in agent1]
loaded2 = [loader(i) for i in agent2]
def get_winners(dictionary):
    states = set([k[0] for k,v in dictionary.items()])
    winners = {}
    for s in states:
        matches = [(v, k[1]) for k,v in dictionary.items() if k[0]==s]
        winners[s] = sorted(matches, key=operator.itemgetter(0))[::-1]
    return {k: v[0][1] for k,v in winners.items()}

In [4]:
[get_winners(j) for j in loaded1]


Out[4]:
[{(0, 'pending', 'pending'): 'go_to_sleep',
  (0, 'pending', 'running'): 'go_to_sleep',
  (0, 'pending', 'sleeping'): 'go_to_sleep',
  (0, 'running', 'pending'): 'prepare_sleep',
  (0, 'running', 'running'): 'prepare_sleep',
  (0, 'running', 'sleeping'): 'prepare_sleep',
  (0, 'sleeping', 'pending'): 'noop',
  (0, 'sleeping', 'running'): 'noop',
  (0, 'sleeping', 'sleeping'): 'noop',
  (1, 'pending', 'pending'): 'go_to_sleep',
  (1, 'pending', 'running'): 'go_to_sleep',
  (1, 'pending', 'sleeping'): 'go_to_sleep',
  (1, 'running', 'pending'): 'prepare_sleep',
  (1, 'running', 'running'): 'prepare_sleep',
  (1, 'running', 'sleeping'): 'prepare_sleep',
  (1, 'sleeping', 'pending'): 'wakeup',
  (1, 'sleeping', 'running'): 'noop',
  (1, 'sleeping', 'sleeping'): 'wakeup',
  (2, 'pending', 'pending'): 'go_to_sleep',
  (2, 'pending', 'running'): 'go_to_sleep',
  (2, 'pending', 'sleeping'): 'go_to_sleep',
  (2, 'running', 'pending'): 'noop',
  (2, 'running', 'running'): 'noop',
  (2, 'running', 'sleeping'): 'noop',
  (2, 'sleeping', 'pending'): 'wakeup',
  (2, 'sleeping', 'running'): 'noop',
  (2, 'sleeping', 'sleeping'): 'wakeup',
  (3, 'pending', 'pending'): 'go_to_sleep',
  (3, 'pending', 'running'): 'go_to_sleep',
  (3, 'pending', 'sleeping'): 'go_to_sleep',
  (3, 'running', 'pending'): 'noop',
  (3, 'running', 'running'): 'noop',
  (3, 'running', 'sleeping'): 'noop',
  (3, 'sleeping', 'pending'): 'wakeup',
  (3, 'sleeping', 'running'): 'wakeup',
  (3, 'sleeping', 'sleeping'): 'wakeup',
  (4, 'pending', 'pending'): 'go_to_sleep',
  (4, 'pending', 'running'): 'go_to_sleep',
  (4, 'pending', 'sleeping'): 'go_to_sleep',
  (4, 'running', 'pending'): 'noop',
  (4, 'running', 'running'): 'noop',
  (4, 'running', 'sleeping'): 'noop',
  (4, 'sleeping', 'pending'): 'wakeup',
  (4, 'sleeping', 'running'): 'wakeup',
  (4, 'sleeping', 'sleeping'): 'wakeup',
  (5, 'pending', 'pending'): 'go_to_sleep',
  (5, 'pending', 'running'): 'go_to_sleep',
  (5, 'pending', 'sleeping'): 'go_to_sleep',
  (5, 'running', 'pending'): 'noop',
  (5, 'running', 'running'): 'noop',
  (5, 'running', 'sleeping'): 'noop',
  (5, 'sleeping', 'pending'): 'noop',
  (5, 'sleeping', 'running'): 'noop',
  (5, 'sleeping', 'sleeping'): 'wakeup',
  (6, 'pending', 'pending'): 'go_to_sleep',
  (6, 'pending', 'sleeping'): 'go_to_sleep',
  (6, 'running', 'pending'): 'noop',
  (6, 'running', 'running'): 'noop',
  (6, 'running', 'sleeping'): 'noop',
  (6, 'sleeping', 'running'): 'wakeup',
  (6, 'sleeping', 'sleeping'): 'noop',
  (7, 'pending', 'running'): 'go_to_sleep',
  (7, 'pending', 'sleeping'): 'go_to_sleep',
  (7, 'running', 'pending'): 'noop',
  (7, 'running', 'running'): 'noop',
  (7, 'running', 'sleeping'): 'noop',
  (7, 'sleeping', 'pending'): 'wakeup',
  (7, 'sleeping', 'running'): 'noop',
  (7, 'sleeping', 'sleeping'): 'noop',
  (8, 'pending', 'sleeping'): 'go_to_sleep',
  (8, 'running', 'pending'): 'noop',
  (8, 'running', 'running'): 'noop',
  (8, 'running', 'sleeping'): 'noop',
  (8, 'sleeping', 'running'): 'noop',
  (8, 'sleeping', 'sleeping'): 'wakeup',
  (9, 'pending', 'pending'): 'go_to_sleep',
  (9, 'pending', 'running'): 'go_to_sleep',
  (9, 'pending', 'sleeping'): 'go_to_sleep',
  (9, 'running', 'pending'): 'noop',
  (9, 'running', 'running'): 'noop',
  (9, 'running', 'sleeping'): 'noop',
  (9, 'sleeping', 'pending'): 'wakeup',
  (9, 'sleeping', 'running'): 'wakeup',
  (9, 'sleeping', 'sleeping'): 'noop',
  (10, 'pending', 'pending'): 'go_to_sleep',
  (10, 'pending', 'running'): 'go_to_sleep',
  (10, 'pending', 'sleeping'): 'go_to_sleep',
  (10, 'running', 'running'): 'noop',
  (10, 'running', 'sleeping'): 'prepare_sleep',
  (10, 'sleeping', 'pending'): 'wakeup',
  (10, 'sleeping', 'running'): 'noop',
  (10, 'sleeping', 'sleeping'): 'noop',
  (11, 'pending', 'pending'): 'go_to_sleep',
  (11, 'pending', 'running'): 'go_to_sleep',
  (11, 'pending', 'sleeping'): 'go_to_sleep',
  (11, 'running', 'pending'): 'noop',
  (11, 'running', 'running'): 'prepare_sleep',
  (11, 'running', 'sleeping'): 'noop',
  (11, 'sleeping', 'running'): 'wakeup',
  (12, 'pending', 'running'): 'go_to_sleep',
  (12, 'pending', 'sleeping'): 'go_to_sleep',
  (12, 'running', 'pending'): 'prepare_sleep',
  (12, 'running', 'running'): 'noop',
  (12, 'running', 'sleeping'): 'noop',
  (12, 'sleeping', 'pending'): 'noop',
  (12, 'sleeping', 'running'): 'wakeup',
  (12, 'sleeping', 'sleeping'): 'noop',
  (13, 'pending', 'pending'): 'go_to_sleep',
  (13, 'pending', 'sleeping'): 'go_to_sleep',
  (13, 'running', 'pending'): 'noop',
  (13, 'running', 'running'): 'noop',
  (13, 'running', 'sleeping'): 'noop',
  (13, 'sleeping', 'sleeping'): 'wakeup',
  (14, 'pending', 'pending'): 'go_to_sleep',
  (14, 'pending', 'sleeping'): 'go_to_sleep',
  (14, 'running', 'pending'): 'noop',
  (14, 'running', 'running'): 'noop',
  (14, 'running', 'sleeping'): 'noop',
  (14, 'sleeping', 'pending'): 'wakeup',
  (14, 'sleeping', 'running'): 'wakeup',
  (14, 'sleeping', 'sleeping'): 'wakeup',
  (15, 'running', 'pending'): 'noop',
  (15, 'running', 'running'): 'noop',
  (16, 'running', 'running'): 'noop'}]

In [5]:
[get_winners(j) for j in loaded2]


Out[5]:
[{(0, 'pending', 'pending'): 'go_to_sleep',
  (0, 'pending', 'running'): 'go_to_sleep',
  (0, 'pending', 'sleeping'): 'go_to_sleep',
  (0, 'running', 'pending'): 'prepare_sleep',
  (0, 'running', 'running'): 'prepare_sleep',
  (0, 'running', 'sleeping'): 'prepare_sleep',
  (0, 'sleeping', 'pending'): 'noop',
  (0, 'sleeping', 'running'): 'noop',
  (0, 'sleeping', 'sleeping'): 'noop',
  (1, 'pending', 'pending'): 'go_to_sleep',
  (1, 'pending', 'running'): 'go_to_sleep',
  (1, 'pending', 'sleeping'): 'go_to_sleep',
  (1, 'running', 'pending'): 'noop',
  (1, 'running', 'running'): 'prepare_sleep',
  (1, 'running', 'sleeping'): 'prepare_sleep',
  (1, 'sleeping', 'pending'): 'wakeup',
  (1, 'sleeping', 'running'): 'noop',
  (1, 'sleeping', 'sleeping'): 'wakeup',
  (2, 'pending', 'pending'): 'go_to_sleep',
  (2, 'pending', 'running'): 'go_to_sleep',
  (2, 'pending', 'sleeping'): 'go_to_sleep',
  (2, 'running', 'pending'): 'noop',
  (2, 'running', 'running'): 'prepare_sleep',
  (2, 'running', 'sleeping'): 'prepare_sleep',
  (2, 'sleeping', 'pending'): 'wakeup',
  (2, 'sleeping', 'running'): 'wakeup',
  (2, 'sleeping', 'sleeping'): 'wakeup',
  (3, 'pending', 'pending'): 'go_to_sleep',
  (3, 'pending', 'running'): 'go_to_sleep',
  (3, 'pending', 'sleeping'): 'go_to_sleep',
  (3, 'running', 'pending'): 'noop',
  (3, 'running', 'running'): 'noop',
  (3, 'running', 'sleeping'): 'noop',
  (3, 'sleeping', 'pending'): 'wakeup',
  (3, 'sleeping', 'running'): 'wakeup',
  (3, 'sleeping', 'sleeping'): 'wakeup',
  (4, 'pending', 'pending'): 'go_to_sleep',
  (4, 'pending', 'running'): 'go_to_sleep',
  (4, 'pending', 'sleeping'): 'go_to_sleep',
  (4, 'running', 'pending'): 'noop',
  (4, 'running', 'running'): 'noop',
  (4, 'running', 'sleeping'): 'noop',
  (4, 'sleeping', 'pending'): 'wakeup',
  (4, 'sleeping', 'running'): 'wakeup',
  (4, 'sleeping', 'sleeping'): 'wakeup',
  (5, 'pending', 'pending'): 'go_to_sleep',
  (5, 'pending', 'running'): 'go_to_sleep',
  (5, 'pending', 'sleeping'): 'go_to_sleep',
  (5, 'running', 'pending'): 'noop',
  (5, 'running', 'running'): 'noop',
  (5, 'running', 'sleeping'): 'noop',
  (5, 'sleeping', 'running'): 'noop',
  (5, 'sleeping', 'sleeping'): 'wakeup',
  (6, 'pending', 'running'): 'go_to_sleep',
  (6, 'running', 'pending'): 'noop',
  (6, 'running', 'running'): 'noop',
  (6, 'running', 'sleeping'): 'noop',
  (6, 'sleeping', 'pending'): 'wakeup',
  (6, 'sleeping', 'running'): 'wakeup',
  (6, 'sleeping', 'sleeping'): 'noop',
  (7, 'pending', 'pending'): 'go_to_sleep',
  (7, 'pending', 'running'): 'go_to_sleep',
  (7, 'pending', 'sleeping'): 'go_to_sleep',
  (7, 'running', 'running'): 'noop',
  (7, 'running', 'sleeping'): 'noop',
  (7, 'sleeping', 'pending'): 'wakeup',
  (7, 'sleeping', 'running'): 'noop',
  (7, 'sleeping', 'sleeping'): 'noop',
  (8, 'pending', 'pending'): 'go_to_sleep',
  (8, 'pending', 'running'): 'go_to_sleep',
  (8, 'pending', 'sleeping'): 'go_to_sleep',
  (8, 'running', 'running'): 'prepare_sleep',
  (8, 'running', 'sleeping'): 'noop',
  (8, 'sleeping', 'pending'): 'wakeup',
  (8, 'sleeping', 'running'): 'wakeup',
  (8, 'sleeping', 'sleeping'): 'wakeup',
  (9, 'pending', 'running'): 'go_to_sleep',
  (9, 'pending', 'sleeping'): 'go_to_sleep',
  (9, 'running', 'pending'): 'prepare_sleep',
  (9, 'running', 'running'): 'prepare_sleep',
  (9, 'running', 'sleeping'): 'noop',
  (9, 'sleeping', 'pending'): 'wakeup',
  (9, 'sleeping', 'running'): 'wakeup',
  (9, 'sleeping', 'sleeping'): 'wakeup',
  (10, 'pending', 'pending'): 'go_to_sleep',
  (10, 'pending', 'running'): 'go_to_sleep',
  (10, 'pending', 'sleeping'): 'go_to_sleep',
  (10, 'running', 'pending'): 'noop',
  (10, 'running', 'running'): 'noop',
  (10, 'running', 'sleeping'): 'prepare_sleep',
  (10, 'sleeping', 'running'): 'wakeup',
  (10, 'sleeping', 'sleeping'): 'noop',
  (11, 'pending', 'running'): 'go_to_sleep',
  (11, 'pending', 'sleeping'): 'go_to_sleep',
  (11, 'running', 'pending'): 'noop',
  (11, 'running', 'running'): 'noop',
  (11, 'running', 'sleeping'): 'prepare_sleep',
  (11, 'sleeping', 'running'): 'wakeup',
  (12, 'pending', 'sleeping'): 'go_to_sleep',
  (12, 'running', 'pending'): 'noop',
  (12, 'running', 'running'): 'noop',
  (12, 'running', 'sleeping'): 'noop',
  (12, 'sleeping', 'pending'): 'wakeup',
  (12, 'sleeping', 'running'): 'noop',
  (12, 'sleeping', 'sleeping'): 'wakeup',
  (13, 'pending', 'pending'): 'go_to_sleep',
  (13, 'running', 'pending'): 'prepare_sleep',
  (13, 'running', 'running'): 'noop',
  (13, 'running', 'sleeping'): 'noop',
  (13, 'sleeping', 'pending'): 'wakeup',
  (14, 'pending', 'running'): 'go_to_sleep',
  (14, 'running', 'pending'): 'noop',
  (14, 'running', 'running'): 'noop',
  (14, 'running', 'sleeping'): 'noop',
  (14, 'sleeping', 'pending'): 'wakeup',
  (14, 'sleeping', 'running'): 'wakeup',
  (14, 'sleeping', 'sleeping'): 'noop',
  (15, 'pending', 'running'): 'go_to_sleep',
  (15, 'pending', 'sleeping'): 'go_to_sleep',
  (15, 'running', 'running'): 'prepare_sleep',
  (15, 'running', 'sleeping'): 'noop',
  (15, 'sleeping', 'running'): 'wakeup',
  (16, 'running', 'pending'): 'prepare_sleep',
  (16, 'running', 'running'): 'noop',
  (16, 'running', 'sleeping'): 'noop',
  (17, 'running', 'pending'): 'noop'}]

In [6]:
hist1 = sklearn.externals.joblib.load('agent1_hist')
hist2 = sklearn.externals.joblib.load('agent2_hist')

In [7]:
def get_score(hist):
    loaded = {k:len(json.loads(v)) for k,v in loader(hist).items()}
    not_running = sum([v for k,v in loaded.items() if k[0][1] == 'sleeping' and k[0][2]=='sleeping'])
    total = sum([v for k,v in loaded.items()])
    zero = sum([v for k,v in loaded.items() if k[0][0] == 0])
    return not_running,zero, total, not_running/total,zero/total
print(get_score(hist1))
print(get_score(hist2))


(438, 1257, 5708, 0.0767344078486335, 0.22021723896285914)
(385, 1109, 5712, 0.06740196078431372, 0.19415266106442577)

In [10]:
record = sklearn.externals.joblib.load('pend_writer')
one = [(i[0], i[1]['battery']) for i in record if i[1]['_id']==0]
two = [(i[0], i[1]['battery']) for i in record if i[1]['_id']==1]
print(len(one))


3938

In [17]:
fig,ax = plt.subplots(1)
ppl.plot(ax, [i[0] for i in one[3600:3800]],[i[1] for i in one[3600:3800]])
ppl.plot(ax, [i[0] for i in two[3700:3800]],[i[1] for i in two[3700:3800]])


/usr/local/lib/python3.4/dist-packages/matplotlib/__init__.py:872: UserWarning: axes.color_cycle is deprecated and replaced with axes.prop_cycle; please use the latter.
  warnings.warn(self.msg_depr % (key, alt_key))
Out[17]:
[<matplotlib.lines.Line2D at 0x7f176c21e518>]

In [ ]:


In [ ]: