-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathdrawFigure1b.py
64 lines (58 loc) · 1.93 KB
/
drawFigure1b.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
from protocols.DirectEncoding import DirectEncoding
from protocols.LocalHashing import LocalHashing
from Components.Draw import draw
import math
# fixing d, vary epsilon
def analytical_DE(protocol, d, n):
vars = [] # return a list of variances
for step in range(10): # 10 values
epsilon = 0.5 + 0.5 * step
x = protocol(d, epsilon) #!!!
x.set_n(n)
var = x.var_analytical()
vars.append(math.log10(var)) # log10(var)
return vars
# protocol is class
# BLH, fixing g=2
def analytical_BLH(protocol, d, n):
vars = [] # return a list of variances
for step in range(10): # 10 values
epsilon = 0.5 + 0.5 * step
x = protocol(d, epsilon, g=2) # g=2
x.set_n(n)
var = x.var_analytical()
vars.append(math.log10(var)) # log10(var)
return vars
# g = math.exp(epsilon)+1, to the nearst prime
def analytical_OLH(protocol, d, n):
vars = [] # return a list of variances
primeList = [3, 3, 5, 7, 13, 23, 37, 53, 89, 149] # according to epsilon=[0.5, 1.0, ..., 5.0]
for step in range(10): # 10 values
epsilon = 0.5 + 0.5 * step
x = protocol(d, epsilon, g=primeList[step])
x.set_n(n)
var = x.var_analytical()
vars.append(math.log10(var)) # log10(var)
return vars
'''
Need run 10 times.
Temporarily run once.
'''
# Figure 1(b)
def numerical_values_of_var_b():
varslist = [] # return a list of (a list of variances)
d=2**10 # 2^10
# DE
vars = analytical_DE(DirectEncoding, d, 10000)
varslist.append(vars)
# BLH
vars = analytical_BLH(LocalHashing, d, 10000)
varslist.append(vars)
# OLH
vars = analytical_OLH(LocalHashing, d, 10000) # g = math.exp(epsilon)+1
varslist.append(vars)
# plot
epss = [0.5+0.5*item for item in range(10)] # 0.5, 1.0, ..., 5.0
draw.lines(epss, varslist, ['DE','BLH', 'OLH'], ylabel='Var(log10(y))')
if __name__ == "__main__":
numerical_values_of_var_b()