class network{
beta:number[]=new Array();
alpha:number;
x:number[][]=new Array();
y:number[]=new Array();
number_d:number;
number_p:number;
beta_d:number[]=new Array();
alpha_d:number;
mode:number;
search():void{
this.mode=0;
while(this.mode<100){
this.drive();
this.mode=this.mode+1;
}
}
drive():void{
var s:number;
var d_beta:number[]=new Array();
var d_alpha:number;
var tr_beta:number[]=new Array();
var tr_alpha:number;
var d_tr:number;
for(s=1;s<this.number_d+1;s++){
d_beta[s]=this.drive_beta(s);
}
d_alpha=this.drive_alpha();
var trs:number;
trs=d_alpha*d_alpha;
for(s=1;s<this.number_d+1;s++){
trs=trs+d_beta[s]*d_beta[s];
}
trs=Math.sqrt(trs);
for(s=1;s<this.number_d+1;s++){
tr_beta[s]=d_beta[s]/trs;
}
tr_alpha=d_alpha/trs;
d_tr=tr_alpha*d_alpha;
for(s=1;s<this.number_d+1;s++){
d_tr=tr_beta[s]*d_beta[s];
}
var ds,h,u1,u2:number;
u1=this.ex();
ds=u1/100;
h=ds/d_tr;
for(s=1;s<this.number_d+1;s++){
this.beta_d[s]=this.beta[s]+h*tr_beta[s];
}
this.alpha_d=this.alpha+h*tr_alpha;
u2=this.ex_d();
if(u1>u2)this.mode=1000;
if(u2>u1){
for(s=1;s<this.number_d+1;s++){
this.beta[s]=this.beta_d[s];
}
this.alpha=this.alpha_d;
}
}
drive_beta(ds:number):number{
var s,d1,d2,h:number;
d1=this.ex();
h=0.01;
this.alpha_d=this.alpha;
for(s=1;s<this.number_d+1;s++){
this.beta_d[s]=this.beta[s];
}
this.beta_d[ds]=this.beta_d[ds]+h;
d2=this.ex_d();
return (d2-d1)/h;
}
drive_alpha():number{
var s,d1,d2,h:number;
d1=this.ex();
h=0.01;
this.alpha_d=this.alpha+h;
for(s=1;s<this.number_d+1;s++){
this.beta_d[s]=this.beta[s];
}
d2=this.ex_d();
return (d2-d1)/h;
}
dist_d(n:number):number{
var s:number;
var z,k,zz,t,e:number;
var xs:number[]=new Array();
z=0;
for(s=1;s<this.number_d+1;s++){
z=z+this.beta_d[s]*this.x[n][s];
}
k=this.alpha_d-z;
zz=0;
for(s=1;s<this.number_d+1;s++){
zz=zz+this.beta_d[s]*this.beta_d[s];
}
t=k/zz;
for(s=1;s<this.number_d+1;s++){
xs[s]=this.x[n][s]+t*this.beta_d[s];
}
e=0;
for(s=1;s<this.number_d+1;s++){
e=e+(this.x[n][s]-xs[s])*(this.x[n][s]-xs[s]);
}
return e;
}
ex_d():number{
var s,s1,z,z1,h:number;
z=0;
for(s=1;s<this.number_p+1;s++){
z1=this.dist_d(s);
h=this.y[s];
h=h*this.sign(s);
if(h>0)z=z+z1;
if(h<0)z=z-z1;
}
return z;
}
ex():number{
var s,s1,z,z1,h:number;
z=0;
for(s=1;s<this.number_p+1;s++){
z1=this.dist(s);
h=this.y[s];
h=h*this.sign(s);
if(h>0)z=z+z1;
if(h<0)z=z-z1;
}
return z;
}
sign(n:number){
var z,s,k,sp:number;
sp=1;
z=0;
for(s=1;s<this.number_d+1;s++){
z=z+this.beta[s]*this.x[n][s];
}
k=z-this.alpha;
if(k<0)sp=-1;
return sp;
}
dist(n:number):number{
var s:number;
var z,k,zz,t,e:number;
var xs:number[]=new Array();
z=0;
for(s=1;s<this.number_d+1;s++){
z=z+this.beta[s]*this.x[n][s];
}
k=this.alpha-z;
zz=0;
for(s=1;s<this.number_d+1;s++){
zz=zz+this.beta[s]*this.beta[s];
}
t=k/zz;
for(s=1;s<this.number_d+1;s++){
xs[s]=this.x[n][s]+t*this.beta[s];
}
e=0;
for(s=1;s<this.number_d+1;s++){
e=e+(this.x[n][s]-xs[s])*(this.x[n][s]-xs[s]);
}
return e;
}
}
最終更新:2016年12月03日 00:02