[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]

[freehaven-cvs] Add data analysis script



Update of /home/freehaven/cvsroot/doc/e2e-traffic/src
In directory moria.mit.edu:/tmp/cvs-serv24884

Modified Files:
	PLAN.3 simmain.cpp 
Added Files:
	analyze.py 
Log Message:
Add data analysis script

--- NEW FILE: analyze.py ---
#!/usr/bin/python

import gzip
import sys
import time

if sys.version_info[:2] < (2,2):
    print "I need Python 2.2 or later.  (Python 2.3 is much faster)"
    sys.exit(1)

def gzopen(fn):
    if fn.endswith(".gz"):
        return gzip.open(fn, 'r')
    else:
        return open(fn, 'r')

def getNext(f):
    if hasattr(f, 'xreadlines'):
        return iter(f.xreadlines()).next
    else:
        return f.readline

class Params:
    def __hash__(self):
        return hash(self.p)
    def __cmp__(self,o):
        return cmp(self.p,o.p)

class SDParams(Params):
    def __init__(self,**test):
        self.p = (test['b'],test['N'],test['m'])
    def disp(self):
        b,N,m=self.p
        return "b:%4d  N:%7d  m:%4d" %(b,N,m)
    def getM(self):
        return self.p[2]
    def getPMsg(self):
        return 1.0

class UnkBGParams(Params):
    STRATEGIES = {"uniform-geometric":"UG",
                  "smallworld-geometric":"SG",
                  "smallworld-geometric-weighted":"SGW"}
    def __init__(self,**test):
        self.p = (test['b'],test['N'],test['m'],int(test['pMessage']*100),
                  self.STRATEGIES[test['aliceStrategy']])
    def disp(self):
        b,N,m,pM,strat=self.p
        return "b:%4d N:%7d m:%4d pM:%2s%% %3s"%(b,N,m,pM,strat)
    def getM(self):
        return self.p[2]
    def getPMsg(self):
        return self.p[3]/100.0


class MixTrialParams(Params):
    def __init__(self,**test):
        self.p = (test['N'],
                  test['m'],
                  test['l'],
                  int(test['pMessage']*100),
                  int(test['pDelay']*100),
                  test['bgVolume'])
    def disp(self):
        N,m,l,pA,pD,bgV=self.p
        return ("N:%5d m:%3d l:%1d pA:%2s%% pD:%2s%% bg:%5d"
                %(N,m,l,pA,pD,bgV))
    def getM(self):
        return self.p[1]
    def getPMsg(self):
        return self.p[3]/100.0

def kwdict(**kw): return kw
def pct(x):
    return int(x*100)

class ResultSet:
    SCOPE = { 'MixTrial' : MixTrialParams, 
              'UnkBGBatchTrial' : UnkBGParams,
              'SDTrial' : SDParams,
              'Result' : kwdict }
    def __init__(self):
        self.nTrials = {}
        self.nSuccess = {}
        self.nRounds = {}
        self.nRoundsAlice = {}
        self.nGuessed = {}
    
    def readFile(self,fn):
        f = gzopen(fn)
        next = getNext(f)

        scope = self.SCOPE
        
        nTrials = self.nTrials
        nSuccess = self.nSuccess
        nRounds = self.nRounds
        nRoundsAlice = self.nRoundsAlice
        nGuessed = self.nGuessed
        try:
            while 1:
                testline = next() #UnkBGBatchTrial(...)
                next() # "x/100"
                resultline = next() # Result(...)
                if resultline.startswith("bgAlice"):
                    resultline = next()
                if resultline.startswith("Got only"):
                    resultline = next()
                next() # empty
                if not (testline and resultline): break
                params = eval(testline, scope)
                result = eval(resultline, scope)

                try:
                    nTrials[params]+=1
                except KeyError:
                    nTrials[params]=1
                    nSuccess[params]=0
                    nRounds[params]=0
                    nRoundsAlice[params]=0
                    nGuessed[params]=0
                if result['succeeded']:
                    nSuccess[params] += 1
                    nRounds[params] += result['rounds']
                    nRoundsAlice[params] += result['roundsWithAlice']
                nGuessed[params] += len(result['nRoundsToGuessNth'])-1

                #i += 1
                #if not (i % 100):
                #    print i, (time.time()-start)/i
        except StopIteration:
            pass
    
    def display(self):
        params = self.nTrials.keys()
        params.sort()
        for p in params:
            nT = self.nTrials[p]
            fT = float(nT)
            pS = self.nSuccess[p]/fT
            if self.nSuccess[p]:
                avgR = self.nRounds[p]/float(self.nSuccess[p])
                avgRA = self.nRoundsAlice[p]/float(self.nSuccess[p])
            else:
                avgR = 1000000
                avgRA = (1000000*p.getPMsg())//100

            pG = self.nGuessed[p]/(fT*p.getM())
            dp = p.disp()

            print ("%s | N:%3d succ:%3s%% guess:%3s%% rnds:%7d rndsA:%7d"
                   %(dp, nT, int(pS*100), int(pG*100), avgR, avgRA))

if __name__ == '__main__':
    rs = ResultSet()
    for fn in sys.argv[1:]:
        rs.readFile(fn)
    rs.display()

Index: PLAN.3
===================================================================
RCS file: /home/freehaven/cvsroot/doc/e2e-traffic/src/PLAN.3,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -d -r1.2 -r1.3
--- PLAN.3	15 Jan 2004 19:15:24 -0000	1.2
+++ PLAN.3	17 Jan 2004 19:12:39 -0000	1.3
@@ -1,5 +1,7 @@
+Running: Totoro, Opus, Zermelo, Moria
+
+MIA, returning Sunday: Cassandra
 
-Free: opus, esox1, zermelo, novalis
 
 case3: have
   HAVE
@@ -19,6 +21,7 @@
 C: 13 Jan, 23:33
 D: 13 Jan, 23:55  -- 3r and 4r begun!
 E: 15 Jan, 13:39
+F: 17 Jan: 12:29
 
 ===case 3.2: timed dyn-pool mix. (esox)
 
@@ -62,26 +65,28 @@
 
   HAVE
     AF   PD   BGVol
-    .1:  .1   (320,3200')  {esox}    ----continue  3.2
+    .1:  .1   (320,3200')  {esox}
     .3:  .1   (320,3200)   {esox}
     .6:  .1   320,3200,32000  {cass}
          .3   320,3200,32000  {cass}
          .6   320,3200         {cass}
     .9:  .1   (320,3200,32000) {opus}
          .3   (320,3200,32000) {opus}
-         .6   (320')           {opus}  ---continue 3.3
+         .6   (320')           {opus}
   NEED:
     AF
     *     *         (25)          16   (case 3r.1)  <cassandra>  E:3.82  *4
-    *     *         (125)         16   (case 3r.2)  <dhcp-14-49> E:2.63  *6
-XXX .1:  .3,.6,.9   (320,3200)     6   (case 3r.3)  <moria>      E:1.00  *6 (!)
-    .3:  .3,.6,.9   (320,3200)     6   (case 3r.4)  <sekrit>     E:2.84  *2
-    .6:  .9         (320,3200)     2   (case 3r.5)  <ariddoch>   E:1.94  *2
+                                                                 F:????
+  .1,p.3  *         (125)         16   (case 3r.2)  <dhcp-14-49> 
+                                                                 
+    .1:  .3,.6,.9   (320,3200)     6   (case 3r.3)  <moria>      
+    .3:  .3,.6,.9   (320,3200)     6   (case 3r.4)  <sekrit>     
+    .6:  .9         (320,3200)     2   (case 3r.5)  <ariddoch>   
     .9:  .9         (320,3200)     2   (case 3r.5)
 
   ADDED (E):
-   .6,.9:    *      (25)            8   (case 3r.1.1) <opus>
-   .3,.6,.9: *      (125)          12   (case 3r.2.1) <zermelo>
+   .6,.9:    *      (25)            8   (case 3r.1.1) <opus>     F:7.09
+   .3,.6,.9: *      (125)          12   (case 3r.2.1) <zermelo>  F:7.47
 
 ===case 4: mixnet
     Fix N=65536, m=32, strategy=SG
@@ -90,33 +95,44 @@
 3   Vary Alice freq: .1, .6, .9
     bgvol=320
 
-
-
 ====case4r: mixnet
-    N=65525, m=25, bgvol=125, strategy=SG
+    N=65525, m=32, bgvol=125, strategy=SG
     path length: 2,4,8?
     Alice freg: .1, .6. .9
     pDelay: .1, .6
 
     PL   AF         PD
     2:   .1,.6,.9   .1,.6   6  (case4r.1)     <totoro>              {E:2.77} *2
-    4:   .1,.6,.9   .1,.6   6  (case4r.2)     <cannabis>            {E:1.73} *3
-    8:   .1,.6,.9   .1      3  (case4r.3.1)   <esox2?>              {E: .89} *3
-    8:   .1,.6,.9   .6      3  (case4r.3.2)   <zermello, when free> {done,fail}
+                                                                    {F:4.21}
+    4:   .1,.6,.9   .1,.6   6  (case4r.2)     <cannabis>            
+    8:   .1,.6,.9   .1      3  (case4r.3.1)   <esox2?>              <ARGH>
+    8:   .1,.6,.9   .6      3  (case4r.3.2)   <zermello>
 
   ADDED (E):
     8:   .9         .1      1  (case4r.3.1.1) <esox1 covers esox2>
     4:   .9         .1,.6   2  (case4r.2.1)   <novalis covers cannabis>
 
+  ADDED (F):
+   .8,   .1,.6      .1      2  (case4r.3.1.2) <moria>               F:0
+
 ===case 5: impact of dummies
 
    Fix N,m,strategy as above.
    Fix mix alg pDelay, path length, bg vol based on 4.
      Vary dummy approach, volume, pAbsent
 
+   N=65536, m=32, bgvol=125, strategy=SG
+   
+   path length:
+   pDelay:
+   
+
+
 ===case 6: impact of partial
 
    Fix all as in 5.  No dummies.
      Vary pObserve.
 
 
+
+===case 7: pseudonymity
\ No newline at end of file

Index: simmain.cpp
===================================================================
RCS file: /home/freehaven/cvsroot/doc/e2e-traffic/src/simmain.cpp,v
retrieving revision 1.19
retrieving revision 1.20
diff -u -d -r1.19 -r1.20
--- simmain.cpp	15 Jan 2004 19:15:24 -0000	1.19
+++ simmain.cpp	17 Jan 2004 19:12:39 -0000	1.20
@@ -572,7 +572,7 @@
   { "3r.1", trial3r_1 },
   { "3r.1.1", trial3r_1_1 },
   { "3r.2", trial3r_2 },
-  { "3r.2.2", trial3r_2_1 },
+  { "3r.2.1", trial3r_2_1 },
   { "3r.3", trial3r_3 },
   { "3r.4", trial3r_4 },
   { "3r.5", trial3r_5 },
@@ -580,7 +580,7 @@
   { "4r.2",   trial4r_2 },
   { "4r.2.1",   trial4r_2_1 },
   { "4r.3.1", trial4r_3_1 },
-  { "4r.3.1_1", trial4r_3_1_1 },
+  { "4r.3.1.1", trial4r_3_1_1 },
   { "4r.3.2", trial4r_3_2 },
 
 

***********************************************************************
To unsubscribe, send an e-mail to majordomo@seul.org with
unsubscribe freehaven-cvs       in the body. http://freehaven.net/