In [1]:
# %matplotlib notebook
from pymisca.util import *
from pymisca.vis_util import *
import IPython.display as ipd
import KBs
import random
import workers
DIR = 'data_pdist'
tst_dct = [{'family':'2dntca','rulestr':x[1]} for x in KBs.tst_data]
tst_out = mp_map(workers.worker0323,tst_dct,n_cpu=12)
print 'finished'
In [121]:
data = np.load('%s/reference.npy'%DIR).tolist()
dant = filter(lambda x:x.get('grade')=='anti',data)
In [8]:
from KBs import *
def sample(self,ini=None):
if ini is None:
ini=self.rdf().astype(int)
avc = ini
hist = np.zeros((self.hmax,)+avc.shape,dtype=np.int)
for i in range(self.hmax):
hist[i]=avc
avc=(self.adv(avc))
return hist
def hill(x):
return 1-abs(2*x-1)
def sflatten(arr):
return np.reshape(arr,(len(arr),-1))
def sexpand(arr,d=2):
S = arr.shape
root = int(round(S[1]**(1./d)) )
out = np.reshape(arr,(S[0],)+(root,)*d)
return out
In [131]:
np.ravel_multi_index(loc,env.dimsiz)
Out[131]:
In [8]:
# d = np.meshgrid()
# L = env.siz[-1]
# plt.imshow(X+Y)
env = KBs.guess(dct=tst_dct[8])
out = sample(env)
In [3]:
def imlstshow(imlst,mfcol=None,figsize=[12,6],vmin=0,vmax=1,**kwargs):
if mfcol is None:
mfcol = [int(len(imlst)**0.5)]*2
fig,axs=plt.subplots(*mfcol,figsize=[12,6])
for ax,i in zip(axs.ravel(),range(len(imlst))):
im = imlst[i]
# if im.sum()==0:
# continue
plt.sca(ax)
plt.pcolormesh(sflatten(im),vmin=vmin,vmax=vmax,**kwargs)
In [49]:
def mutate(avc,idx,orig=1):
# if 1:
# idx = np.array(idx)
nsp = len(idx)
# out = KBs.sample(env)
# cmap = plt.get_cmap('rainbow')
loc = np.vstack([
# [0]*nsp,
range(0,nsp),
zip(*idx)]
)
idx = np.ravel_multi_index(loc, (nsp,)+avc.shape[1:] )
real = avc
dev = np.repeat(real.copy(),nsp,axis=0)
dev.flat[idx]=1-dev.flat[idx]
if orig:
dev = np.vstack([real,dev])
return dev
def main(t=20,**kwargs):
env = KBs.guess(**kwargs)
env.change_size((20, 100, 30**2))
ini = sample(env)[-1][0:1]
L = ini.shape[-1]
# idx = idx + np.array([[L//2,L//2]])
idx = np.meshgrid(range(L),range(L))
idx = zip(*[x.ravel() for x in idx])
mut = mutate(ini,idx)
out = sample(env,ini=mut)
out = out[:50]
SUM = out[:,1:] + out[:,0:1]
flaw = SUM==1
tSUM = (flaw).mean(axis=0)
# imlstshow(tSUM[:5])
# plt.show()
fc = flaw[t:t+1]
fN = fc.sum(axis=(2,3))
c = fN/(L**2.)
X = np.arange(0,L)
X,Y = np.meshgrid(X,X)
Xs = fc*X[None,None]
Ys = fc*Y[None,None]
Xm=abs(Xs.sum(axis=(2,3)).astype(float)/fN- X.T.ravel()[None])
Ym=abs(Ys.sum(axis=(2,3)).astype(float)/fN- Y.T.ravel()[None])
dN = np.minimum(Xm,L-Xm) + np.minimum(Ym,L-Xm)
BINS=np.linspace(0,0.15,20)
fig,axs=plt.subplots(1,3,figsize=[12,4])
plt.sca(axs[0])
# plt.scatter(fN.ravel()/L**2.,dN.ravel()/L)
plt.hist2d(fN.ravel()/(L**2.),dN.ravel()/L,
bins=[np.linspace(0,0.5,30), np.linspace(0,1.5,30)]
# bins=[np.linspace(0,0.5,30), np.linspace(0,1,30)]
)
# plt.hist(c.ravel(),bins=BINS,normed=1)
# plt.ylim(0,50)
# plt.xlim([0,])
# plt.imshow((sexpand(dN))[0].T*(ini[0]-0.5))
plt.sca(axs[1])
# plt.imshow((sexpand(c))[0].T*(ini[0]-0.5),vmin=-.125,vmax=(t*0.5/L)**2)
# plt.imshow((sexpand(c))[0].T*(ini[0]-0.5),vmin=0,vmax=(float(t)/L)**2)
plt.imshow((sexpand(c))[0].T,vmin=0,vmax=0.25)
# plt.imshow((sexpand(c))[0].T*(ini[0]-0.5),vmin=0)
plt.colorbar()
plt.sca(axs[2])
plt.imshow(ini[0])
# plt.show()
In [47]:
main(dct=tst_dct[0])
plt.show()
In [57]:
# map(lambda x:main(dct=x),tst_dct)
for i in range(5):
main(dct=tst_dct[8])
plt.suptitle(i)
plt.show()
In [58]:
# map(lambda x:main(dct=x),tst_dct)
for i,x in enumerate(tst_dct):
main(dct=x)
plt.suptitle(i)
plt.show()
In [35]:
print kb.rulestr2alias(tst_dct[5]['rulestr'])
In [12]:
main(dct=tdct)
plt.show()
In [1574]:
def medc(t):
X = np.arange(0,L)
X,Y = np.meshgrid(X,X)
fc= flaw[t:t+1]
Xs = fc*X[None,None]
Ys = fc*Y[None,None]
fN = fc.sum(axis=(2,3))
Xm=abs(Xs.sum(axis=(2,3)).astype(float)/fN- X.T.ravel()[None])
Ym=abs(Ys.sum(axis=(2,3)).astype(float)/fN- Y.T.ravel()[None])
dN = np.minimum(Xm,L-Xm) + np.minimum(Ym,L-Xm)
# d = dist*fc
# dN = d.sum(axis=(2,3))
c = (dN.astype(float)/(fN))
return c
c = medc(20)-medc(10)
# c = (dN.astype(float))
# c = (dN.astype(float)/np.log(fN))
In [1217]:
sl
Out[1217]:
In [1581]:
%%time
import numpy as np
from numpy.lib import stride_tricks
x = np.arange(900).reshape([30, 30])
xx = stride_tricks.as_strided(x, shape=(900, 3, 3, 3), strides=x.strides + x.strides)
In [11]:
r = kb.alias2rulestr('B012ak3cijnq4aceijy5ejky6ce7c8/S01c2c3aejkn4aeiwy5y')
print r
tdct = {'family':'2dntca',
'rulestr':r}
print gollyrle(ini[0])
In [1644]:
env = KBs.guess(dct=tst_dct[15])
# env = KBs.guess(dct=tst_dct[20])
# env = KBs.guess(dct=tst_dct[0])
env = KBs.guess(dct=tst_dct[2])
# env = KBs.guess(dct=tst_dct[8])
# env = KBs.guess(dct=tst_dct[8])
# env = KBs.guess(dct=tst_dct[3])
# env = KBs.guess(dct=tdct)
env.change_size((20, 100, 30**2))
print env.alias
out = sample(env)
# plt.imshow(sflatten(ini[0]))
MEAN = np.mean(out[-6:],axis=0)
imlstshow(MEAN[:10])
plt.show()
MEAN = np.mean(out[-6:],axis=0)
i=1
ini = MEAN[i:i+1]
plt.pcolormesh(ini[0])
plt.show()
ini = out[-7][i:i+1]
plt.pcolormesh(ini[0])
plt.show()
print gollyrle(ini[0])
In [16]:
print kb.rulestr2alias(tst_dct[23]['rulestr'])
In [1483]:
# arr = SUM[:40,770]
plt.figure(figsize=[14,3])
arr = SUM[:40,500]
plt.pcolormesh(sflatten(arr))
# plt.imshow(arr[1]==1)
# plt.pcolormesh(arr[7]==1)
# plt.imshow(sflatten(SUM[:20,500]))
plt.show()
def sexpand(arr,d=2):
S = arr.shape
root = int(round(S[1]**(1./d)) )
out = np.reshape(arr,(S[0],)+(root,)*d)
return out
In [1121]:
x=np.arange(12).reshape((3,4))
print x
print np.roll(x,(1,1),axis=(0,1))
penalise randomness and prefer concentrated distribution then calculate E(d) to indicate the drifting
In [1092]:
t = 10
# arr = out[:t,1:]
# arr = np.moveaxis(arr,1,0)
arr = out[t,1:]
arr = sflatten(arr)
d = spdist.pdist(arr,'hamming')
D = spdist.squareform(d)
np.fill_diagonal(D,-0.05)
De = sexpand(D)
i0,j0 = np.random.randint(1,L-1,size=(2,))
i0 = 25
j0 = 20
shift = [[1,-1],
[1,0],
[1,1],
[0,-1],
[0,0],
[0,1],
[-1,-1],
[-1,0],
[-1,1],
]
lst = []
for si,sj in shift:
i = i0+si
j = j0+sj
idx = np.ravel_multi_index([[i],[j]],out.shape[2:])[0]
print idx
lst.append(De[idx].T)
# # plt.pcolormesh(De[idx].T,vmin=0,vmax=0.25)
# # plt.imshow(out[0][0].T)
# plt.imshow(De[idx],vmin=0,vmax=0.5)
# plt.xlabel('i')
# plt.ylabel('j')
# plt.plot(i,j,'ro')
imlstshow(lst,vmin=-.05,vmax=2.**(t-2.7)/(L**2))
# imlstshow(lst,vmin=-.05,vmax=0.5)
plt.show()
# .shape
In [130]:
# env = KBs.guess(dct=tst_dct[20])
# env = KBs.guess(dct=tst_dct[15])
def main(env):
# if 1:
nsp = 60
out = KBs.sample(env)
prev = out
cmap = plt.get_cmap('rainbow')
L = env.siz[-1]
X = np.arange(0,L)-L//2
X = abs(X)
# X = np.minimum(L-X,X)
X,Y = np.meshgrid(X,X)
D = X+Y
D = D[None,None]
# loc = np.vstack([range(1,nsp+1),
# np.random.randint(0,env.siz[-1],size=(2,nsp))]
# )
# idx = np.ravel_multi_index(loc, (nsp+1,)+env.siz[1:] )
loc = np.vstack([range(0,nsp),
np.ones((2,nsp),np.int,)*L//2,
# np.ones((2,nsp),np.int,),
# np.zeros((2,nsp),np.int,),
# np.random.randint(0,env.siz[-1],size=(2,nsp))
]
)
idx = np.ravel_multi_index(loc, (nsp,)+env.siz[1:] )
real = prev[-1,:nsp]
dev = real.copy()
rcini = kb.conv(real[:,:3,:3])[:,1,1].ravel()
ct = collections.Counter(rcini)
print ct
# snap = prev[-1,0:1]
# snap = np.repeat(snap,nsp+1,axis=0)
dev.flat[idx]=1-dev.flat[idx]
ini= np.vstack([real,dev])
out = sample(env,ini=ini)
SUM = (out[:,:nsp] + out[:,nsp:])
flaw = SUM==1
fMEAN = flaw.mean(axis=(2,3) )
# nonz = fMEAN[3]!=0
# # flaw=flaw.take(nonz,axis=1)
# flaw=flaw[:,nonz]
# fMEAN=fMEAN[:,nonz]
# print dMEAN.shape
# fMEAN=fMEAN.take(nonz,axis=1)
XLIM=[0,20]
tv = 20
dMEAN=(flaw*D).mean(axis=(2,3))
dMEAN=np.nan_to_num(dMEAN/fMEAN)
# dMEAN[np.isnan(dMEAN)]
# np.nan_to_num(dMEAN)
fig,axs=plt.subplots(2,2,figsize=[12,5])
axs=axs.flat
plt.sca(axs[0])
for c,xs in zip(rcini,fMEAN.T):
plt.plot(xs,alpha=0.65,c=cmap(c))
plt.plot(fMEAN.mean(axis=-1),'b',alpha=1)
plt.plot(fMEAN.std(axis=-1),'b--',alpha=1)
plt.grid()
plt.ylim(0,1)
plt.xlim(XLIM)
plt.sca(axs[2])
plt.hist(fMEAN[tv],bins=np.linspace(0,1,30))
plt.grid()
plt.sca(axs[1])
plt.plot(dMEAN,alpha=0.65)
plt.plot(dMEAN.mean(axis=-1),'b',alpha=1)
plt.plot(dMEAN.std(axis=-1),'b--',alpha=1)
plt.xlim(XLIM)
plt.grid()
plt.sca(axs[3])
plt.hist(dMEAN[tv],bins=np.linspace(0,16,30))
plt.grid()
plt.ylim(0,16)
# plt.pcolormesh(sflatten(SUM[:50,3]))
plt.show()
return SUM
main(env) ;
In [53]:
env = KBs.guess(dct=tst_dct[20])
main(env)
env = KBs.guess(dct=tst_dct[15])
main(env)
env = KBs.guess(dct=tst_dct[8])
o = main(env);
In [62]:
print env.dimsiz
In [114]:
# env = KBs.guess(dct=tst_dct[8])
env = KBs.guess(dct=tst_dct[0])
# env.dimsize=(256,128,64**2)
# env.change_size((256,64,64**2))
env.change_size((60,60,64**2))
# sample(env)
o = main(env)
o = (o[2:30] == 1).mean(axis=0)
fig,axs=plt.subplots(2,3,figsize=[12,6])
for ax,i in zip(axs.ravel(),range(6)):
im = o[i]
# if im.sum()==0:
# continue
plt.sca(ax)
plt.pcolormesh(sflatten(im),vmin=0,vmax=1)
plt.show()
In [146]:
# env = KBs.guess(dct=tst_dct[8])
env = KBs.guess(dct=tst_dct[15])
# env.dimsize=(256,128,64**2)
# env.change_size((256,64,64**2))
env.change_size((60,60,64**2))
# sample(env)
o = main(env)
o = (o[2:30] == 1).mean(axis=0)
fig,axs=plt.subplots(2,3,figsize=[12,6])
for ax,i in zip(axs.ravel(),range(6)):
im = o[i]
# if im.sum()==0:
# continue
plt.sca(ax)
plt.pcolormesh(sflatten(im),vmin=0,vmax=1)
plt.show()
In [140]:
# env = KBs.guess(dct=tst_dct[8])
env = KBs.guess(dct=tst_dct[20])
# env.dimsize=(256,128,64**2)
# env.change_size((256,64,64**2))
env.change_size((60,60,64**2))
# sample(env)
o = main(env)
o = (o[2:30] == 1).mean(axis=0)
fig,axs=plt.subplots(2,3,figsize=[12,6])
for ax,i in zip(axs.ravel(),range(6)):
im = o[i]
# if im.sum()==0:
# continue
plt.sca(ax)
plt.pcolormesh(sflatten(im),vmin=0,vmax=1)
plt.show()
In [147]:
env = KBs.guess(dct=tst_dct[8])
print env.alias
# env = KBs.guess(dct=tst_dct[15])
# env.dimsize=(256,128,64**2)
# env.change_size((256,64,64**2))
env.change_size((60,60,64**2))
# sample(env)
o = main(env)
o = (o[2:30] == 1).mean(axis=0)
fig,axs=plt.subplots(2,3,figsize=[12,6])
for ax,i in zip(axs.ravel(),range(6)):
im = o[i]
# if im.sum()==0:
# continue
plt.sca(ax)
plt.pcolormesh(sflatten(im),vmin=0,vmax=1)
plt.show()
In [160]:
env = KBs.guess(dct=dant[0]['rule'])
print env.alias
# env = KBs.guess(dct=tst_dct[15])
# env.dimsize=(256,128,64**2)
# env.change_size((256,64,64**2))
env.change_size((60,60,64**2))
# sample(env)
o = main(env)
o = (o[2:30] == 1).mean(axis=0)
fig,axs=plt.subplots(2,3,figsize=[12,6])
for ax,i in zip(axs.ravel(),range(6)):
im = o[i]
# if im.sum()==0:
# continue
plt.sca(ax)
plt.pcolormesh(sflatten(im),vmin=0,vmax=1)
plt.show()
In [1114]:
env = KBs.guess(dct=tst_dct[8])
env = KBs.guess(dct=tst_dct[15])
# env.dimsize=(256,128,64**2)
# env.change_size((256,64,64**2))
env.change_size((60,60,64**2))
# sample(env)
o = main(env)
for i in range(20):
plt.figure(figsize=[13,2])
plt.pcolormesh(sflatten(o[:50,i]))
plt.show()
In [60]:
KBs.lview(KBs.guess(dct=tst_dct[13]))
Out[60]:
In [287]:
# np.nonzero?
fMEAN[0]
Out[287]:
In [147]:
snap0 = prev[-1,0:1]
snap = np.repeat(snap0,2,axis=0)
lst = []
for i in range(10):
i,j=np.random.randint(snap.shape[-1],size=(2,))
# snap[1,i,j] = 1-snap[1,i,j]
# snap.flat[1] = 1-snap.flat[1]
out = sample(env,ini=snap)
out = np.mean(out,axis=1)
out = out[:]
lst+=[out]
lst = np.array(lst)
# diff = lst[]
# out = hill(out)
# print out.shape
# convolve_int(out,[[[[0.5,0.5]]]])
fig,axs=plt.subplots(2,1,figsize=[14,6])
plt.sca(axs[0])
plt.pcolormesh(sflatten(lst[0]))
plt.grid()
plt.sca(axs[1])
# plt.plot(sflatten(out==0.5).mean(axis=1))
plt.plot(hill(sflatten(out)).mean(axis=1))
plt.ylim(0,0.5)
plt.grid()
plt.show()
In [108]:
Out[108]: