package mc3;
public class pro {
int[] th=new int[3];
int[] c=new int[3];
int[] y=new int[3];
int s;
double[] us=new double[1001];
int[][] cs=new int[1001][3];
int[][] ys=new int[1001][3];
int[] bs=new int[1001];
double delta;
double[][] avgc=new double[3][3];
double[][] avgy=new double[3][3];
public static void main(String[] args) {
pro test=new pro();
}
pro(){
delta=0.01;
th[1]=100;
th[2]=200;
c[1]=70;
y[1]=70;
c[2]=80;
y[2]=80;
int tr;
for(tr=1;tr<2000;tr++){
for(s=1;s<101;s++){
cs[s][1]=c[1]+ep();
ys[s][1]=y[1]+ep();
cs[s][2]=c[2]+ep();
ys[s][2]=y[2]+ep();
bs[s]=ys[s][1]-cs[s][1]+ys[s][2]-cs[s][2];
us[s]=u(cs[s][1],ys[s][1],th[1])+u(cs[s][2],ys[s][2],th[2]);
}
double minu;
int h;
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];
}
for(s=1;s<101;s++){
if(bs[s]<0)us[s]=minu;
}
int tx,sx;
int n;
for(tx=1;tx<3;tx++){
for(sx=-1;sx<2;sx++){
n=0;
avgc[sx+1][tx]=0;
for(s=1;s<101;s++){
h=0;
if(cs[s][tx]==c[tx]+sx)n=n+1;
if(cs[s][tx]==c[tx]+sx)avgc[sx+1][tx]=avgc[sx+1][tx]+us[s];
}
if(n>0)avgc[sx+1][tx]=avgc[sx+1][tx]/n;
}
}
for(tx=1;tx<3;tx++){
for(sx=-1;sx<2;sx++){
n=0;
avgy[sx+1][tx]=0;
for(s=1;s<101;s++){
h=0;
if(ys[s][tx]==y[tx]+sx)n=n+1;
if(ys[s][tx]==y[tx]+sx)avgy[sx+1][tx]=avgy[sx+1][tx]+us[s];
}
if(n>0)avgy[sx+1][tx]=avgy[sx+1][tx]/n;
}
}
double maxc,maxy;
maxc=-999;
maxy=-999;
int cx,yx;
for(tx=1;tx<3;tx++){
cx=0;
yx=0;
for(sx=-1;sx<2;sx++){
if(avgc[sx+1][tx]>maxc)cx=sx;
if(avgc[sx+1][tx]>maxc)maxc=avgc[sx+1][tx];
}
for(sx=-1;sx<2;sx++){
if(avgy[sx+1][tx]>maxy)yx=sx;
if(avgy[sx+1][tx]>maxy)maxy=avgy[sx+1][tx];
}
c[tx]=c[tx]+cx;
y[tx]=y[tx]+yx;
}
}
}
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,int th){
double u1;
u1=Math.log(c1*delta)+Math.log(1-(double)y1/th);
return u1;
}
}
最終更新:2014年03月23日 12:35