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