アットウィキロゴ

mc

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