package mcmc;
public class pro {
int th;
int y1,c1;
double h;
double u1;
double[] us=new double[1001];
int[] cs=new int[1001];
int[] ys=new int[1001];
int[] bs=new int[1001];
int s;
double minu;
double[] avgc=new double[5];
double[] avgy=new double[5];
double delta;
public static void main(String[] args) {
pro test=new pro();
}
pro(){
delta=0.01;
th=100;
y1=70;
c1=70;
int tr;
for(tr=1;tr<1000;tr++){
for(s=1;s<1001;s++){
cs[s]=c1+ep();
ys[s]=y1+ep();
bs[s]=ys[s]-cs[s];
us[s]=u(cs[s],ys[s]);
}
minu=999;
for(s=1;s<101;s++){
h=0;
if(us[s]<minu)h=h+1;
if(bs[s]>-1)h=h+1;
if(h==2)minu=us[s];
}
System.out.println(minu);
for(s=1;s<101;s++){
if(bs[s]<0)us[s]=minu;
}
int sx,n;
for(sx=-1;sx<2;sx++){
n=0;
avgc[sx+1]=0;
for(s=1;s<101;s++){
h=0;
if(cs[s]==c1+sx)n=n+1;
if(cs[s]==c1+sx)avgc[sx+1]=avgc[sx+1]+us[s];
}
if(n>0)avgc[sx+1]=avgc[sx+1]/n;
}
for(sx=-1;sx<2;sx++){
n=0;
avgy[sx+1]=0;
for(s=1;s<101;s++){
h=0;
if(ys[s]==y1+sx)n=n+1;
if(ys[s]==y1+sx)avgy[sx+1]=avgy[sx+1]+us[s];
}
if(n>0)avgy[sx+1]=avgy[sx+1]/n;
}
double maxc,maxy;
maxc=-999;
maxy=-999;
int cx,yx;
cx=0;
yx=0;
for(sx=-1;sx<2;sx++){
if(avgc[sx+1]>maxc)cx=sx;
if(avgc[sx+1]>maxc)maxc=avgc[sx+1];
}
for(sx=-1;sx<2;sx++){
if(avgy[sx+1]>maxy)yx=sx;
if(avgy[sx+1]>maxy)maxy=avgy[sx+1];
}
c1=c1+cx;
y1=y1+yx;
System.out.println(c1+","+y1);
}
}
int ep(){
double p1;
int e1;
p1=Math.random();
e1=0;
if(p1<0.3)e1=-1;
if(p1>0.7)e1=1;
return e1;
}
double u(int c1,int y1){
u1=Math.log(c1*delta)+Math.log(1-(double)y1/th);
return u1;
}
}
最終更新:2014年03月23日 11:51