アットウィキロゴ

最適

package pon;
 
 
public class pro {
 
    int s,t;
    int[] th=new int[11];
    int[] c=new int[11];
    int[] y=new int[11];
    double delta;
 
   int[][] cs=new int[1001][11];
   int[][] ys=new int[1001][11];
   double[] vs=new double[1001];
   int[] bs=new int[1001];
 
   double[][] v=new double[1001][11];
   int[][] b=new int[1001][11];
 
   double[] alpha=new double[11];
   double[] beta=new double[11];
 
    public static void main(String[] args) {
        pro test=new pro();
    }
 
  pro(){  
 
      delta=0.01;
 
    for(s=1;s<11;s++){
    th[s]=10*s;  
    c[s]=5*s;
    y[s]=5*s;
    }
 
 
    int tr;
 
    for(tr=1;tr<300;tr++){
 
 
    for(t=1;t<1001;t++){
   for(s=1;s<11;s++){
   trial(t,s);
   }}
 
    double v1;
 
      for(t=1;t<1001;t++){
      v1=0;
       for(s=1;s<11;s++){
      v1=v1+u(cs[t][s],ys[t][s],th[s]);
       } 
      vs[t]=v1;
      }
 
      int b1;
 
       for(t=1;t<1001;t++){
      b1=0;
       for(s=1;s<11;s++){
      b1=b1+ys[t][s]-cs[t][s];
       } 
      bs[t]=b1;
      }
 
 
     for(t=1;t<1001;t++){
     for(s=1;s<11;s++){
     v[t][s]=vs[t]-u(cs[t][s],ys[t][s],th[s]);
     }
     }
 
     for(t=1;t<1001;t++){
     for(s=1;s<11;s++){
     b[t][s]=bs[t]+cs[t][s]-ys[t][s];
     }
     }
 
 
     double[] y1=new double[1001];
     double[][] x1=new double[1001][3];
     double[] sol=new double[3];
 
     int tx;
 
     for(tx=1;tx<11;tx++){
 
     for(s=1;s<1001;s++){
     y1[s]=v[s][tx];
     x1[s][1]=1;
     x1[s][2]=b[s][tx];
     }
 
     ols sub3=new ols();
     sub3.datanumber=1000;
     sub3.number=2;
     sub3.y=y1;
     sub3.x=x1;
     sub3.makedata();
     sol=sub3.sol;
 
     alpha[tx]=sol[1];
     beta[tx]=sol[2];
 
     }
 
     double maxu;
 
     int cp,yp,cps,yps;
 
     maxu=-999;
     cp=0;
     yp=0;
     for(s=1;s<11;s++){
     if(choice_c(s)>maxu)cp=s;
    if(choice_c(s)>maxu)maxu=choice_c(s);
     }
 
     for(s=1;s<11;s++){
     if(choice_y(s)>maxu)yp=s;
     if(choice_y(s)>maxu)cp=0;
     if(choice_y(s)>maxu)maxu=choice_y(s);
     }
 
 
     maxu=-999;
     cps=0;
     yps=0;
    for(s=1;s<11;s++){
    if(shuffle_c(s)>maxu)cps=s;
    if(shuffle_c(s)>maxu)maxu=shuffle_c(s);
    }
 
     for(s=1;s<11;s++){
     if(shuffle_y(s)>maxu)cps=0;
     if(shuffle_y(s)>maxu)yps=s;
     if(shuffle_y(s)>maxu)maxu=shuffle_y(s);
     }
 
 
 
 
  c[cps]=c[cps]-1;
   y[yps]=y[yps]+1;
   c[cp]=c[cp]+1;
   y[yp]=y[yp]-1;
 
 
  }
 
 
 
 for(s=1;s<11;s++){
System.out.println(c[s]+","+y[s]);
 }
 
 
  }
 
  double choice_c(int s){
  int c1,y1,b1;
  double u1,v1;
  c1=c[s]+1;
  y1=y[s];
  b1=c1-y1;
  u1=u(c1,y1,th[s])-u(c[s],y[s],th[s]);;
  v1=u1+beta[s];
  return v1;
  }
 
  double choice_y(int s){
  int c1,y1,b1;
  double u1,v1;
  c1=c[s];
  y1=y[s]-1;
  b1=c1-y1;
  u1=u(c1,y1,th[s])-u(c[s],y[s],th[s]);
  if(y1<0)u1=-999;
  v1=u1+beta[s];
  return v1;
  }
 
   double shuffle_c(int s){
  int c1,y1,b1;
  double u1,v1;
  c1=c[s]-1;
  y1=y[s];
  u1=u(c1,y1,th[s])-u(c[s],y[s],th[s]);
  v1=u1-beta[s];
  return v1;
  }
 
  double shuffle_y(int s){
  int c1,y1,b1;
  double u1,v1;
  c1=c[s];
  y1=y[s]+1;
  b1=c1-y1;
  u1=u(c1,y1,th[s])-u(c[s],y[s],th[s]);
  if(y1<0)u1=-999;
  v1=u1-beta[s];
  return v1;
  }
 
 
 
  void trial(int t,int s){
 
      double p1;
 
      p1=Math.random();
 
      if(p1<0.2)cs[t][s]=c[s]-1;
      if(p1>0.8)cs[t][s]=c[s]+1;
      if(cs[t][s]<1)cs[t][s]=1;
 
      p1=Math.random();
 
      if(p1<0.2)ys[t][s]=y[s]-1;
      if(p1>0.8)ys[t][s]=y[s]+1;
      if(ys[t][s]<0)ys[t][s]=0;
      if(ys[t][s]>th[s]-1)ys[t][s]=th[s]-1;
  }
double u(int c1,int y1,int th1){
double u1;
    u1=Math.log(c1*delta)+Math.log(1-(double)y1/th1);
return u1;
}
}
 
最終更新:2014年04月09日 08:23