import json,sys,pickle,numpy as np,itertools sys.path.insert(0,'.') from policy2 import legs3,outcome,G,NODES,merge # cache per-query leg id-lists, floored and unfloored cache={} for q in G['queries']: Lf,Sf,Af=legs3(q['query']) Lu,Su,Au=legs3(q['query'],unfloor=True) cache[q['id']]=dict(L=Lf,Sf=Sf,A=Af,Su=Su,Au=Au) pickle.dump(cache,open('ceil.pkl','wb')) def mrg(pattern,L,S,A,lim=10): out=[];p={'L':0,'S':0,'A':0};src={'L':L,'S':S,'A':A} i=0 while len(out)=lim: return out if not prog: break return out def ev(pattern,unfl): res={} for q in G['queries']: c=cache[q['id']] S=c['Su'] if unfl else c['Sf'] ids=[NODES[i]['id'] for i in mrg(pattern,c['L'],S,c['A'],10)] res[q['id']]=outcome(q,ids) return res base=ev('LSA',False) print("baseline",sum(base.values())) best=[] pats=['LSA','LAS','SLA','ALS','SAL','ASL','LSSA','LSASA','LSAA','LSSAA','LSAS','SSLA','LLSA','SALSA','LSAAS'] for unfl in (False,True): for p in pats: r=ev(p,unfl) g=sorted(k for k in base if r[k] and not base[k]);l=sorted(k for k in base if base[k] and not r[k]) best.append((len(g)-len(l),p,unfl,g,l)) best.sort(reverse=True) for n,p,u,g,l in best[:10]: print("net=%+d pat=%-6s unfloor=%s gains=%s losses=%s"%(n,p,u,g,l))