! o# x. [# R4 \其中 为发展系数,6 u4 e5 d3 c, I8 ^9 W" ?" j8 e
有命题 当GM(1,1)发展系数 时,GM(1,1)模型无意义。 3 T( T" O% ?5 L1 r- _通过分析,可得下述结论: 0 L) Q# `. g( {9 i8 A9 F3 |* U当 时,GM(1,1)可用于中长期预测;6 k$ T. h, w, U9 a! }: L; T
当 时,GM(1,1)可用于短期预测,中长期预测慎用; : ]; D6 K5 B' H1 a& e% J7 J当 时,GM(1,1)作短期预测应十分谨慎; : l1 h6 q& j' I$ R3 _当 时,应采用残差修正GM(1,1);1 a; V- E2 y8 j. [% }0 t1 k
当 时,不宜采用GM(1,1); h8 U; S/ p/ U2 }7 p3 R6 h
在对深圳市人口总数变化情况的预测过程中, =-0.040597,因此可做短期和中长期的预测。' h, X6 U5 u6 g2 h' ?9 x! f
如果要考虑到多因素的联系和影响,此时我们不妨建立GM( 1, n) 模型。 GM( 1, N) 模型能模拟系统发展的动态过程,不但吸收了传统的灰色模型的建立,而且建立了多中改进的灰色模型,提高了预测精度。具体参考[5] ( C# ?0 d. o k" x; ]6.2 BP神经网络模型的优化、评价及推广4 n c3 j8 v' m* S* q0 q: O8 B
6.2.1 学习因子h 的优化! d4 O+ O+ y* M% C$ z
采用变步长法根据输出误差大小自动调整学习因子,来减少迭代次数和加快收敛速度。! W5 c/ L* h' c4 }' s
, 为调整步长,在0~1之间取值 9 ~( V$ p$ M& }6.2.2 隐含层节点数的优化+ M0 W% f$ c/ d) R0 L
隐含层节点数的多少对网络性能的影响较大,当隐含层节点数太多时,会导致网络学习时间过长,甚至不能收敛;而当隐含层节点数过小时,网络的容错能力差。利用逐步回归分析法并进行参数的显著性检验来动态删除一些线形相关的隐节点,节点删除标准:当由该节点出发指向下一层节点的所有权值和阈值均落于死区(通常取±0.1、±0.05等区间)之中,则该节点可删除。最佳隐含层节点数 可参考下面公式计算: $ [% g0 H; @+ |2 `# R: _: g . Y3 S8 N- p5 n' T& k
表示输入节点数; 表示输出节点数;表示介于1~10的常数。 ' X6 U h2 J1 f; U% t6.2.3 输入和输出神经元的确定% ]) `* @* {9 ~( O D) s
利用多元回归分析法对神经网络的输入参数进行处理,删除相关性强的输入参数,来减少输入节点数。. j/ ]% J7 C3 e6 T% {' s
6.2.4 运用BP神经网络进行人口预测的可行性 : @% c ?. }6 C: L# W+ g 一个好的人口预测模型首先应符合人口基本理论和数学建模要求,这是选择模型的关键。其次要保证模型数据可得,一致和可比性,在数据预测检验阶段应充分拟合原始数据,特别是有波动的数据,因为波动性数据往往蕴藏了系统重要信息。具有P个输入,Q个输出的BP网络可看作P维欧氏空间到Q维欧氏空间的一个非线性映射,含一个隐含层的BP网络可以逼近任何连续函数。BP网络的非线性映射与人口非线性特征是相近的,对于未知的人口动力学系统可通过神经网络来学习系统的表征量并进行预测,已有定理从数学上保证了网络用于时间序列预测的可行性。网络的输入向量和结构参数可由相空间重构技术予以确定, 同时BP网络的动态学习能力对人口波动性数据具有较强的识别和拟合能力,克服了以往人口预测模型剔除奇异值或划分阶段处理的缺陷。因此从模型映射性质, 输入变量的选择和波动性数据拟合等方面表明BP神经网络模型用于人口预测是可行的。用神经网络对人口历史数据进行分析拟合,是人口预测的有效方法。与传统的人口预测方法相比,将基于BP神经网络的时间序列预测方法用于人口预测,避免了繁琐的常规建模过程。神经网络模型良好的适应和自学习能力,使预测系统计算简单、灵活,运用计算机强大的组合能力,可以更好地实现人口分类预测和管理,大大提高人口预测效率和预测精度。 ( \ \$ T; j0 {, L4 Z7 [2 }6.2.5 BP神经网络的不足: # |' M% u" \) }8 M BP神经网络需要大量的样本数据用来训练和测试,当样本数量不够时,预测的误偏差很大。' L- R: D# w$ b9 ], W) w
针对这些问题,我们提出GM(1,1)和BP神经网络的组合模型,这样利用灰色系统理论具有所需要的样本数据少,原理简单,运算方便,短期预测精度高等优点,也发挥了神经网络并行计算,容错能力强,自适应能力强等优点。0 M Q9 _1 Z. q; A$ L
6.3 供需比评价法对医院床位的预测的优缺点* w- B# j2 x r% V+ G
6.3.1 供需评价法对医院床位的预测的优势 ( l4 z1 F' c0 m3 y3 y5 S- L卫生服务的公益福利性质也决定了不可能使市场机制在卫生资源的配置中起基础性作用。因为在医疗卫生领域市场机制的局限性突出表现在这个机制不能解决医疗卫生服务分配不公的问题,不能解决人人享有基本医疗保健问题,这个局限性是市场固有的,是无法克服的。所以在医疗卫生领域,资源的配置只有在政府的宏观调控下,辅以市场调节,二者有机结合的资源配置方式。宏观调控的基本内容就是根据医疗需求,对医疗资源的总量、功能、结构和布局进行调控,合理配置医疗资源,保持总供给与总需求的基本平衡。. f1 C" Q/ S! |
影响床位数的因素多而复杂,如人口数、人口年龄结构、经济水平、人均收入水平、居民健康状况、居民卫生服务需求、卫生服务利用、卫生服务能力等。其中,居民健康状况、卫生服务需求和利用是综合性指标,代表着医疗卫生服务的工作量,从而决定着床位的客观需要量。本文利用卫生服务调查中居民健康状况、居民卫生服务需要(需求)与利用以及卫生统计年鉴中卫生服务利用效率等数据,对深圳市全市床位的需要(需求)量进行测算,然后与实际床位供给数进行比较,求出供需比值,进行供需评价。此法具有以下的优点: 1 N) L% \! t4 p7 `6 L; o6 n2 n( P①按照深圳市居民的实际需要(需求)量来测算床位需要(需求)量,科学性和实用性较好;1 |, C; ^( V( }, n- K2 y( n L
②方法简单可行,可操作性强;, g: l6 H3 j4 K7 ?
③结果是定量的而非定性的,在床位资源供需平衡状态评价方面,提供了一个客观的量化标准,为总量控制提供依据。 $ K! r( g) a" ]9 \! ~" R; w' W6.3.2 供需评价法对医院床位的预测的劣势 0 O& K: O4 Z, N+ b5 n2 V7 c本法仅限于总量评价,而无法对各级各类医院床位的供需平衡状况进行客观的评价。& w9 }1 E# C, ^& `
6.3.3 对医疗资源预测的评价和改进) P5 C. e8 D& i ~8 e/ P
该模型考虑的是常住人口,而根据深圳市的人口现状,有大量的外来务工人员在深圳市务工,因而可以对该模型做进一步的改进,即把深圳市人口的中非户籍人口远远高于户籍人口这一现状考虑进去,并考虑流动人口的经济水平和实际就诊需求,对医疗需求的预测会更完善。; A4 E- }! s1 n& |/ J0 I, A( j
7. 我们的一些建议. R7 q, E9 l3 h
1.今后20年前后我国人口趋于年青化的发展态势,之后人口老年化的趋势逐渐显著,且成年群体的负担会越来越重,深圳市也不例外。鉴于此, 要加强发展基层的养老保险等社会保障事业,现在的年轻群体可以投入这样的组织来保障老年的生活,同时也减轻年轻一代的负担。 8 G6 Y" a( j; o+ r( V2.继续实施计划生育政策,促使人口健康、稳定发展,并利用教育,宣传等形式来。引导男女性别比的协调发展,如果按照上述的态势发展,势必会造成一系列严重的社会问题. & O2 x$ u, [% L1 n3 ?( ?: N6 b; _3.发挥深圳市当地的地区优势,合理调整甚至是的产业结构,创造就业机会,发展自己的经济,活跃市场,给上述的群体创造更多的就业和再就业机会。 1 t1 R+ o% x) i" R# f结 语:. P, d5 e& v% n
此组合模型将灰色预测与神经网络相结合,充分利用了灰色预测建模所需信息少、方法简单的特点和神经网络具有较强的非线性映射能力的特性,采用多层前馈网络预测模型和灰色预测GM(1,1)等维新息模型的预测值进行组合预测,同时针对BP算法易陷入局部极小的缺陷和GA易产生早熟收敛的问题,提出了一种GASA混合策略的神经网络权值学习方法,并将这种混合策略应用于BP神经网络中进行学习,从而提高了预测的精度。此组合模型简单、实用、 特别是在原始数据非常有限的情况下,可以得到相当精度的拟合数据,并能得到可靠的预测数据。 v' v' K X! V8 e
由于神经网络的功能之强大, 型式之多样,若能将其它网络形式同灰色预测相结合,则有可能进一步提高预测精度,并能在人口预测方面发挥更大的作用。! Z9 @* y! r$ z, v \- \
在参考宋健人口发展方程的基础上,我们提出了更切合深圳市人口特色的人口动力发展方程,在预测出深圳市未来十年的总人口的基础上,预测出了未来十年的人口结构,并基于此提出了生育模式和死亡模式。 ! }9 J, ?& \* u$ v B在预测床位的数量这一问题上,我们结合了深圳市的产业结构发展特点、外来务工人员较多、非户籍人口远远大于户籍人口的特点、深圳市人均可支配收入、居民健康状况、卫生服务需求等种种因素,以医疗服务需求法来预测深圳市未来十年全市的床位需要量、需求量以及疾病别的床位需求量,得出的数据比单纯使用历年数据所预测出的结果要精确得多。# _2 W% F9 z. ^0 \0 p3 @
在医疗资源稀缺的情况下,对于医疗资源配置的方式主要包括一下三种:以需求为基础的模式,以供给为基础的模式,以供给和需求相结合为基础的模式。但是随着人类社会的发展和进步、疾病谱的改变、医学模式的转变和人均期望寿命的延长等等,如何更好地体现医疗服务的公平性和可及性以及更好地配置医疗资源成为困扰宏观调控的又一课题。 9 W3 x& Q6 ]& R! d; H; s8. 参考文献 & x R+ L. |1 X5 M1 m, k2 v; H[1]Khotanzad A,Elaragal H and Lu Tsun_Liang. Combination of Artificial Neural-Network Forecasters for Prediction of Natural Gas Consumption[J]. IEEE Transactions on Neural Networks,2000,11(2):464-473. ( k" l1 n+ r. [1 r( ]/ m; G' I[2]赖红松,祝国瑞,董品杰.基于灰色预测和神经网络的人口预测[J].经济地理,2004,24(2):197-201; . P/ A) ~4 ~! W! G[3]汪璇,谢德体,吕家恪,武伟.集成GASA混合学习策略的BP神经网络优化研究[J].(2007),03(12); ) L6 A, w; O$ [) W/ R[4]邓聚龙.灰预测与灰决策[M].武汉:华中科技大学出版社,2002; ; A: T( a7 Y+ ]- V, _[5]深圳市卫生和人口计划生育委员会[EB\OL]. http://www.szhpfpc.gov.cn/view?f ... 032=menunews&nt ;+ j9 N" ?: o9 `+ m4 g
[6]深圳市统计局[EB\OL].http://www.sztj.com/main/xxgk/tjsj/tjgb/gmjjhshfzgb/ ; x9 h( ^% n( j( q[7]政务公开站点——卫生部政府信息公开专题[EB\OL].http://www.moh.gov.cn/sofpro/cms/previewjspfile/zwg % S( h; S5 w" r; }: R4 F9 `$ F. J[8]林安弟.吐鲁番地区医院床位医生配比标准研究[D].;) G3 Z6 X$ ]' O; w. t. g
[9]刘丽娜,我国医院卫生院床位配置情况及预测研究[D].山东大学.2007。! D+ W) [* q/ G5 N6 `; }: _
$ L/ T' o: C9 L( t4 w附录: 0 p) H8 ] A7 X8 O- o" B2 Z) M% T2 M附表1 2011-2020年深圳市各指标值预测 1 B4 b1 B! }+ o: ?' `4 i9 m& M* A单位 老龄化(老年人口比例)(%) 人均可支配收入增长速率(%) 第一产业增速(%) 第三产业增速(%)' A: r" C, `3 y5 Q5 q/ M
2011 0.0178 0.1270 -21.6090 11.08 ! t- ~! l- y# w& n% R, U. Y2012 0.0183 0.1150 -16.5183 10.62 , J1 S) B! _- N. H* |2013 0.019 0.0912 -19.2546 10.96 1 F+ _* S$ {4 ~2 e4 q2014 0.0198 0.1012 -15.9456 11.14# o9 W& E2 H) v
2015 0.0206 0.1037 -18.3001 11.99 3 A, n: e M3 w1 N2016 0.0214 0.1046 -22.9454 13.08/ d: g% t. B b, T" T9 B
2017 0.0222 0.0829 -20.4666 11.65 4 d8 O+ E& e" n5 L4 Q) f2018 0.0231 0.0983 -20.0182 11.65: Z% \' `" l. L4 d. ]
2019 0.0240 0.0887 -11.2366 10.16 $ X# H! c4 N# V& l2020 0.0249 0.0943 -3.0914 9.37, R4 p4 ]$ @9 c, C2 Z& o+ T
7 z: X# e% a9 D! C( V5 g' l
(1) GM(1,1) 灰色系统C语言源程序清单: 2 h; s1 H, v y! y8 g# g#include<stdio.h>* g8 T' s, p6 r9 P. F- D/ p2 Y+ v
#include<math.h>1 f# I* ?4 {' S, z5 K
#define N 100+ M: O/ b: W; g8 l1 j7 V
void main()$ m) ?4 n! F- P0 q
{7 ?7 Y4 B' w2 |1 V" r+ E) V1 W7 Y
int t0,tn,t,n,i,m; ' G/ h5 M, G1 J( a# F( r& c float e[N],q[N],z,z11,z12,z21,z22,c1,c2,a0,p,u,yy,y,s1,s2,g0,g; ' x: S/ p' z2 n" P6 m' H9 Z float y1[N-1],h1[N],h0[N],h4[N],r[N-1],z1[N-1],a[N],a1[N];0 z5 s( z/ Q, L
float z2,v,s11,s12,s21,s22,ee,l1,l2,c3,o; 1 x* |7 c; |5 }! A1 Q , C# p, v# @6 i% M/ H
z=0; . q' d+ P5 U, {# D" | z11=0;4 H* B, D! F& E4 I$ ^. V q; M5 D
z12=0; ' ~; [2 s6 c& {2 ]7 t8 t& d z21=0;8 ^; d; i6 c! P6 G6 ^8 m8 e% e3 W# C
z22=0; ' v5 H+ @ ]. X+ q( I u a0=0; : A& s, u6 A( T9 o8 O" q' Q p=0;8 e' E& m' @* B; ^ c1 r b: L
u=0;5 |- R) O& h1 l4 C
printf("===========================GM(1,1)===========================\n"); ) P( {( ~8 c5 y- ` K, ] printf("请输入起始年份:");/ h5 ]0 s. V5 s$ o/ l
scanf("%d",&t0); 0 R% Y, t0 Y5 u- ~+ n( C, T printf("请输入终止年份:"); C5 H8 M( a7 H. D# Z* p. X. p
scanf("%d",&tn);% ~$ ^ a5 I y7 L8 q
n=tn-t0+1;1 M+ k" N! x! U+ O0 O' E
for(i=0;i<n;i++) 9 j0 r. v" Q: e; ] { * R/ Q+ v6 X f) |2 X printf("请输入%d个数据:",i+1);% | m& K: Y: E
scanf("%f",&a);3 y& V0 j; k( v9 E, m% L
} 3 B$ U8 L1 G# H, \3 k0 _ m=1; : o0 Q- T) j* z5 a& K+ s: F while(m>0)! t$ x9 S, d' a, F
{ + p# g& X2 [9 M( j, I& D, D for(i=1;i<n;i++)3 F2 \ G% K$ Y/ ]& M
{" P6 W6 q' \5 f" w! u8 v
r[i-1]=a[i-1]/a; ! }7 i4 u: z3 w& O, v2 k } ; O1 s# ?+ |/ L' e for(i=0;i<n-1;i++) / E) z; U' d4 `9 B8 E { 0 n# A& y( x- Y" O1 m2 O: A// printf("r[%d]:%f\n",i,r);1 Z! P1 P0 O( e9 T3 X; v
} % Y* C( w/ r/ q; a + \! P( T$ E' ?% j5 s; _
m=0; ; d% L3 t1 ]0 z# e. a- k/ S2 K( ? v=-2/(float)(n+1); . H. O4 }8 ?5 f% k% [, O l1=pow(2.7183,v); ! z) `7 N8 Y4 M; J0 j l2=pow(2.7183,-v);$ a0 U) i! A& A; h W7 W. }
0 c3 r! p' L; X3 g. E0 B% B
for(i=0;i<n-1;i++) q( n9 P% L& s$ a4 P { 5 D: l* F& m" W1 a0 d1 z# J
if(r>l2||r<l1)+ ~0 `6 \: g! m7 [: f6 _5 ~
{3 r, B; E# a9 K: j0 M& g4 |* v
printf("r[%d]:%f\n",i,r);, i/ {& |2 n/ l& r8 Q; F
printf("11");$ X2 b1 z: A* O2 M* |
m=1;5 F: P i0 m9 ]3 l7 d+ E2 {5 i9 ~
printf("需要调整,请输入调整值:"); 0 e l; t0 ?+ [% J scanf("%f",&c3); ! d X& W% A, k8 j1 Y' c for(i=0;i<n;i++) : Y$ G9 b$ B7 M' n# U {' F" W: H0 p% w; E- }
a=a+c3; ! O/ x( Q6 p8 I, @0 j z" I }- h& G' m7 u8 A B' ?; P' C4 f: r
break;1 J% I% y7 A" M3 b$ V! Z, s; m
8 c# W( @" h' V' y) b( [
}: Z8 M, G% s4 e0 w1 |* S% r. ^0 i0 ^
}1 M S% y0 }; q& M
}$ N1 q' x+ @: N+ @7 ]7 C, V2 ^( A; n0 r
a1[0]=a[0];. y' ?3 D' Y$ ^
for(i=1;i<n;i++) # t& O- E' i f% W/ G8 }9 Z/ F {' u8 h; ]" l6 }! k
a1=a1[i-1]+a;& r6 w1 {6 }. B( T, }# @) X" }( r9 @
// printf("a1 %f \n",a1); //累和 6 X5 u+ x2 X5 H- Q/ } }0 u- b+ S; ]0 e {6 a# c [
# x# e6 z# W* q- E) ]
for(i=1;i<n;i++)5 g: f9 D7 l8 C( E
{ . |1 b4 `5 Z: J7 Z% t y1[i-1]=a; % n( o8 ^5 ^: Y5 P } $ i0 T3 | |7 e% r for(i=0;i<n-1;i++) 7 M+ B1 V( b6 S { 5 Q) ^! B: x7 _- e4 [" u" k// printf("y %f \n",y1);//缺原始数据第一个元素 X& O( r5 t) @. }7 V& A/ d% g
}7 x. x0 }) K+ E2 q; h6 z
for(i=0;i<n-1;i++) 7 }7 W: O5 V% R5 F { 1 e, i& ^1 Z" X7 U z1=(a1+a1[i+1])*-1/2;0 W) U2 M' e" p2 Y' @. e9 W
}! S- Q$ Z9 G4 ] f& t3 d/ A
for(i=0;i<n-1;i++)* Z6 ?% {# o; L+ y
{ 2 L7 I6 W8 `) D% o// printf("z:%f \n",z1);// 求1/2(相邻两数和) * |5 ?3 h' J$ b& S } 1 ~% S7 o: p0 E) Z* u for(i=0;i<n-1;i++) + ?1 x- l3 e' Y7 x {, s1 J1 _5 u/ Q
z11+=z1*z1;4 n: Y9 ?0 t! `0 \' y) b
z12+=z1; ) w' S1 G, q6 z+ ]: ?' N } 3 I" u& k' x' j I z22=n-1; 0 ]' `* d4 K3 ? z21=z12; + P' {3 o" F. m6 _// printf("z矩阵:\n");3 U. e+ Z4 d8 Z, }! t9 t
// printf("%f %f\n",z11,z12); 4 P& t) R1 Z( |9 H4 y// printf("%f %f",z21,z22);) s0 b2 o% [% M
z2=z11*z22-z12*z21; " V* I- K( Q' W' F% _// printf("行列式:%f",z2); ' f( C! W1 J2 G$ H( h' N s11=z22/z2;% Q1 L8 S' y+ e7 h6 s# Z+ r+ \
s12=-z12/z2; , \" K: ]9 G0 m+ Y% p s22=z11/z2; ! @% q7 |# p# @2 G! Z' Y s21=-z21/z2;" t6 a' Z9 P( v5 a
// printf("\n"); / H& F3 s5 X$ E: ]' N, B$ M// printf("%f %f\n",s11,s12); n5 d5 H: Q/ t8 s/ ?, G
// printf("%f %f",s21,s22); / t1 E7 `% t. K1 G% \! { c1=0;6 b, H+ X5 M& q
c2=0; % U: ?" p! _9 h& n8 S for(i=0;i<n-1;i++) / h u# \: q) V" R+ w3 a* [ { ! @ ~7 b+ ?: b7 h# z c2=c2+y1;- Q! B1 k4 t: O6 {! A& W6 V/ n
c1=c1+z1*y1;- f3 B! @ e5 A" H$ g. Z
}6 K" c r6 ^6 ~ H" \
// printf("c1:%f c2:%f",c1,c2);9 ^$ s \! b( n/ J
# f3 m9 U+ s+ |$ A
a0=s11*c1+s12*c2;% z7 F& s& G4 d& U- Y' n
u=s21*c1+s22*c2; x% q0 p% ?5 E; \0 g' l// printf("a=%f u=%f\n",a0,u);1 P. M/ @) Q* A* l" M9 U5 @4 E
for(i=0;i<n;i++)# E6 @# H8 f* _( o+ u
{/ P/ @) g. s9 f
h1=(a[1]-u/a0)*exp(-a0*i)+u/a0;2 ?) T6 H* ?" z7 w' _6 f" v
} + c; U- ?. g# z0 Q" ?6 Z) o& t h1[0]=a[0];3 k* V, L2 C, y) P" f* C" ^' V
h0[0]=a[0]; ( I* @) R1 L. M& D5 } for(i=1;i<n;i++) M$ a" i/ B; {3 \. `4 U { , P& x1 ]) c- g h0=h1-h1[i-1]; 5 p2 w5 N+ o; [, I/ R } 9 n% F3 P {' ~( ]7 h; z9 X for(i=0;i<n;i++) , j0 l4 `0 T" @* r, Y { ; u5 K# N2 p8 C' {/ q// printf("预测:%f\n",h0); //预测值! X1 T3 C' Q& ~ ]% Z, k: {4 s
} ( N0 N" e% H0 c V1 X8 u for(i=0;i<n;i++). q# P2 {; r+ ?. s' K
{ # j$ e( h R! h/ `$ r) [3 P& ] e=a-h0; . K, l. u* n6 S% Z& p } / t1 d m. M7 V6 K$ g for(i=0;i<n;i++) h: C2 U$ z1 h$ j* C { 2 t# A/ }) ^( w4 c( u( D! ?' H q=e/a; 8 H5 t0 `. y# z } + O+ O R- q1 g' w for(i=0;i<n;i++)# Z9 W( W3 V$ k4 E* d
{; n; |5 E; C2 F, ^7 @' _5 x1 P
// printf("e(%d)=%f\t\tq(%d)=%f\n",i,e,i,q); //--------e为残差! q相对误差!、$ L3 I# R9 O% y* g, S
} / |" ^ W3 V! I- t# L; i yy=0; & h* [2 x9 V/ ` G+ }' E; L& K for(i=0;i<n;i++) 9 C4 U6 H/ f8 e" o0 k {* O' k: p# H& r4 K/ M
yy+=a;1 Q: T! A, ?& f& M# K* w; @
} 3 d. C( c8 H# w) y yy=yy/n;1 J' Y( _' W7 T3 B a& L5 m8 X& e
y=0;4 J3 X, B7 r; i
for(i=0;i<n;i++) 9 X1 U8 W2 O& w { $ e$ W1 j8 S: o z7 ?* T1 U1 g) H y+=e;6 v. A, o" P4 F' @& K' r
}! ]+ x* s- C1 Y$ a0 V7 M6 s# ?
y=y/n; , [, m9 d/ ~2 n$ s// printf("平均数:y:%f e:%f\n",yy,y);//原始数据的平均数 : Z2 L3 K0 {6 b8 ` ee=0; 4 j ^8 n: y. t1 j+ v; q for(i=0;i<n;i++)" b7 y7 r% g$ ?4 @0 V
{; y' B2 K% y6 K( J9 ?. P
ee+=(a-yy)*(a-yy); # a0 B3 l- w3 T }0 A; u& P9 U( m4 e" p
s1=ee/(float)n; * f" h1 t) `+ y7 V8 x- `// printf("%f ,%d\n",s1,n); 7 v% a$ g( A$ e2 x. g s1=sqrt(s1); ) q) k8 r& k! z/ L. O+ Q// printf("s1:%f\n",s1);//---------------------s1 7 i1 W) A, `5 C m9 W( a ee=0; ( _7 U c" n, R& y6 q9 P for(i=0;i<n;i++)4 x$ G* T3 b- i$ C& L* h
{ 8 k) N$ q- [! y2 [% [3 D ee+=(e-y)*(e-y);3 |/ J; ` M9 J6 V. s" X
}! E$ Z' U1 Z, F+ f" v
s2=ee/(float)n; 7 P4 J7 s+ ^) {# y4 Z' X8 d! o// printf("%f ,%d\n",s2,n); 3 W T& z6 _; s# K7 V s2=sqrt(s2);0 `" |$ r, r3 W8 A* a% e
// printf("s2:%f\n",s2);//---------------------s2" a( m# d/ t: H9 f$ ?
ee=s2/s1;! ^( U6 S, G5 s8 z5 Q" G9 l% a
// printf("均方差比值:%f",ee);//-------------ee均方差比值' n7 T8 [! Z' H' H
o=0; 5 e" I, {4 W# [4 j. h4 k. u2 Q# y; g1 U" D$ u for(i=0;i<n;i++) ~' F8 o8 d' z* ~
{ 5 Q" r+ I1 Z [3 Z' j% g if((y-0.6745*s1)<e<(y+0.6745*s1)) 8 w; T; @' m! g( w, u" y { : q& W. b ?; M ~( e, I' G o++; ! r0 ^/ p4 V) @2 a } : t* C1 S2 j: s, ?- T$ }; g2 \7 H' ~# ~8 d
} : \& w& M6 O& G* p7 e4 L- i' I% z0 f. w o=o/(float)n; * \- ?4 @/ \) p+ e// printf("小误差概率为:%lf\n",o);//----------o 小误差概率 8 L0 G& e( [3 l+ h+ z& H. d printf("请输入预测终止年份:"); ) g9 f8 ~. S! H6 k scanf("%d",&t);/ Q6 C# b6 k( N- B0 N% x3 m
t=t-tn; " l0 L$ z. \$ b, y( } g0=(a[1]-u/a0)*exp(-a0*n)+u/a0; ) w U& Z" M4 C9 f" u3 A$ I0 F! l h4[0]=g0-a1[n-1];* s) w8 P- S) F% h8 B0 P, |" J" w2 C
for(i=0;i<t-1;i++) & A& ?; ]6 y- i# C" D {; \( V$ { J9 x! }) T0 C1 P# q
g=(a[1]-u/a0)*exp(-a0*(n+i+1))+u/a0;& v a8 t& L. D3 E: q4 \
h4[i+1]=g-g0;* s- I" n: Y( O% X% y. r
g0=g;% l7 z+ M0 V! Y8 s1 C
}// 预测 ; T- h& D8 E( J/ _ printf("===============================结果==============================\n"); 3 Z* |. a( x. h$ S6 S" x printf("序号:"); 7 k2 h9 V, L, j for(i=0;i<n+t;i++) + c9 ^1 ]$ W c$ G! n7 C( ` {7 A4 L4 f4 ^) T3 S9 [3 {
printf("%8d",i+1);% V" z8 n( L0 k. D; }3 w
} M, e, y2 V5 o" ^3 F9 z! w
printf("\n"); * w) F6 L y0 G. ]$ \8 R printf("年份:"); 2 l1 u# k" k1 \& s: E for(i=0;i<n+t;i++) 3 r, N' T; z$ o7 M { N" K: y$ t; |" C* C5 W printf("%8d",t0+i); + I& d# w% u8 u } ) a& Q$ f/ \7 E$ T# ? printf("\n"); Y7 g* w" V% |0 C6 Q, g9 U printf("原始:"); 5 h3 B5 s: a T+ @" L( L3 f a for(i=0;i<n;i++) 8 N' j9 G5 T8 s# ` { 5 R# v0 R/ F$ ]+ K% l# p printf("%8.4f",a); : K$ E8 W4 h' m } # Y" }5 n3 v8 b/ S+ n0 n8 ? printf("\n"); 9 x$ ^2 H, N# Y+ P printf("预测:"); ) \' N% v8 G, ~' s1 V8 z1 d for(i=0;i<n;i++) ; b( x2 L0 x9 ^ { : U" Z, _- f+ {, F9 Z% q: K' h printf("%8.4f",h0);" C' c, [5 z/ A; ^0 l2 y
}& d' v4 m! p) Z% i
for(i=0;i<t;i++)0 U9 ]; ^( M, H( u3 V
{ + N" ]/ z6 K& }) E printf("%8.4f",h4); # X3 Z E, B8 { F7 I/ d } . w0 g& f" W7 J; u1 x8 H printf("\n");# Y( C) U- ]5 g4 S( h2 }
printf("残差:"); 5 Z: R0 }) c2 I, Z- s for(i=0;i<n;i++)# E% p) V7 m7 f# Y2 a* U0 x4 [
{ * F0 B8 O1 C& v printf("%8.4f",e); , q2 s/ _1 y7 w# V- ?( c9 L } 6 c, Y2 H6 z& D, P# F printf("\n");6 y2 O2 {! F; n
printf("均方差比值:");+ J- Y* W+ T7 j3 { a4 f3 z
printf("\t\t%f",ee); 3 v% q" |2 k, L4 ]$ s$ U printf("\n"); & U7 u e& {9 J5 m6 n printf("小概率:");( _; H" q& Z6 ~0 M
printf("\t\t%f",o); 9 h6 C! j. Z. u/ u7 `$ x printf("\n");! W8 a V3 X% F. c k8 Z# k
printf("==============================精度评价==========================="); / q9 r+ ?6 K* }; W* k: T" T6 w- _ `3 D8 R- |7 B" D
printf("\n");( i) ^# Z9 f0 L3 Z, s
if(ee<0.35&&o>0.95)& C8 M) c, B9 r
printf("\t模型预测精度好!");" S2 V4 ~8 g* Y( E
else if(ee<0.5&&o>0.8) 1 l& A# a- `+ s+ A3 P printf("\t模型预测精度一般!"); 2 x: C: f9 O- F else if(ee<0.65&&o>0.7)& q* J" O2 Y/ a! d
printf("\t模型预测精度勉强合格!");! |: |5 v" X* w; |$ m3 U
else printf("\t模型预测精度不好");, i1 ]% P0 @# S! g8 q
printf("\n");) n1 O1 b# @6 r1 E! d/ T* u
printf("==============================预测结束===========================");6 P* v+ ^7 z* k' v* t# j2 t
printf("\n"); % j# M' f- C$ h: h) v2 ]5 { printf("\n");$ X1 L3 _5 d$ O- G }3 Q5 T
printf("\n"); 2 x1 k' X: ^1 Z. {) B$ e4 ?' E printf("\n");3 G+ I. M+ h2 }/ w1 I
1 e! D: n9 D1 W0 J* e1 e. C+ k" g$ V) |) o( G
scanf("%f",&o);) s' O* [; i( d$ t
$ t) v4 j% d' k/ A! P+ x0 Q$ M6 C% G}) [5 |3 u- w3 r
(2)基于GASA混合学习策略的BP神经网络的C语言源程序清单:) C0 Q9 e6 W O, A i
#include<stdio.h>$ j2 c4 f4 i* \
#include<stdlib.h> ' x* b* m7 C, j- `% }' \% G( h#include<math.h>1 \+ S5 u7 ^9 `( y
#define M 10 Y; c# Y0 k0 I5 ~3 l#define N 16 $ K* ^& ?0 f, a5 u. e) `! U1 b#define m 100 T- k9 \* w+ c4 p$ l- I+ S, d
#define jingdu 2000& ]3 @1 r/ I7 `
#define jingdu1 1000; B% g3 [* y: ?4 t' @ g6 g) h. _
#define jingdu2 0.1 : X; _) d& S% q: @" A* ?2 { : g! B, P! Q, L/ R0 hconst double e=2.71828; ) M; y; B n- z; {+ M2 o! @, E! T$ ^) J6 x$ Q7 W
float in[N]; / [& n4 X8 F R* R# l, ]% ^6 Kfloat out[N];2 w8 r ~- d A& f1 C6 H. X9 x
float get[m]; " ]' |: G# N. | 6 O8 C" y2 j% H5 n: Q7 H) H# Z0 Y 4 X" R$ s# X$ i1 D8 a9 Sfloat one[8][M][N];- D/ k2 a8 b1 i y
float two[8][N][m];, _( L8 z- @4 q1 M/ S
typedef struct9 x, S9 q% B) ?
{ 4 L: ?9 Y4 b/ C float yi[M][N]; ) i6 P1 f- ^0 `( F7 B& n* C( L float er[N][m]; * x( l, g1 y5 _2 M% L' v* V1 X2 d float fi; % j" p( }+ [1 Z/ O/ G float Fi; + K7 x |. C( ]% T}dui;, V) j8 H( L& N. k: ]" G, z
dui du[64];" e, H- Q6 s8 b/ r; I
dui du1[64];1 D6 l2 L7 \: V {# L4 w7 Z5 R( A
dui du2;8 S4 J* O% n/ q, g# }
dui rao; , C' s1 c9 q/ M! G% j# D' Idui gd;5 L" N Q3 N0 Y
* }4 m2 h* C- [" F, Q5 n
float T=100; 6 a5 c1 X. R2 |( z2 w7 q , z8 U5 j- X* m( c6 B7 m% Z0 _( _, Ytypedef struct * a: d# {8 k0 l$ w{ 9 Z) H, f/ f& J- |) r float year;8 M B6 G! V6 P ^3 c! A
float num; , S" A: P' ^5 u}Data; : A" V* r2 X) \Data data[10];" a; P7 r+ u! B3 t' H
2 Z4 M' z5 g5 Y3 R0 s: n; b4 ~/ c # H/ U+ d! _. `6 \ mvoid chushihua() i0 e. o3 S% z. T. L+ {$ N; S{ ) [' P" P0 x+ b0 L* Z0 ?! |! f for(int i=0;i<8;i++) , k/ P4 y' m; B' y' F { ; _1 e8 A* Q+ ` for(int j=0;j<M;j++) / J3 d2 L, b8 _: P {( R1 z- G4 ^0 L& y6 K
for(int k=0;k<N;k++), k8 R# f" n" Y' {7 l- ?* S6 i
{ : J5 m. Z" x0 w0 B0 w3 A int h=rand()%700; 5 Z6 L5 v/ j9 _ int w=rand()%10000; 9 i1 [) Q. x# b float q;- t4 [" Z {5 a
q=(float)h/10000;3 V4 F( K9 r5 Y `0 T8 |1 e
q=q+(float)w/10000/10000;# o1 @5 }6 P$ Y7 t+ C
one[j][k]=0.0375-q;// * G/ v* {4 E4 S+ A' Q/ D1 Y h=0; ; ~8 C8 l9 G9 S7 M. Y2 z }. `# N: F5 m3 U9 S O
}9 x7 Q8 N) |& K* ~+ o: L% V8 _
} & b( p4 N( d, k9 y, a; C: y& k . @7 f' F2 k; D3 y for(i=0;i<8;i++)# q5 \7 D6 l& q. r7 t
{ 8 v, p$ N$ K% \4 k P6 x for(int j=0;j<N;j++). t% d1 v1 E0 u) j( ~
{ / t: g5 X/ W( [0 _$ G for(int k=0;k<m;k++) 9 s+ U/ z/ `5 |7 ~5 \2 p { . v0 E, `0 D+ y' M int h=rand()%24; ( t. d2 h5 I. h- K) w& H2 u int w=rand()%1000; & L) f% L. g" ~' u$ \ float q;" n/ X7 ?0 [2 t! C. H. x
q=(float)h/1000+(float)w/1000/1000; , b4 t3 p1 ~) a7 U2 D( B- A9 n two[j][k]=q; $ _8 M6 b7 D0 F' I: @- n h=0; // 8 G' [5 y( j' K5 t" `& Z } 0 `( X6 `, [2 | `; M }6 E }) a6 C9 f5 l* F" w* l
} ! h( C7 V. f9 `# w# s2 ^; z+ k* B! V for(i=0;i<64;i++)- q \8 J+ z( U5 |: V; z& g+ ]
{ int h=i/8; % w7 D- A$ c1 x for(int j=0;j<M;j++)" }1 n' s' D& q+ [
{8 \4 {" ^, p. |$ l. h% r7 u( K
for(int k=0;k<N;k++) 2 g. X4 X6 `; k# S) C6 k! J0 g { 5 E D; C$ R3 s3 ~% X/ m& G9 e du.yi[j][k]=one[h][j][k];/ N- _# f* f Y7 h. r* n; n
}, n8 c. y8 }3 |- N3 a3 c2 f# l
} ! j: r7 b+ x& V0 [. O int z=i%8;: r, j7 Z; W n# I, U
for(j=0;j<N;j++) : s3 h$ N e$ m. } {* h3 X6 V+ o' ?; W# A
for(int k=0;k<m;k++) 2 R" G0 K; ?' |3 | { 7 U5 l6 S4 {! G( [0 L5 e5 c- [' x0 ^ du.er[j][k]=two[z][j][k]; / @, W: N) Y5 c! O6 m( e# _ }, V0 v( v5 o# m/ z# n8 G. ?
}7 R! N2 u# q L8 y1 N5 c0 h
# l% D) a7 L# o; j
} w( n( X9 u: I- \1 T8 R3 [; U5 l5 s) y + {: S2 B6 }9 W9 m/* for(i=0;i<10;i++) # e# _! L7 A; R( O( z {/ @2 v& b" C/ I- {9 P4 J% z
data.year=i;. F* s, V6 I7 f7 ?
printf("请输入第%d个数据:",i+1); ( M# \' h- ?! C+ Y' q% N scanf("%f",&data.num); 0 Z' |7 ~0 }* {% b6 C) R }*/6 E9 d! @) ^' P! q
data[0].year=1;+ `* R' C7 V+ V" t- V2 g. C; V% _! b
data[0].num=0.1106; ) @ k3 [8 ~. q data[1].year=2; - ?( K) {7 g4 U data[1].num=0.1879; - i! W. ?9 K# d# a G data[2].year=3; , I% g; j* X0 k G data[2].num=0.3153; N% x# f+ N0 D. j' V% o data[3].year=4;" p/ p) |5 \) ~1 l
data[3].num=0.4591; 5 D: x& R7 t4 P9 F data[4].year=5;9 W4 {% b ?4 e H! c s X1 f0 P
data[4].num=0.5274; , K% d3 L% ]; `* @, r data[5].year=6;8 _) ]3 k8 S% g2 K6 M/ j3 Y9 D
data[5].num=0.5907;. |* r5 I' C0 E9 U, u0 x
data[6].year=7; % u- x4 a9 T/ q. O& Q+ C. h v data[6].num=0.6748;- R+ J& y d, d
data[7].year=8;! t) M- G, m( j( w. f
data[7].num=0.7733;7 y9 |0 _4 W/ i" [
data[8].year=9;; ^$ n- Z _8 O1 ^% o! Z
data[8].num=0.8713; - Z, C5 y2 i6 B; E* | data[9].year=10; 1 Q; [: z4 t) z' s data[9].num=1.0000; % p) ~. E6 C2 Z8 s 8 s& r0 ]: h6 Z! O4 D) I3 M}4 X1 W- r3 ^ Y( V2 o2 n
( \) b# s0 X6 i8 f
0 m; r- D" F5 |/ L2 _" ]: L , H( v& x7 g, E4 y- e- n9 k! E" ]* M/ p1 e6 T# D' {, a' ]- r2 B
' P; ~# `; H+ |; K 4 p0 ~( O- ]6 I! ?0 ~, g' n 2 K# @" _8 o% i Zvoid yuce(dui h)1 N# Z; D! |) c
{ 7 [7 ^8 ?0 Y2 n/ {3 K float z,g; / M; [& d: c' s7 L7 f for(int i=0;i<N;i++)3 _/ O' A" A* Q! L
{ g=0; E' w! b" Q+ l* ?2 B) r. H4 h for(int j=0;j<M;j++); e' u- _9 o: C
{ ; c+ q: n8 A3 R# V* u g=g+(j+1)*h.yi[j];& h [- f% v3 h. B
} @1 ^; N' X1 M9 r: m) ]/ m6 k3 l; Y
g% _5 a3 w* S* v: y in=g; , k; T/ R* r% T) d/ \( h }4 u7 ]; o+ q3 R* c6 I1 w. @
! a9 \, i3 }6 |- x' t) _8 O0 r
for(i=0;i<N;i++)- f1 x& m0 ?. \/ `" W2 G
{ . M h2 |; g% I. F* ~ z=in;# I3 Q" y% B. ?* P) k, R+ E
z=pow(e,z); # r/ u4 l: |3 ~0 t z=1/z;$ _; b7 h5 p2 z# y0 g" S% E# G
z=1+z;" F! Q$ a: q' P+ H6 z* K3 W
z=1/z; ' J0 ]/ k1 S, z$ D$ p+ L/ k out=z;8 B1 r& }. Y4 r/ F# ]8 ?9 N
} ' i. Q# s N" C 3 M) d2 M* P2 R2 a+ F% ]; y4 N" ^9 m( H for(i=0;i<m;i++)6 Z/ P$ F% j9 q
{ g=0; " H) E- I- E0 k% v" I- @ for(int j=0;j<N;j++)1 S* T) ?/ a6 L# C# {7 a7 [+ [/ }
{ : a# K4 [( @) q' F1 y
g=g+out[j]*h.er[j];! i: {+ s( X' J/ l5 |: B! M4 D
! Q9 U; T& T$ E: p% [ } + E: K) ^( a; |& T. _! Z9 h get=g*10; ' v( B: \: i+ K" V4 I, x, I! F } 4 K1 G+ Y v3 m* F. Z: e! d" Y7 n for(i=0;i<m;i++) 1 T" o0 S2 c) j/ P1 w { 8 h' d2 y4 I. P' } printf("get:%f\n",get);1 A& {! |; m* {& I8 Q8 T, I( t
} $ L' H) G0 s' b- B1 B6 W scanf("%f",&z); ' {4 i0 s0 `9 H' L C} 7 M7 y$ }4 k Zfloat shiyingdu(dui h): ]6 ]3 c( K& M" {
{ 9 \0 v) S0 P2 U+ q8 v6 `! X float Fi=0;8 j$ S" ~8 g' {' L7 A( C' k' U$ u" y
float E=0; # W, s( _/ l* g! y3 P9 m float z=0;* M0 h( z7 Q! ^" W
float g=0; 6 ?( ?+ N |5 d- h, L float in[N];+ Z- N/ P8 B8 H: q/ D+ \2 T# [
float get[m];# j$ i6 N8 d& l4 ^
float out[N];9 v1 q0 n( J1 G/ V# y! q$ v
for(int i=0;i<N;i++)( ~* `8 q4 p1 J& t+ A
{ ! o9 `# n* m7 N% d, ^5 c8 o* C for(int j=0;j<M;j++) - I; n/ V: K( X+ g# _ { / `+ G9 g9 D: [5 C+ V: L, w g=g+data[j].year*h.yi[j]; : d0 W! h4 `7 g! i8 g$ W }0 b# _+ j% q4 G, M
in=g; 4 `8 R% C! }5 `5 x N ) _" ]& Q E, F4 u3 y5 \ } ! U7 h0 J; @( N8 U& z) k$ ?2 d6 b9 j) W( H
9 O. d) ^) f4 ~, y! ^- ^
for(i=0;i<N;i++)9 S4 Y% K8 }. x: _. ?1 @' m5 K( d
{8 r$ @9 ]" V4 G2 x! m
z=in;+ T4 B1 ~4 K8 ~, f/ q
z=pow(e,z);& `; l* K2 L6 T* B
z=1/z;4 \$ p: q: Z3 P! I3 _1 I$ S+ g
z=1+z; g) W ?; L/ V; f+ [" @! H \ z=1/z; 7 X4 m3 D$ ?7 r# t) s out=z;1 o7 m$ |" H( s$ q( ?# P4 O
}9 f5 D5 N( U$ P S; p; J# B
% f; b( E1 Y% H; |& p, t8 s W
for(i=0;i<m;i++) ! A9 h) e% }" ~, L6 D; k% M; ` { g=0;/ Z. h% w, ^: w' n- x6 `
for(int j=0;j<N;j++), ?9 ]: p! p8 C0 C. ^: k. a
{ . s3 l' @0 K3 f3 O g=g+out[j]*h.er[j];8 y: D* D) F" _
}) }, K! F, M" G6 P- I
get=g; , F) N/ ~6 P) x } ! H# ?8 |# C7 o: V2 e/ N( o5 _; j6 [9 G9 B