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
runs=1000 # decrease for reasonable computationtime
for zw in np.array([0.15,0.2,0.25,0.3,0.5,0.6]):
for i in np.arange(0,runs):
stats[j]=stats[j]+np.transpose(ES(2,1,corridor,zw=zw,lb=0,ub=0))
stats[j]=stats[j]/runs
plt.plot(stats[j][0],stats[j][1],"rx")
plt.xlabel("t")
plt.ylabel("sigma")
plt.title("sigma over time, zw="+str(zw))
#plt.axis((0,100000,0,1e10))
plt.savefig("/home/jph/abgabensammlungSS15/ea/ubA/figures/sigma"+str(zw)+".png")
plt.close()
plt.plot(stats[j][0],stats[j][2],"rx")
plt.xlabel("t")
plt.ylabel("we")
plt.title("we over time, zw="+str(zw))
plt.axis((0,100000,0,0.55))
plt.savefig("/home/jph/abgabensammlungSS15/ea/ubA/figures/we"+str(zw)+".png")
plt.close()
plt.plot(stats[j][0],stats[j][3],"rx")
plt.xlabel("t")
plt.ylabel("fitness")
plt.title("fitness over time, zw="+str(zw))
plt.axis((0,100000,0,1e5))
plt.savefig("/home/jph/abgabensammlungSS15/ea/ubA/figures/fitness"+str(zw)+".png")
plt.close()
j=j+1
np.save("/home/jph/abgabensammlungSS15/ea/ubA/figures/stats.npy",stats)