import numpy as np
import matplotlib.pyplot as plt

def ES(n,sigma,eval,term=lambda P,t:t>=100000,kappa=0.82,zw=0.2,fit=lambda P:P[0],lb=-10,ub=10):
    t=0
    P=np.random.uniform(lb, ub, n)
    succ=0
    stats=[]
    while not term(P,t):
        Pm=P+np.random.normal(0,sigma,n)

        if eval(P,Pm,t):
            P=Pm
            succ=succ+1
        t=t+1
        if (t % 100) == 0:
            we=succ/100
            stats.append([t,sigma,we,fit(P)])
            if we < zw:
                sigma=sigma*kappa
            if we > zw:
                sigma=sigma/kappa
            succ=0
    return stats

def minimizeAbs(P,Pm,t):
    return np.sum(np.abs(P))>np.sum(np.abs(Pm))

def corridor(P,Pm,t,b=np.array([10,13,1,6,18,20,4,10,13,2])):
    if (P[1]-Pm[1]) <= b[t//10000]:
        return Pm[0]>P[0]
    else:
        return 0

stats=np.zeros((6,4,1000))
j=0
for zw in np.array([0.15,0.2,0.25,0.3,0.5,0.6]):
    for i in np.arange(0,100):
        stats[j]=stats[j]+np.transpose(ES(2,1,corridor,zw=zw,lb=0,ub=0))
    stats[j]=stats[j]/100
    print(j)
    j=j+1

np.save("/home/jph/abgabensammlungSS15/ea/ubA/figures/stats.npy",stats)
