?? main.cpp
字號:
for(i=0; i<unitnumber; i++)
sumtemp += v[i] * hn_out[i];
sumtemp += y_b;
//y=sumtemp;
y = 1/(1+exp(-sumtemp));
if(y<0.01) y=0.01;
if(y>0.99) y=0.99;
}
void delta(int m)
{
errtemp =data[m].teach-y;
error += 0.5*errtemp*errtemp;
y_delta = errtemp*y*(1-y);
for(i=0; i<unitnumber; i++) //計算隱含層的delta
{
// errtemp = 0.0;
errtemp = y_delta * v[i];
hn_delta[i] = errtemp* hn_out[i]*(1.0-hn_out[i]);
}
}
double vsum[HN];
void v_sum()
{
for(i=0; i<unitnumber; i++)
vsum[i]=vsum[i]+y_delta*hn_out[i];
}
double bsum;
void b_sum()
{
bsum=bsum+y_delta;
}
double hnsum[HN];
void hnb_sum()
{
for(i=0; i<unitnumber; i++)
hnsum[i]=hnsum[i]+hn_delta[i];
}
double wsum[HN][IN];
void w_sum()
{
for(i=0; i<unitnumber; i++)
for(j=0;j<IN;j++)
wsum[i][j]=wsum[i][j]+hn_delta[i]*xout[j];
}
double r=0.01;
void choose()
{
double cha;
cha=error-error_1;
if(cha>0)
alpha=alpha*(1-r);
if(cha<0)
alpha=alpha*(1+r);
}
double chaos(double x)
{
double q1=0.8;
double q2=0.6;
double result;
result=q1*x*exp(-q2*fabs(x));
return result;
}
void outquan()
{
double parameter;
for(i=0; i<unitnumber; i++) //調整輸出層的權值和偏置系數
{
parameter=v[i]-v0[i];
v1[i]=v[i];
parameter=alpha * vsum[i]+chaos(parameter);
v0[i]=v1[i];
}
y_b+= beta * bsum;
}
void hnquan()
{
double parameter;
for(i=0; i<unitnumber; i++) //調整隱含層的權值和偏置系數
{
for(j=0; j<IN; j++)
{
parameter=w[i][j]-w0[i][j];
w1[i][j]=w[i][j];
parameter = alpha*wsum[i][j] +chaos(parameter);
w0[i][j]=w1[i][j];
}
hn_b[i] += beta * hnsum[i];
}
}
//-----------------------------------------------------------
void hiddenlayunitchoose(int k);
void main()
{
double price;
int vector[daynumber];
//srand((unsigned)time(NULL));
getteachingdataprice();
getteachingdataload();
gettestingdataprice();
gettestingload();
ofstream fp;
fp.open("out.txt",ios::out);
double err_1=0.0;
for(int interval=0;interval<N;interval++)
{
hiddenlayunitchoose(interval);
for(int i=1;i<daynumber;i++)
teachinginputset(i,interval);
GLVQ(interval,vector);//if(interval>=32)
initializing();
loop=0;
while(loop<times)
{
loop++;
error=0.0;
//...............................................................
bsum=0;
for(i=0; i<unitnumber; i++)
vsum[i]=0.0;
for(i=0; i<unitnumber; i++)
hnsum[i]=0.0;
for(i=0; i<unitnumber; i++)
for(j=0; j<IN; j++)
wsum[i][j]=0.0;
//..............................................................................
for(int m=0; m<daynumber; m++)
{
//if(vector[m])
{
//cout<<"vector["<<m<<"]="<<vector[m]<<endl;
layer_in(m);
hnout();
yout();
delta(m);
v_sum();
b_sum();
hnb_sum();
w_sum();
}
}
// cout<<"Error="<<error<<endl;
// if(error==0) break;
choose();
outquan();
hnquan();
if(fabs(error-error_1)< errlimit&&error>error_1) break;
error_1=error;
}
//cout<<"Error="<<error<<endl;
//輸出訓練結果
//cout<<endl<<"training completion............"<<endl;
//cout<<"unitnumber="<<unitnumber<<endl;
//cout<<"Error="<<error<<endl;
//cout<<"Loop="<<loop<<endl;
// 利用上面訓練得到的權值和偏置系數進行檢驗
cout<<endl<<"testing............"<<endl;
testinginputset(daynumber,interval);
double err_1=0.0;
for(i=0; i<IN; i++) //設置輸入層的輸出
xout[i]=data[daynumber].input[i];
for(i=0; i<unitnumber; i++)
{
sumtemp = 0.0;
for(j=0; j<IN; j++)
sumtemp += w[i][j] * xout[j];
sumtemp +=hn_b[i];
hn_out[i]=1/(1+exp(-sumtemp));
}
sumtemp = 0.0;
for(i=0; i<unitnumber; i++)
sumtemp += v[i] * hn_out[i];
sumtemp += y_b;
// y=sumtemp;
y = 1/(1+exp(-sumtemp));
price=y*maxprice;
pricepointer[daynumber][interval]=price;
double err;
err=data[daynumber].teach-y;
cout<<"第"<<interval+1<<"點預測的結果為:"<<price<<endl;
fp/*<<"第"<<interval+1<<"點預測的結果為:"*/<<price<<endl;
cout<<"第"<<interval+1<<"點實際的電價為:"<<data[daynumber].teach*maxprice<<endl;
//fp<<"第"<<interval+1<<"點實際的結果為:"<<data[daynumber].input[IN-1]*maxprice<<endl;
//fp<<endl;
double percent;
percent=fabs(err)/data[daynumber].teach;
cout<<"第"<<interval+1<<"點預測的相對誤差為:"<<100*percent<<"%"<<endl;
//cout<<endl;
err_1+=percent;
}
fp<<"平均相對誤差為:"<<100*(err_1/N)<<"%"<<endl;
}
void hiddenlayunitchoose(int k)
{
switch(k)
{
case 0 :unitnumber=8;break;
case 1 :unitnumber=8;break;
case 2: unitnumber=8;break;
case 3: unitnumber=8;break;
case 4: unitnumber=8;break;
case 5: unitnumber=8;break;
case 6: unitnumber=12;break;
case 7: unitnumber=16;break;
case 8: unitnumber=8;break;
case 9: unitnumber=8;break;
case 10: unitnumber=8;break;
case 11: unitnumber=8;break;
case 12: unitnumber=8;break;
case 13: unitnumber=8;break;
case 14: unitnumber=8;break;
case 15: unitnumber=16;break;
case 16: unitnumber=8;break;
case 17: unitnumber=8;break;
case 18: unitnumber=8;break;
case 19: unitnumber=8;break;
case 20: unitnumber=8;break;
case 21: unitnumber=6;break;
case 22:unitnumber=6;break;
case 23:unitnumber=8;break;
case 24:unitnumber=8;break;
case 25:unitnumber=3;break;
case 26:unitnumber=3;break;
case 27:unitnumber=9;break;
case 28:unitnumber=3;break;
case 29:unitnumber=3;break;
case 30:unitnumber=8;break;
case 31:unitnumber=7;break;
case 32:unitnumber=9;break;
case 33:unitnumber=16;break;
case 34:unitnumber=5;break;
case 35:unitnumber=12;break;
case 36:unitnumber=5;break;
case 37:unitnumber=5;break;
case 38:unitnumber=5;break;
case 39:unitnumber=5;break;
case 40:unitnumber=5;break;
case 41:unitnumber=5;break;
case 42:unitnumber=5;break;
case 43:unitnumber=5;break;
case 44:unitnumber=5;break;
case 45:unitnumber=5;break;
case 46:unitnumber=5;break;
case 47:unitnumber=5;break;
case 48:unitnumber=5;break;
case 49:unitnumber=5;break;
case 50:unitnumber=5;break;
case 51:unitnumber=5;break;
case 52:unitnumber=5;break;
case 53:unitnumber=5;break;
case 54:unitnumber=5;break;
case 55:unitnumber=5;break;
case 56:unitnumber=5;break;
case 57:unitnumber=5;break;
case 58:unitnumber=5;break;
case 59:unitnumber=5;break;
case 60:unitnumber=5;break;
case 61:unitnumber=5;break;
case 62:unitnumber=5;break;
case 63:unitnumber=5;break;
case 64:unitnumber=5;break;
case 65:unitnumber=5;break;
case 66:unitnumber=5;break;
case 67:unitnumber=5;break;
case 68:unitnumber=5;break;
case 69:unitnumber=5;break;
case 70:unitnumber=5;break;
case 71:unitnumber=5;break;
case 72:unitnumber=5;break;
case 73:unitnumber=5;break;
case 74:unitnumber=5;break;
case 75:unitnumber=6;break;
case 76:unitnumber=5;break;
case 77:unitnumber=5;break;
case 78:unitnumber=5;break;
case 79:unitnumber=5;break;
case 80:unitnumber=5;break;
case 81:unitnumber=5;break;
case 82:unitnumber=5;break;
case 83:unitnumber=5;break;
case 84:unitnumber=5;break;
case 85:unitnumber=5;break;
case 86:unitnumber=5;break;
case 87:unitnumber=5;break;
case 88:unitnumber=5;break;
case 89:unitnumber=8;break;
case 90:unitnumber=8;break;
case 91:unitnumber=8;break;
case 92:unitnumber=6;break;
case 93:unitnumber=8;break;
case 94:unitnumber=8;break;
case 95:unitnumber=7;break;
default: unitnumber=6;
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -