2022年通过验证的遗传优化BP神经网络程序C程序 .pdf

上传人:Q****o 文档编号:30547932 上传时间:2022-08-06 格式:PDF 页数:38 大小:174.15KB
返回 下载 相关 举报
2022年通过验证的遗传优化BP神经网络程序C程序 .pdf_第1页
第1页 / 共38页
2022年通过验证的遗传优化BP神经网络程序C程序 .pdf_第2页
第2页 / 共38页
点击查看更多>>
资源描述

《2022年通过验证的遗传优化BP神经网络程序C程序 .pdf》由会员分享,可在线阅读,更多相关《2022年通过验证的遗传优化BP神经网络程序C程序 .pdf(38页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、遗传优化 BP 神经网络程序2009-05-25 19:37:07| 分类:C 程序设计| 标签: c |字号订阅 并行程序行列划分矩阵乘法注:本程序是首先用遗传算法优化神经网络的权值和阈值,然后进行神经网络的学习运算。其中一些参数的值可以根据需要进行修改。神经网络结构是简单的三层结构,可以根据具体情况增加隐层,相应的更改程序。#include stdlib.h #include math.h #include stdio.h #include time.h/ /定义宏 / / #define POPSIZE 20 /种群大小#define chromlength 33 /染色体长度#defi

2、ne N 2 /学习样本个数#define IN 4 /输入层神经元数目#define HN 4 /隐层神经元数目#define HC 1 /隐层层数#define ON 1 /输出层神经元数目#define Z 20000 /旧权值保存 - 每次 study 的权值都保存下来/ /定义全局变量 / / int popsize=20; /种群大小设为 20 int maxgeneration; /最大世代数名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 38 页 - -

3、- - - - - - - double pc =0.0; /交叉率double pm = 0.0; /变异率int generation; /当前执行的世代数double fitness20; /适应值double value20; /适应度double bestindividual; /最佳染色体个体double worstindividual; /最差染色体个体double currentbest; /当前最好的染色体个体int best_index; /最好的染色体索引序号int worst_index; /最差的染色体索引序号double E20; int W10000; doubl

4、e Svalue1000;int study; /训练次数double a; /学习速率,即步长double alpha; /动量因子double Pre_error; /预定误差double teach; int Pre_times; /预定最大学习轮次double PIN; /单个样本输入数据double TON; /单个样本教师数据double U0IN; /输入层权值double U11HNIN; /输入层至隐层权值double VONHN; /隐层至输出层权值double X0IN; /输入层的净输入double X1HN; /隐层的输入double YON; /输出层的输入doub

5、le H0IN; /输入层的输出double H1HN; /隐层的输出double OON; /输出层的输出double YU_ININ; /输入层的阈值名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 38 页 - - - - - - - - - double YU_HN1HN; /隐层的阈值double YU_ONON; /输出层的阈值double d_errON; double e_err1HN; double e_err0IN; double sum_err; do

6、uble err_mN; /第 m 个样本的总误差/ /定义结构体 / / struct individual /定义染色体个体结构体 double chromchromlength; double value; /染色体的值double fitness; /染色体的适应值;struct individual populationPOPSIZE; /种群数组/定义一个放学习样本的结构struct double inputIN; double teachON; Study_DataN; /学习样本/bp 算法用来保存每次计算的权值名师资料总结 - - -精品资料欢迎下载 - - - - - -

7、- - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 38 页 - - - - - - - - - struct double old_U11HNIN; /保存输入层至隐层权值旧权double old_VONHN; /保存隐层至输出层旧权double old_U0IN; Old_WVZ; / /子函数 / / /自定义变量初始化 / void input() int i,j; printf(初始化全局变量 :n); printf(种群大小 popsize=20); printf(最大世代数: ); /输入最大世代数scanf(%d, &max

8、generation); printf(交叉率 (0.2-0.99) :); /输入交叉率scanf(%lf, &pc); printf(变异率 (0.001-0.1) :); /输入变异率名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 38 页 - - - - - - - - - scanf(%lf, &pm); printf(学习速率 (0-1):); /输入学习速率,即步长scanf(%lf, &a); printf(动量因子 (0-1):); /输入动量因子sca

9、nf(%lf, &alpha); printf(预定误差 (0-1):); /输入预定误差scanf(%lf, &Pre_error); printf(预定最大学习轮次: ); /输入预定最大学习轮次scanf(%d, &Pre_times); printf(输入样本数据(包括学习样本和希望输出模式),共有 %d 个样本:n,N); for(i=0;iN;i+) printf(输入第 %d 个学习样本数据 n,i); for(j=0;jIN;j+) printf(Study_Data%d.input%d:,i,j); scanf(%lf, &Study_Datai.inputj); 名师资料总

10、结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 38 页 - - - - - - - - - printf(输入希望输出数据 n); scanf(%lf, &teach); for(i=0;iN;i+) for(j=0;jON;j+) Study_Datai.teachj=teach; /种群初始化 / void generateinitialpopulation( ) int i,j; srand(unsigned)time(NULL); /强制类型转化,以当前时间戳定义随机数种

11、子for (i=0;ipopsize; i+) /popsize: 种群大小名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 38 页 - - - - - - - - - for(j=0;jchromlength;j+) /chromlength:染色体长度 populationi.chromj=(double)(rand()%1000)*0.001); /随机产生0-1的小数。 /神经网络应用得到适应度函数/ double BP1() int i,j,k; double

12、sigma0,sigma1,sigma2; double s; double P4=1,2,3,4; for(i=0;i20;i+) /把随机产生的权值和阈值赋给相应的变量名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 38 页 - - - - - - - - - for(j=0;j4;j+) U0j= populationi.chromj; /printf( %d%d=%lf ,i,j,populationi.chromj); for(j=4;j20;j+) U11j/

13、4-1j%4= populationi.chromj; /printf( %d%d=%lf ,i,j,populationi.chromj); for(j=20;j24;j+) V0j%4= populationi.chromj; /printf( %d%d=%lf ,i,j,populationi.chromj); for(j=24;j28;j+) YU_INj%4= populationi.chromj; /printf( %d%d=%lf ,i,j,populationi.chromj); for(j=28;j32;j+) YU_HN1j%4= populationi.chromj; /

14、printf( %d%d=%lf ,i,j,populationi.chromj); YU_ON0= populationi.chrom32; /printf( %d32=%lf ,i,populationi.chrom32); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 38 页 - - - - - - - - - for(j=0;j4;j+) /神经网络输入层优化并输出 sigma0=0.0; sigma0=U0j*Pj; X0j=sigma0-YU_INj; H

15、0j=1.0/(1.0+exp(-X0j); for (j=0;j4;j+) sigma1=0.0; for (k=0;k4;k+) sigma1+=U11jk*H0k;/求隐层内积X1j=sigma1 - YU_HN1j;/求隐层净输入H1j=1.0/(1.0+exp(-X1j);/求隐层输出 sigmoid 算法 for (j=0;j1;j+) sigma2=0.0; for (k=0;k4;k+) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 38 页 - - -

16、 - - - - - - sigma2+=Vjk*H1j;/ 求输出层内积 Yj=sigma2-YU_ONj; / 求输出层净输入Oj=1.0/(1.0+exp(-Yj);/求输出层输出 for(s=0.0,k=0;k4;k+) s=s+(O0-teach)*(O0-teach); Ei=s/2; return 1; /计算染色体适应值 / void calculateobjectfitness() int i; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 10 页,共 38 页

17、 - - - - - - - - - for(i=0;i20;i+) valuei=(double)(1.0/Ei); Svaluegeneration=Svaluegeneration+valuei; for(i=0;i20;i+) fitnessi=valuei/Svaluegeneration; /求最佳个体和最差个体 / void findbestandworstindividual( ) int i; double sum=0.0; bestindividual=fitness0; worstindividual=fitness0; for (i=1;ibestindividual)

18、 /依次比较 ,找出最佳个体名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 11 页,共 38 页 - - - - - - - - - bestindividual=fitnessi; best_index=i; else if (fitnessi=currentbest)/第 n 代最好的,通过比较大于以往最好个体 currentbest=bestindividual; /评价种群 / void evaluatepopulation() calculateobjectfitness

19、(); /计算种群个体的适应度findbestandworstindividual(); /找到最好和最差的染色体个体 / 比例选择算法 / 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 13 页,共 38 页 - - - - - - - - - void selectoperator() int i,index; double p,sum=0.0; /p 存放随机概率, sum 存放个体适应率和累计适应率struct individual newpopulationPOPSIZE

20、; /新种群srand(unsigned) time(NULL); /种下随机种子for(i=1;ipopsize; i+) fitnessi=fitnessi-1+fitnessi; /得到种群累计适应率 for (i=0;ifitnessindex) index+; newpopulationi=populationindex; /选出个体组成新一代 ,暂时存放/newpopulation 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 14 页,共 38 页 - - - - -

21、 - - - - for(i=0;ipopsize; i+) populationi=newpopulationi; /全局变量 populaiton 存新种群(有重复值) / 交叉算法 / void crossoveroperator() int i,j; int index20,temp0; int point; double p,temp1; srand(unsigned) time(NULL); /种下随机种子for (i=0;ipopsize;i+) /初始化 index 数组indexi=i; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - -

22、 - - - - - - 名师精心整理 - - - - - - - 第 15 页,共 38 页 - - - - - - - - - for (i=0;ipopsize;i+) /for 循环实现种群内随机两两交换point=rand()%(popsize-i); /打乱种群顺序temp0=indexi; indexi=indexpoint+i; indexpoint+i=temp0; for (i=0;ipopsize-1;i+=2) p=rand()%1000/1000.0; if (ppc) /单点交叉算法;pc 交叉率point=rand()%(chromlength-1)+1; for

23、 (j=point; jchromlength;j+) /chromlength:染色体长度temp1=populationindexi.chromj; populationindexi.chromj=populationindexi+1.chromj; populationindexi+1.chromj=temp1; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 16 页,共 38 页 - - - - - - - - - / 变异操作 / void mutationoperato

24、r() int i,j; double p; srand(unsigned) time(NULL); /种下随机种子for (i=0;ipopsize;i+) for(j=0;jchromlength;j+) p=rand()%1000/1000.0; if (ppm) /pm: 变异率populationi.chromj=(double)(rand()%1000)*0.001); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 17 页,共 38 页 - - - - - - - -

25、 - / 生成下一代 / void generatenextpopulation() selectoperator(); crossoveroperator(); mutationoperator(); / 遗传算法数据输出 / void outputtextreport() int i; printf( 当前世代 =%dn 当前世代染色体最高值 =%fn,generation, fitnessbest_index); printf( 当代最好的一个种群是 %d 号:n, best_index ); printf( 当代最好 E 是:%lfn,Ebest_index ); 名师资料总结 - -

26、 -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 18 页,共 38 页 - - - - - - - - - printf( 当代最好 value 是:%lfn,valuebest_index ); printf( 当代的 Svalue 是:%lfn,Svaluegeneration ); for(i=0;i33;i+) printf(%lf, populationbest_index.chromi); Wgeneration=best_index; / 初始化权、阈值子程序 / void initial

27、() int j; for(j=0;j4;j+) U0j=populationbest_index.chromj; for(j=4;j20;j+) U11j/4-1j%4=populationbest_index.chromj; for(j=20;j24;j+) V0j%4=populationbest_index.chromj; for(j=24;j28;j+) YU_INj%4=populationbest_index.chromj; for(j=28;j32;j+) YU_HN1j%4=populationbest_index.chromj; 名师资料总结 - - -精品资料欢迎下载 -

28、 - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 19 页,共 38 页 - - - - - - - - - YU_ON0=populationbest_index.chrom32; /第 m 个学习样本输入子程序 / double input_P(int m) int i; for (i=0;iIN;i+) Pi=Study_Datam.inputi; / printf(P%d=%lf ,i,Pi); return 1; /第 m 个希望输出模式 / double input_T(int m) int k; for (k=0;

29、kON;k+) Tk=Study_Datam.teachk; / printf(T%d=%lf ,k,Tk); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 20 页,共 38 页 - - - - - - - - - return 1; / 输入层各单元输入、输出值子程序/ void I_O() double sigma0; int j; for(j=0;jIN;j+) sigma0=0.0; sigma0=U0j*Pj; X0j=sigma0-YU_INj; H0j=1.0/(1

30、.0+exp(-X0j); /printf(P%d=%lfn,j,Pj); /printf(U0%d=%lfn,j,U0j); /printf(YU_IN%d=%lfn,j,YU_INj); /printf(sigma0=%lfn,sigma0); /printf(X0%d=%lfn,j,X0j); /printf(H0%d=%lfn,j,H0j); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 21 页,共 38 页 - - - - - - - - - / 隐层各单元输入、输出值

31、子程序/ double H_I_O() double sigma1; int i,j; for (j=0;jHN;j+) sigma1=0.0; for (i=0;iIN;i+) sigma1+=U11ji*H0i;/ 求隐层内积/printf(U11%d%d=%lfn,j,i,U11ji); /printf(sigma1=%lfn,sigma1); X1j=sigma1 - YU_HN1j;/求隐层净输入名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 22 页,共 38 页 - -

32、 - - - - - - - H1j=1.0/(1.0+exp(-X1j);/求隐层输出 sigmoid 算法/printf(YU_HN1%d=%lfn,j,YU_HN1j); /printf(sigma1=%lfn,sigma1); /printf(X1%d=%lfn,j,X1j); /printf(H1%d=%lfn,j,H1j); return 1; /输出层各单元输入、输出值子程序/ double O_I_O() double sigma2; int k,j; for (k=0;kON;k+) sigma2=0.0; for (j=0;jHN;j+) sigma2+=Vkj*H1j;/

33、 求输出层内积名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 23 页,共 38 页 - - - - - - - - - /printf(sigma2=%lfn,sigma2); Yk=sigma2-YU_ONk; /求输出层净输入Ok=1.0/(1.0+exp(-Yk);/求输出层输出/printf(YU_ON%d=%lfn,k,YU_ONk); /printf(sigma2=%lfn,sigma2); /printf(Y%d=%lfn,k,Yk); /printf(O%d=%lf

34、n,k,Ok); return 1; /输出层至隐层的一般化误差子程序/ double Err_O_H(int m) int k; double abs_errON;/ 每个样本的绝对误差都是从0开始的double sqr_err=0;/ 每个样本的平方误差计算都是从0开始的for (k=0;kON;k+) abs_errk=Tk-Ok; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 24 页,共 38 页 - - - - - - - - - /printf(T%d=%lf,O%d

35、=%lf,abs_err%d=%lfn,k,Tk,k,Ok,k,abs_errk); /求第 m 个样本下的第 k 个神经元的绝对误差sqr_err+=(abs_errk)*(abs_errk);/求第 m 个样本下输出层的平方误差d_errk=abs_errk*Ok*(1.0-Ok);/d_errk输出层各神经元的一般化误差/printf(d_err%d=%lf ,k,d_errk); /printf(sqr_err=%lf ,sqr_err); err_mm=sqr_err/2;/ 第 m 个样本下输出层的平方误差/2=第 m 个样本的均方误差/printf(err_m%d=%lf ,m,

36、err_mm); return 1; /隐层至输入层的一般化误差子程序/ double Err_H_I() int k1,j1; double sigma; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 25 页,共 38 页 - - - - - - - - - for (j1=0;j1HN;j1+) sigma=0.0; for (k1=0;k1ON;k1+) sigma=d_errk1*Vj1k1; /printf(d_err%d=%lfn,k1,d_errk1); /prin

37、tf(V%d%d=%lfn,j1,k1,Vj1k1); e_err1j1=sigma*H1j1*(1-H1j1);/隐层各神经元的一般化误差/printf(H1%d=%lfn,j1,H1j1); /printf(e_err1%d=%lfn,j1,e_err1j1); return 1; / 输入层的一般化误差子程序,H0有精度问题要解决,要不然就要根据样本大小限定权值 / double Err_I() int k0,j0; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 26 页,共

38、 38 页 - - - - - - - - - double sigma; for (j0=0;j0IN;j0+) sigma=0.0; for (k0=0;k0HN;k0+) sigma=e_err1k0*U11j0k0; /printf(e_err1%d=%lfn,k0,e_err1k0); /printf(U11%d%d=%lfn,j0,k0,U11j0k0); /printf(sigma=%lfn,sigma); e_err0j0=sigma*H0j0*(1-H0j0);/第一隐层各神经元的一般化误差/printf(H0%d=%lfn,j0,H0j0); /printf(sigma=%

39、lfn,sigma); /printf(e_err0%d=%lfn,j0,e_err0j0); return 1; /输出层至隐层的权值调整、输出层阈值调整计算子程序/ double Delta_O_H1(int m,int n) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 27 页,共 38 页 - - - - - - - - - int k,j; if(n=1) for (k=0;kON;k+) for (j=0;j1) for (k=0;kON;k+) for (j=0;j

40、HN;j+) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 28 页,共 38 页 - - - - - - - - - Vkj=Vkj+a*d_errk*H1j+alpha*(Vkj-Old_WV(n-1).old_Vkj);/输出层至隐层的权值调整/printf( Old_WV%d.old_V%d%d=%lfn,n-1,k,j,Old_WV(n-1).old_Vkj); /printf( V%d%d=%lfn,k,j,Vkj); YU_ONk+=a*d_errk;/ 输出层至隐层

41、的阈值调整 return 1; /隐层至输入层的权值调整、隐层阈值调整计算子程序/ double Delta_H1_I(int m,int n) int i,j; if(n=1) for (j=0;jHN;j+) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 29 页,共 38 页 - - - - - - - - - for (i=0;i1) for (j=0;jHN;j+) for (i=0;iIN;i+) U11ji=U11ji+a*e_err1j*H0i+alpha*(U11

42、ji-Old_WV(n- 1).old_U11ji);/ 第一隐层至输入层的权值调整 YU_HN1j+=a*e_err1j;/ 第一隐层阈值调整 return 1; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 30 页,共 38 页 - - - - - - - - - /输入层的权值调整、输入层阈值调整计算子程序/ double Delta_I(int m,int n) int i; if(n=1) for (i=0;i1) for (i=0;iIN;i+) U0i=U0i+a*

43、e_err0i*Pi+alpha*(U0i-Old_WV(n-1).old_U0i);/输入层权值调整YU_INi+=a*e_err0i;/ 输入层阈值调整名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 31 页,共 38 页 - - - - - - - - - return 1; /N 个样本的全局误差计算子程序/ double Err_Sum() int m; double total_err=0.0; for (m=0;mN;m+) total_err+=err_mm;/ 每个

44、样本的均方误差加起来就成了全局误差/printf(err_m%d=%lfn,m,err_mm); return total_err; /把本次的学习权值全保存到数组/ double saveWV(int m) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 32 页,共 38 页 - - - - - - - - - int i,j; for(i=0;iHN;i+) Old_WVm.old_U0i=U0i; for(i=0;iHN;i+) for(j=0;jIN;j+) Old_WVm

45、.old_U11ij = U11ij; for(i=0;iON;i+) for(j=0;jHN;j+) Old_WVm.old_Vij = Vij; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 33 页,共 38 页 - - - - - - - - - return 1; / 结果写入文本 / void save() int i,j; FILE *fp; fp=fopen(test2.txt , wb); for(i=0;iIN;i+) fprintf(fp, n 输入层权值 U

46、0%d=%lfn,i,U0i); for(i=0;iHN;i+) for(j=0;jIN;j+) fprintf(fp, n 隐层权值 U11%d%d=%lfn,i,j,U11ij); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 34 页,共 38 页 - - - - - - - - - for(i=0;iHN;i+) fprintf(fp, n 输出层权值 V0%d=%lfn,i,V0i); for(i=0;iIN;i+) fprintf(fp, n 输入层阈值 YU_IN%d

47、=%lfn,i,YU_INi); for(i=0;iHN;i+) fprintf(fp, n 隐层阈值 YU_HN1%d=%lfn,i,YU_HN1i); fprintf(fp, n 输出层阈值 YU_ON0=%lfn,YU_ON0); fprintf(fp, n 全部样本全局误差 sum_err=%lfn,sum_err); fprintf(fp, n 最终学习次数 study=%dn,study); fclose(fp); /* 关闭文件 */ 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - -

48、 - - 第 35 页,共 38 页 - - - - - - - - - / /主函数 / / void main() int i,m; FILE *fp; study=0; generation=0; /初始化 generation 当前执行的代input(); generateinitialpopulation();/产生初始化种群BP1(); evaluatepopulation(); while(generationmaxgeneration) /小于最大世代数 ,执行循环体 generation+; generatenextpopulation(); /生成子代种群 (A.选择; B

49、.交叉 ; C.变异) BP1(); evaluatepopulation(); /评价新生子代种群名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 36 页,共 38 页 - - - - - - - - - outputtextreport(); /输入当代最终种群 fp=fopen(test1.txt , wb); for(i=0;igeneration;i+) fprintf(fp, %d ,Wi); fclose(fp); /* 关闭文件 */ initial(); / 隐层、

50、输出层权、阈值初始化(2) do +study; for (m=0;mN;m+) input_P(m); / 输入第 m 个学习样本input_T(m);/ 输入第 m 个样本的教师信号I_O(); H_I_O(); / 第 m 个学习样本隐层各神经元输入、输出值O_I_O(); / 第 m 个学习样本输出层各神经元输入、输出值(3) Err_O_H(m); / 第 m 个学习样本输出层至隐层一般化误差Err_H_I(); / 第 m 个学习样本隐层至输入层一般化误差(4) Err_I(); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - -

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 技术资料 > 技术总结

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁