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