アットウィキロゴ

オート

package ren;
 
 
public class auto {
 
     int number;
    int number_var;
   int number_step;
    double[] beta=new double[5];
   double[][] alpha=new double[5][5];
   double[][][] theta=new double[6][5][5];
   double[][] x=new double[101][3];
  int[] y=new int[101];
 double[][] enc=new double[7][5];
double[][] dec=new double[7][5];  
 
 double[][] enc_op=new double[7][5];
double[][] dec_op=new double[7][5];  
 
int[][] esx=new int[7][101];
  int[][] esxs=new int[7][101];
void makedata(){
 
    int eq,s,v,tr;
int[][] e=new int[5][101];
  int[][] es=new int[5][101];
 
 
 
for(eq=1;eq<number_var+1;eq++){
for(s=1;s<number+1;s++){
double z=alpha[eq][0];
for(v=1;v<number_var+1;v++){
z=z+alpha[eq][v]*x[s][v];    
}    
es[eq][s]=0;
if(z>0)es[eq][s]=1;
}
}
 
 
 
for(tr=1;tr<number_step+1;tr++){
for(eq=1;eq<number_var+1;eq++){
for(s=1;s<number+1;s++){
e[eq][s]=es[eq][s];
}}
for(eq=1;eq<number_var+1;eq++){
for(s=1;s<number+1;s++){
double z=theta[tr][eq][0];
for(v=1;v<number_var+1;v++){
z=z+theta[tr][eq][v]*e[v][s];    
}    
es[eq][s]=0;
if(z>0)es[eq][s]=1;
}
}
}
 
int sx;
int k,maxc;
maxc=0;
for(k=1;k<101;k++){
 
 
for(s=1;s<number_var;s++){
    enc[s][0]=-Math.random();
    for(sx=1;sx<number_var+1;sx++){
    enc[s][sx]=Math.random();
    }            
   }
 
 
for(s=1;s<number_var+1;s++){
    dec[s][0]=-Math.random();
    for(sx=1;sx<number_var;sx++){
    dec[s][sx]=Math.random();
    }            
   }
 
nn_auto sub2=new nn_auto();
sub2.e=es;
sub2.dec=dec;
sub2.enc=enc;
sub2.number=number;
sub2.makedata();
enc=sub2.enc;
dec=sub2.dec;
 
for(eq=1;eq<number_var;eq++){
for(s=1;s<number+1;s++){
double z=enc[eq][0];
for(sx=1;sx<number_var+1;sx++){
z=z+enc[eq][sx]*es[sx][s];    
}    
esx[eq][s]=0;
if(z>0)esx[eq][s]=1;
}
}
 
 
for(eq=1;eq<number_var+1;eq++){
for(s=1;s<number+1;s++){
double z=dec[eq][0];
for(v=1;v<number_var;v++){
z=z+dec[eq][v]*esx[v][s];    
}    
esxs[eq][s]=0;
if(z>0)esxs[eq][s]=1;
}
}
 
 
int c=0;
for(s=1;s<number+1;s++){
for(eq=1;eq<number_var+1;eq++){ 
if(esxs[eq][s]==es[eq][s])c=c+1;
}}
 
if(c>maxc)refresh();
if(c>maxc)maxc=c;
 
 
}
 
System.out.println(maxc);
 
}
 void refresh(){
 
int eq,m;
 
for(eq=1;eq<number_var+1;eq++){
for(m=0;m<number_var+1;m++){
dec_op[eq][m]=dec[eq][m];
}}
 
for(eq=1;eq<number_var;eq++){
for(m=0;m<number_var+1;m++){
enc_op[eq][m]=enc[eq][m];
}}
 
 }   
 
 
 
 
}
 
 
 
package ren;
 
 
public class nn_auto {
 
    int number;
    int number_step;
    int number_var;
 
 int s,sx,tr;
 
 double[][] en=new double[7][5];
double[][] denc=new double[7][5];
 
double[][] de=new double[7][5];
double[][] ddec=new double[7][5];
 
 
int[][] e=new int[7][101];
 
 double[][] dec=new double[5][5];
   double[][] enc=new double[5][5];
 
 
    void makedata(){
 
 
int q,s,sx;
 
 
 
double g1=0;
double g2;
 
int trial=0;
while(trial<50){
 
trial=trial+1;
 
f_auto sub=new f_auto();
sub.e=e;
sub.number_var=number_var;
sub.number=number;
sub.dec=dec;
sub.enc=enc;
g1=sub.makedata();
 
 
 
int eq,m;
 
for(eq=1;eq<number_var;eq++){
for(m=0;m<number_var+1;m++){
 
    fresh();
 
double h=0.01;
 
en[eq][m]=enc[eq][m]+h;
 
f_auto sub2=new f_auto();
sub2.e=e;
sub2.number_var=number_var;
sub2.number=number;
sub2.dec=dec;
sub2.enc=en;
g2=sub2.makedata();
 
denc[eq][m]=(g2-g1)/h;
 
}
 
}
 
for(eq=1;eq<number_var+1;eq++){
for(m=0;m<number_var+1;m++){
 
    fresh();
 
double h=0.01;
 
de[eq][m]=de[eq][m]+h;
 
f_auto sub3=new f_auto();
sub3.e=e;
sub3.number_var=number_var;
sub3.number=number;
sub3.dec=de;
sub3.enc=enc;
g2=sub3.makedata();
 
ddec[eq][m]=(g2-g1)/h;
 
}}
 
 
 
fresh();
 
double sig=0;
 
for(eq=1;eq<number_var;eq++){
for(m=0;m<number_var+1;m++){
sig=sig+denc[eq][m]*denc[eq][m];    
}
}
 
for(eq=1;eq<number_var+1;eq++){
for(m=0;m<number_var+1;m++){
sig=sig+ddec[eq][m]*ddec[eq][m];    
}
}     
 
for(eq=1;eq<number_var+1;eq++){
for(m=0;m<number_var+1;m++){
de[eq][m]=dec[eq][m]-0.01*g1*ddec[eq][m]/sig;
}}
 
for(eq=1;eq<number_var;eq++){
for(m=0;m<number_var+1;m++){
en[eq][m]=enc[eq][m]-0.01*g1*denc[eq][m]/sig;
}}
 
f_auto sub3=new f_auto();
sub3.e=e;
sub3.number_var=number_var;
sub3.number=number;
sub3.dec=de;
sub3.enc=enc;
g2=sub3.makedata();
 
if(g2<g1)refresh();
if(g2>g1)trial=10000;
 
}
 
 
    }
 void fresh(){
 
int eq,m;
 
for(eq=1;eq<number_var+1;eq++){
for(m=0;m<number_var+1;m++){
de[eq][m]=dec[eq][m];
}}
 
for(eq=1;eq<number_var;eq++){
for(m=0;m<number_var+1;m++){
enc[eq][m]=enc[eq][m];
}}
 
 
 
 
 }   
 
 
    void refresh(){
 
int eq,m;
 
for(eq=1;eq<number_var+1;eq++){
for(m=0;m<number_var+1;m++){
dec[eq][m]=de[eq][m];
}}
 
for(eq=1;eq<number_var;eq++){
for(m=0;m<number_var+1;m++){
enc[eq][m]=en[eq][m];
}}
 
 }   
 
 
 
    }
 
 
 
 
package ren;
 
 
public class f_auto{
 
   double[] op=new double[101];
  int[][] e=new int[5][101];
  double[][] es=new double[5][101];
  double[][] esx=new double[5][101];
  int number;
    int number_step;
    int number_var;
   double[][] dec=new double[5][5];
   double[][] enc=new double[5][5];
 
   int[] y=new int[101];
    double[][] x=new double[101][5];
 int s,sx,tr;
 
    double makedata(){
 
int s,sx;      
 
 
int eq;
 
for(eq=1;eq<number_var;eq++){
for(s=1;s<number+1;s++){
double z=enc[eq][0];
for(sx=1;sx<number_var+1;sx++){
z=z+enc[eq][sx]*e[s][sx];    
}    
es[eq][s]=1/(1+Math.exp(-z));
}
}
 
int v;
 
for(eq=1;eq<number_var+1;eq++){
for(s=1;s<number+1;s++){
double z=dec[eq][0];
for(v=1;v<number_var;v++){
z=z+dec[eq][v]*es[v][s];    
}    
esx[eq][s]=1/(1+Math.exp(-z));
}
}
 
double don=0;
 
for(eq=1;eq<number_var+1;eq++){
for(s=1;s<number+1;s++){
don=don+(e[eq][s]-esx[eq][s])*(e[eq][s]-esx[eq][s]);
}}
 
return don; 
 
 
 
 
 
 
 
 
 
}
}
 
最終更新:2018年03月20日 23:34