package nnx;
public class nn_auto {
int number;
int number_var;
double[][] es=new double[5][101];
double[][] sig=new double[5][5];
double[][] sigx=new double[5][101];
double[][] dsig=new double[5][5];
void makedata(){
int eq,v;
for(eq=1;eq<number_var+1;eq++){
sig[eq][0]=-Math.random();
for(v=1;v<number_var+1;v++){
sig[eq][v]=Math.random();
}
}
int trial=0;
while(trial<100){
double g1;
trial=trial+1;
f_auto sub=new f_auto();
sub.sig=sig;
sub.es=es;
sub.number_var=number_var;
sub.number=number;
g1=sub.makedata();
for(eq=1;eq<number_var+1;eq++){
for(v=0;v<number_var+1;v++){
double h=0.01;
int eq1,v1;
for(eq1=1;eq1<number_var+1;eq1++){
for(v1=0;v1<number_var+1;v1++){
sigx[eq1][v1]=sig[eq1][v1];
}}
sigx[eq][v]=sig[eq][v]+h;
double g2;
f_auto sub2=new f_auto();
sub2.sig=sigx;
sub2.es=es;
sub2.number_var=number_var;
sub2.number=number;
g2=sub2.makedata();
dsig[eq][v]=(g2-g1)/h;
}}
double e=0;
for(eq=1;eq<number_var+1;eq++){
for(v=0;v<number_var+1;v++){
e=e+dsig[eq][v]*dsig[eq][v];
}}
for(eq=1;eq<number_var+1;eq++){
for(v=0;v<number_var+1;v++){
sigx[eq][v]=sig[eq][v]-0.01*g1*dsig[eq][v]/e;
}}
double g2;
f_auto sub3=new f_auto();
sub3.sig=sigx;
sub3.es=es;
sub3.number_var=number_var;
sub3.number=number;
g2=sub3.makedata();
if(g2<g1){
for(eq=1;eq<number_var+1;eq++){
for(v=0;v<number_var+1;v++){
sig[eq][v]=sigx[eq][v];
}}
}
trial=trial+1;
if(g2>g1)trial=1000;
}
}
}
最終更新:2018年03月13日 01:47