-
Notifications
You must be signed in to change notification settings - Fork 0
/
sim.py
42 lines (33 loc) · 1 KB
/
sim.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
import math
import numpy as np
if __name__ == "__main__":
#Use regularization: reg(x) = 1-2x**2 + x**4
def bitfield(i,N):
bits = [int(digit) for digit in bin(i)[2:]]
for i in range(N-len(bits)):
bits.insert(0,0)
#change to -1 to 0
return [bits[j]*2-1 for j in range(N)]
def lutN(N,sigma):
def norm(u):
front = (1+1/math.e**(2.0/sigma))**(-N)
def f(x):
l2 = sum([(x[i]-u[i])**2 for i in range(N)])
return front * math.exp(-l2/(2.0*sigma))
return f
def lut(init):
norms = [norm(bitfield(i,N)) for i in range(2**N)]
def run(x):
assert len(x) == N
ns = [norms[i](x) for i in range(2**N)]
vals = [norms[i](x)*init[i] for i in range(2**N)]
return sum(vals)
return run
return lut
#l = lut([np.random.uniform(-1,1) for i in range(8)])
n = 2
hcs = 0.82050897
for i in range(11):
x,y = np.random.uniform(-1,1,size=2)
l = lutN(2,1)([1 for j in range(2**n)])
print(i/10,l([i/10,1]))