最適化問題
# 勾配法
tol=0.0001;grad=100;
x=10;hist.x=x;lambda=0.1;
while(grad>tol) {
grad=(2*x+2)
x=x-lambda*grad
hist.x=c(hist.x,x)
}
par(mfrow=c(1,2));
xs=seq(-10,10,0.1)
plot(xs,xs^2+2*xs+1)
plot(hist.x)
# naive stochastic optimization
sx=10;hist.sx=sx
for (i_loop in 1:100){
sx.temp=sx+rnorm(1);
if ((sx.temp^2+2*sx.temp+1)<(sx^2+2*sx+1)){
sx=sx.temp
}
hist.sx=c(hist.sx,sx)
}
# simulated annealing
x=10;maxIt=1000;
c=1;s=1;temp=1;eta=0.99;
hist.x=matrix(0,nrow=maxIt);
for (i_loop in 1:maxIt) {
x.new=x+rnorm(1,mean=0,sd=temp*s)
E.old=x^2+2*x+1;
E.new=x.new^2+2*x.new+1;
Paccept=1/(1+exp((E.new-E.old)/(c*temp)))
if (Paccept>runif(1)){x=x.new}
temp=temp*eta;
hist.x[i_loop]=x;
}