アットウィキロゴ

NNY

package nn;
 
 
public class pro {
 
    int[][] link=new int[10][3];
    int number_eq;
    double[][] a=new double[10][3];
    int number_var;
    int[] y=new int[101];
    double[][] x=new double[101][3];
  int number;
   double[][] e=new double[10][101];
 
 
     double[][] alpha=new double[10][3];
   int maxc;
 
 
    public static void main(String[] args) {
        pro t=new pro();
    }
 
    pro(){
 
link[1][0]=4;
link[1][1]=6;
link[1][2]=7;        
link[2][0]=5;
link[2][1]=6;
link[2][2]=7;
 
link[3][0]=2;
link[3][1]=4;
link[3][2]=5;
link[4][0]=3;
link[4][1]=4;
link[4][2]=5;
 
link[5][0]=1;
link[5][1]=2;
link[5][2]=3;
 
 
 
 
 
 
        number=100;
 
        int s,sx;
    for(s=1;s<number+1;s++){
    x[s][1]=Math.random();
    x[s][2]=Math.random();
    }    
 
for(s=1;s<number+1;s++){
y[s]=0;    
if(3*x[s][1]+2*x[s][2]>2.5)y[s]=1;
}
 
number_eq=5;
number_var=2;
 
int tr;
maxc=0;
for(tr=1;tr<11;tr++){
 
 
for(s=1;s<number_eq+1;s++){
    a[s][0]=-Math.random();
    for(sx=1;sx<number_var+1;sx++){
    a[s][sx]=Math.random();
    }            
}
 
nn sub=new nn();
sub.link=link;
sub.number=number;
sub.number_eq=number_eq;
sub.number_var=number_var;
sub.x=x;
sub.y=y;
sub.a=a;
sub.makedata();
a=sub.a;
 
int eq;
 
for(s=1;s<number+1;s++){
e[6][s]=x[s][1];
e[7][s]=x[s][2];
}
 
for(eq=1;eq<number_eq+1;eq++){
for(s=1;s<number+1;s++){
double z=a[eq][0];
for(sx=1;sx<number_var+1;sx++){
int v1=link[eq][sx];
z=z+a[eq][sx]*e[v1][s];    
}    
int v1=link[eq][0];
int w=0;
if (z>0)w=1;
e[v1][s]=w;
}
}
 
 
int n=0;
for(s=1;s<number+1;s++){
if(y[s]==e[1][s])n=n+1;
}
 
 
 
 
if(n>maxc){maxc=n;
 
for(s=1;s<number_eq+1;s++){
    for(sx=0;sx<number_var+1;sx++){
    alpha[s][sx]=a[s][sx];
    }            
}
 
 
 
}
 
 
 
    }
 
System.out.println(maxc);
 
 
 
 
 
 
}
 
 
}
 
package nn;
 
 
public class nn {
 
    int[][] link=new int[10][3];
    int number_eq;
    double[][] a=new double[10][3];
    int number_var;
    int[] y=new int[101];
    double[][] x=new double[101][3];
  int number;
   double[][] e=new double[10][101];
 
 
 
    void makedata(){
 
 
int q,s,sx;
 
q=0;
while(q<100){
 
q=q+1;    
 
double g1=0;
 
f sub=new f();
sub.link=link;
sub.number=number;
sub.number_eq=number_eq;
sub.number_var=number_var;
sub.x=x;
sub.y=y;
sub.a=a;
g1=sub.makedata();
 
double[][] alpha=new double[7][3];
double[][] df=new double[7][3];
 
int eq=1;
int m=0;
for(eq=1;eq<number_eq+1;eq++){
    for(m=0;m<number_var+1;m++){
 
for(s=1;s<number_eq+1;s++){
    for(sx=0;sx<number_var+1;sx++){
    alpha[s][sx]=a[s][sx];
    }            
}
 
double h=0.01;
 
alpha[eq][m]=alpha[eq][m]+h;
 
double g2;
 
f sub2=new f();
sub2.link=link;
sub2.number=number;
sub2.number_eq=number_eq;
sub2.number_var=number_var;
sub2.x=x;
sub2.y=y;
sub2.a=alpha;
g2=sub2.makedata();
 
df[eq][m]=(g2-g1)/h;
 
 
    }}
 
double sig=0;
 
for(s=1;s<number_eq+1;s++){
    for(sx=0;sx<number_var+1;sx++){
    sig=sig+df[s][sx]*df[s][sx];
    }            
}
 
for(s=1;s<number_eq+1;s++){
for(sx=0;sx<number_var+1;sx++){
alpha[s][sx]=a[s][sx]-0.01*g1*df[s][sx]/sig;    
}            
}
 
 
double g2;
 
f sub3=new f();
sub3.link=link;
sub3.number=number;
sub3.number_eq=number_eq;
sub3.number_var=number_var;
sub3.x=x;
sub3.y=y;
sub3.a=alpha;
g2=sub3.makedata();
 
if(g1<g2)q=5000;
 
if(g1>g2){
for(s=1;s<number_eq+1;s++){
for(sx=0;sx<number_var+1;sx++){
a[s][sx]=alpha[s][sx];    
}            
}    
 
}
 
}
 
}
 
 
 
 
 
 
    }
 
 
 
 
 
 
package nn;
 
public class f {
 
    int[][] link=new int[10][3];
    int number_eq;
    double[][] a=new double[10][3];
    int number_var;
    int[] y=new int[101];
    double[][] x=new double[101][3];
  int number;
   double[][] e=new double[10][101];
 
 
 
    double makedata(){
 
int s,sx;      
 
 
 
for(s=1;s<number+1;s++){
e[6][s]=x[s][1];
e[7][s]=x[s][2];
}
 
int eq;
 
for(eq=1;eq<number_eq+1;eq++){
for(s=1;s<number+1;s++){
double z=a[eq][0];
for(sx=1;sx<number_var+1;sx++){
int v1=link[eq][sx];
z=z+a[eq][sx]*e[v1][s];    
}    
int v1=link[eq][0];
e[v1][s]=1/(1+Math.exp(-z));
}
}
 
double don=0;
for(s=1;s<number+1;s++){
don=don+(e[1][s]-y[s])*(e[1][s]-y[s]);
 }
 
return don; 
 
 
 
 
 
 
 
 
 
}
 
 
 
 
 
 
    }
 
最終更新:2018年03月08日 09:49