东三省二等奖论文
深圳市人口与医疗需求预测摘要
本文是一个如何准确预测深圳市人口数量和年龄结构,并结合深圳市疾病别的患病情况,来预测深圳市未来十年医疗床位需求的问题。以概率论和数理统计为基础,我们建立了基于灰色预测和神经网络的组合模型并结合人口动力发展方程来做出比较精确的预测。
针对问题(1),即深圳市未来十年的总人口预测,我们从《深圳市统计年鉴》上搜集的部分数据,利用灰色预测建模所需信息少、方案简单的特点和神经网络具有较强的非线性映射能力的特征,提出一种基于灰色预测和神经网络的人口预测方案。首先对人口规模的灰色预测GM(1,1)等维新息模型预测,然后再用优化的BP神经网络对GM(1,1)模型的预测值进行组合预测以作为其最终的预测值,以获得更高的预测精度。
针对问题(2),即深圳市全市的医疗床位需求预测,我们根据历年的出生率、死亡率、总和生育率等指标,提出了人口动力发展方程,来预测深圳市未来的人口年龄结构。
针对问题(3),即不同疾病在不同机构的床位需求,我们选取了高血压和分娩这两种具有代表性的疾病,按卫生部推荐的卫生服务需求量法进行卫生资源配置标准的测算,我们倾向于从提高和促进人群健康水平的高度和卫生资源公平与效率的角度,确定区域卫生资源的数量、质量、结构、层次、布局以及发展速度与规模,并结合了深圳市的人均可支配收入、产业结构的调整所带来的影响以及居民对不同医疗机构的选取指标来作出预测,而不是仅仅站在卫生机构生存和发展的立场上加以考虑。
关键词:GM(1,1)灰色预测 人工神经网络 遗传模拟退火算法(GASA) 卫生服务需求法
1. 问题的重述
1.1 问题背景
深圳是我国经济发展最快的城市之一,30多年来,卫生事业取得了长足发展,形成了市、区及社区医疗服务系统,较好地解决了现有人口的就医问题。
根据深圳市第六次人口普查的数据,“深圳常住人口十年来年均增长3.98%,低于上一个十年(1990-2000)6.34%的增长,但仍快于全国(0.57%)、全省(1.90%)的平均水平。”
过去十年,深圳人口仍增长较快,主要原因有两个:一是人口流入量较大。十年来,深圳经济保持较高增速,提供了较多的就业岗位,吸引了大量市外人员到深圳工作和生活。深圳常住人口中,约有798万人是非户籍人口,占常住总人口的77%;二是户籍人口增长较快。十年间,深圳采取多项措施,降低了入户门槛,加快了户籍人口增长步伐。普查登记的户籍人口达251.03万人(未剔除流出市外半年以上人口),与第五次全国人口普查的121.48万人相比,10年共增加了130万人,增长1.1倍,年平均增加13万人,年平均增长7.53%。老年人口占总人口比例呈正增长趋势。因为深圳市是我国改革开放以后首批开始发展的新型城市,建市至今将近30年,人口逐渐凸显老龄化趋势。人口的增长,尤其是人口老龄化的加剧,必然导致现有的医疗资源的不足。国内外有关研究表明,人均医疗资源的需求与不同年龄的人群有关,一般情况下,60岁以上年龄组的医疗需求是60岁以下人群的3~5倍。由于老年人口是发病率和患病率最高的人群,所以老年人口的增加,意味着医疗卫生需求大幅增加。未来的医疗需求与人口结构、数量和经济发展等因素相关,合理预测能使医疗设施建设正确匹配未来人口健康保障需求,是保证深圳社会经济可持续发展的重要条件。人口预测是否科学准确,直接关系到其总体规划方案是否合理和实用。
对深圳市未来人口的准确预测,能够为深圳市医疗资源的合理、有效配置提供科学依据,这对加速推进深圳市的经济发展和全市消费有效需求的利用有着极为重要的现实意义。因此,根据已有数据,运用数学建模的方法,对深圳市人口数量和结构做出分析和预测,进而分析深圳市的医疗资源(主要是床位)的需求是一个重要问题。
1.2 问题提出
过去十年,深圳市的人口发展出现了一些新的特点,例如:老龄化进程加速,出生人口性别比持续升高,具体表现为男多女少,家庭规模偏小以及乡村人口城镇化等因素,这些都影响着深圳市人口的增长。
关于人口问题已有多方面的研究,并积累了大量数据资料。现在得到了《深圳市人口统计年鉴》上收集到的部分数据,其中包含1979至2010年的全市常住人口的数量、死亡率、生育率、男女出生比例、育龄妇女生育率的千分比( ‰) ;以及从国家卫生部公开信息网站、深圳市卫生和人口计划生育委员会网站与深圳市统计局官网上查询的其他相关数据。
根据已知数据或搜索相关文献和补充新的数据,解决以下的问题:从深圳市的实际情况和人口增长的上述特点出发,建立深圳人口增长的数学模型,并由此对深圳市未来十年人口增长的短期做出预测,并以此为依据预测深圳市不同医疗机构的资源(主要是床位数)的合理配置。
预测深圳市某一种疾病在不同类型医疗机构的床位需求就要预测该种疾病总的床位需求,而决定床位需求的就是该种疾病的患病人口,也就是深圳市该种疾病的患病率。而患病率又和人口结构有着密切的关系,因为每一种疾病都会有一个高发人群年龄段,例如,心脏病、高血压等疾病多发生在老年人中,而小儿麻痹发生在少年儿童中,因此改年龄段人口的比例严重影响着该种疾病患病率。因此,通过分析深圳市历年该种疾病患病率与人口结构的关系,回归出患病率函数,预测未来几年深圳市某种疾病患病率,并且通过预测人口求出患病人数,进而求出该种疾病的总床位需求。
同时根据高血压在老年人中的发病率较高这一现象,我们在已知高血压这一疾病的两周患病率和慢性病患病率的数据的前提下,对该疾病的床位需求进行预测是很有必要的。
2. 模型的假设
( 1) 考虑所研究的人口为常住人口;
( 2) 深圳市各区人口体质相同,即同一年度各区患病率相同,且各区相对封闭,本区人口不会外出跨区就医。
( 3) 人口数随时间变化是连续的,而且充分光滑。
( 4) 农村人口一旦迁入城镇或者城镇化, 其人口行为和特征即与城镇人口相同, 即忽略城镇人口与迁入城镇人口或城镇化人口的差别.
( 5) 人口数据质量高,无误报和漏报等。
( 6) 在分析老年人口问题时,是以65岁作为老年人口的起点年龄;
( 7) 病床使用率不变,即未来的病床使用率沿用现在的标准病床使用率的数据,并且对现在病床使用率进行评价。
3.相关名词解释
人口数 指一定时点,一定地区范围内有生命的个人总和。
出生率 指在一定时期内( 通常为一年) 一定地区的出生人数与同期内平均人数( 或期中人数) 之比,用千分率表示。其计算公式为:
死亡率 指在一定时期内( 通常为一年) 一定地区的死亡人数与同期内平均人数( 或期中人数) 之比,用千分率表示。其计算公式为:
婴儿死亡率 指年内一定地区未满1岁婴儿死亡人数与同年出生的活产数之比,一般用‰表示。
人口自然增长率 是指在一定时期内( 通常为一年) 人口自然增加数( 出生人数减死亡人数) 与该时期内平均人数( 或期中人数) 之比,用千分率表示。计算公式为:
预测时期 短期( <10年),中期( 10-25年),长期( >25年) ;
出生人口性别比 是活产男婴数与活产女婴数的比值,通常用女婴数量为100时所对应的男婴数来表示。正常情况下,出生性别比是由生物学规律决定的,保持在103~107之间。
人口抚养比 指人口总体中处于供养年龄( 一般指15岁以下和64岁以上) 的人口与处于“经济活动”年龄( 15-64岁) 人口的比率。用百分比表示,计算公式为:
总和生育率:一定时期( 如某一年) 各年龄组妇女生育率的合计数,说明每名妇女按照某一年的各年龄组生育率度过育龄期,平均可能生育的子女数,是衡量生育水平最常用的指标之一。
总诊疗人次数: 所有诊疗工作的总人次数。诊疗人次数按挂号数统计,包括:①病人来院就诊的门诊、急诊人次;②出诊人次数;③单项健康检查及健康咨询指导人次;④未挂号就诊、本单位职工就诊及外出诊疗不收取挂号费的,按实际诊疗人次统计。 患者一次就诊多次挂号,按实际诊疗次数进行统计,不包括根据医嘱进行的各项检查、治疗、处置工作量。
床位数:年底固定实有床位(非编制床位),包括正规床、简易床、监护床、正在消毒和修理床位、因扩建或大修而停用的床位,不包括产科新生儿床、接产室待产床、库存床、观察床、临时加床和病人家属陪侍床。
出院人数:所有住院后出院的人数,包括治愈、好转、未愈、死亡及其他人数。其他人数指正常分娩、未产出院、住院经检查无病出院、未治出院及健康人进行人工流产或绝育手术后正常出院者。
实际占用总床日数:医院各科每日夜晚12点实际占用病床数(即每日夜晚12点住院人数)总和。包括实际占用的临时加床在内。病人入院后于当晚12点前死亡或因故出院的病人, 作为实际占用床位1天进行统计,同时亦应统计“出院者占用总床日数”1天,入院及出院人数各1人。
出院者占用总床日数:出院者(包括正常分娩、未产出院、住院经检查无病出院、未治出院及健康人进行人工流产或绝育手术后正常出院者)住院日数的总和。
潜在需求增长率:由于居民收入增长而导致的对医疗需求的增长,用百分比表示,计算公式为:
医院病床配置推荐标准:
病床使用率:
病床周转次数:
病床工作日:
出院者平均住院日:
居民年实际住院率:
居民两周就诊率:调查前两周内居民因病或身体不适到医疗机构就诊的人次数与调查人口数之比。
居民两周未就诊率:调查前两周内居民患病而未就诊的人次数与两周患病人次数之比。
居民两周患病率:
年平均床开放日数:
年净流入住院人数:
期望寿命 又称平均期望寿命。指0岁时的预期寿命。一般用“岁”表示。即在某一死亡水平下,已经活到 岁年龄的人们平均还有可能继续存活的年岁数。
高、低限计算依据:《标准》中配置的低限为实际需求的计算结果,高限是按实际需求加上可能转化的潜在需求计算结果。
城镇居民可支配收入:将家庭总收入扣除交纳的个人所得税和个人交纳的各项社会保障支出后的收入,等于工资性收入、经营净收入、财产性收入、转移性收入之和,再减去交纳的个人所得税和个人交纳的社会保障支出。目前城镇居民可支配收入中只包括城镇居民以现金形式获得的收入。
人均可支配收入:居民可支配收入的算术平均数,即样本家庭可支配收入总额除以其家庭人口总数计算得出。
4. 模型的建立与求解
4.1 预用模型介绍
传统的人口预测方法主要有逻辑方法、常微分方程方法和动态预测方法等。这些方法在人口预测领域起到了一定的作用,但采用这些方法时都要对数据进行模型假设。由于真实模型往往是非线性的,如果在一些简单的模型假设下就进行数据模拟,常常不能达到较好的模拟效果。灰色系统理论中的灰色预测GM(1,1)模型因其所需信息少、运算方便、建模精度较高而被广泛应用于各种预测领域。近年来该模型已应用于人口规模预测,但其精度不高。人工神经网络具有高度的非线性映射能力,它能以任意精度逼近任意非线性函数,因此,它比较适合于一些复杂问题的建模。
4.1.1 GM(1,1)预测模型的基本原理
GM(1,1)灰色系统
所谓灰色系统是指既含有已知信息,又含有未知信息的系统,是由邓聚龙教授在1986年提出的。灰色理论自诞生以来,发展很快,由于它所需因素少,模型简单,特别是对于因素空间难以穷尽,运行机制尚不明确,又缺乏建立确定关系的信息系统,灰色系统理论及方法为解决此类问题提供了新的思路和有益的尝试。
灰色预测方法是根据过去及现在已知的或非确知的信息,建立一个从过去引申到将来的GM模型,从而确定系统在未来发展变化的趋势,为规划决策提供依据。在灰色预测模型中,对时间序列进行数量大小的预测,随机性被弱化了,确定性增强了。此时在生成层次上求解得到生成函数,据此建立被求序列的数列预测,其预测模型为一阶微分方程,即只有一个变量的灰色模型,记为GM(1,1)模型。
(2) GM(1,1)预测模型的基本原理
GM(1,1)模型是灰色预测的核心,它是一个单个变量预测的一阶微分方程模型,其离散时间响应函数近似呈指数规律。建立GM(1,1)模型的方法是:
设 为原始非负时间序列, 为累加生成序列,即
(4-1)
GM(1,1)模型的白化微分方程为:
(4-2)
式(2) 中, 为待辨识参数, 亦称发展系数; 为待辨识内生变量,亦称灰作用量。设待辨识向量 ,按最小二乘法求得 式中
于是可得到灰色预测的离散时间响应函数为:
(4-3)
为所得的累加的预测值,将预测值还原即为:
(4-4)
4.1.2 BP神经网络模型的基本原理
4.1.2.1 神经网络的定义简介
神经网络是由多个神经元组成的广泛互连的神经网络,能够模拟生物神经系统真实世界及物体之间所做出的交互反应。人工神经网络处理信息是通过信息样本对神经网络的训练,使其具有人的大脑的记忆,辨识能力,完成名种信息处理功能,它不需要任何先验公式,就能从已有数据中自动地归纳规则,获得这些数据的内在规律,具有良好的自学习,自适应,联想记忆,并行处理和非线性形转换的能力,特别适合于因果关系复杂的非确定性推理、判断、识别和分类等问题. 对于任意一组随机的,正态的数据,都可以利用人工神经网络算法进行统计分析, 做出拟合和预测。
基于误差反向传播(Back propagation)算法的多层前馈网络(Multiple-layer feedforward network, 简记为BP网络),是目前应用最成功和广泛的人工神经网络。
4.1.2.2 BP模型的基本原理
学习过程中由信号的正向传播与误差的逆向传播两个过程组成。正向传播时,式作用于输入层,经隐含层处理后,传入误差的逆向传播阶段,将输出误差按某种子形式,通过隐含层向输入层逐层返回,并“分摊”给各层的所有单元,从而获得各层单元的参考误差或称误差信号,以作为修改各单元权值的依据。权值不断修改的过程,也就是网络学习过程。此过程一直进行到网络输出的误差准逐渐减少到可接受的程度或达到设定的学习次数为止。BP网络模型包括其输入输出模型,作用函数模型, 误差计算模型和自学习模型。
BP网络由输入层,输出层以及一个或多个隐含层节点互连而成的一种多层网,这种结构使多层前馈网络可在输入和输出间建立合适的线性或非线性关系,又不致使网络输出限制在-1和1之间。见图(4-1)
O O O O
( 大于等于一层) W(1)…W(L)
4.1.2.3 BP神经网络的训练
BP算法通过“训练”这一事件来得到这种输入,输出间合适的线性或非线性关系。“训练”的过程可以分为向前传输和向后传输两个阶段:
1.向前传输阶段:
①从样本集中取一个样本 ,将 输入网络;
②计算出误差测度 和实际输出 ;
③对权重值 各做一次调整,重复这个循环,直到 。
2.向后传播阶段——误差传播阶段:
①计算实际输出 与理想输出 的差;
②用输出层的误差调整输出层权矩阵;
③ ;
④用此误差估计输出层的直接前导层的误差,再用输出层前导层误差估计更前一层的误差。如此获得所有其他各层的误差估计;
⑤并用这些估计实现对权矩阵的修改,形成将输出端表现出的误差沿着与输出信号相反的方向逐级向输出端传递的过程。
网络关于整个样本集的误差测度:
4.1.2.4 基于GASA混合学习策略的BP神经网络优化
鉴于BP算法易陷入局部极小,遗传算法(Genetic Algorithm,GA)虽有较强的全局搜索性能,但在实际应用中容易产生早熟收敛的问题,而改善其性能需增大种群数目或采用高级的进化策略,因此本文结合GA并行搜索结构和模拟退火(Simulated Annealing,SA)的概率突跳特性,提出一种神经网络权值学习的GASA混合学习策略以避免网络陷于局部极小,并将这种混合学习策略用于NARMA(p,q)递归网络和用作组合预测的多层前馈网络的学习。GASA混合策略在神经网络中学习步骤如下(流程图见图(4-2)):
图(4-2) GASA混合策略在神经网络中学习步骤
(1)确定神经网络的结构,并用浮点数编码表示该网络。
鉴于浮点数编码更接近问题的本身,且在 v解的质量和算法效率方面均优于二进制编码,所以用基因串 表示第 层和 层的权值向量, 为第 层的阈值向量,用浮点数编码来表示 层BP网络。基于训练误差的单目标学习常会出现过拟合现象,影响网络的推广性,因此,采用训练样本集的训练误差和测试样本集的测试误差的综合误差指标 作为网络性能的评价目标,适应度函数定义为:
(4-5)
式中 为学习误差,计算公式为
式中: 和 分别为训练样本集和测试样本集中的样本数, 才和 ,分别为训练样本或测试样本集第 个样本输入对应网络输出层第 个结点的期望输出和实际输出。
选择操作是按照优胜劣汰、适者生存的原则选择交配个体以产生子个体的过程。本文采用截断选择法,在该方法中,个体按适应度由大到小排序,只有截断阈值之上的优秀个体能够被选择作为父个体,在该阈值之下的个体不能产生子个体。
浮点数编码遗传算法(float-encoding genetic algorithm, FGA)的常用交叉算子有多种,如简单交叉、算术交叉、启发交叉、混合交叉和平坦交叉等。本文采用混合交叉算子。设 , 在交叉算子作用下产生两个新个体 和 ,混合交叉算子是 对的每个分量对 ,设 ,在 区间中按均匀分布选择两个随机数作为 ,这里 为事先给定的常数,一般取 。
FGA常用变异算子有均匀变异、边界变异和高斯变异等。本文采用均匀变异的。
(2)确定种群大小 、进化最大代数 、选择操作时的淘汰率 、变异概率 、初温 和退温速率 ,初始化种群 ,令 。
(3)对 中的各个个体进行SA搜索:
(3.1)利用SA状态产生函数产生新的个体。
(3.2)计算新、旧个体的综合误差之差 。
(3.3)计算接受概率 。
(3.4) 若 ,用新个体取代旧个体;否则,旧个体不变。
(4) 对 中的个体按适应度由大到小进行排序,然后以 淘汰率淘汰掉适应度值低的个体,被淘汰掉的个体数为 ,再将未被淘汰掉的优良个体保留到下一代种群 中。
(5) 次从 的优良个体中随机选择两个个体进行交叉操作,每次产生一个新个体填补到 中以保持种群规模不变。
(6) 以变异概率对步骤(5)产生的新个体进行变异操作,至此产生种群 。利用退温函数 进行退温,交换训练样本集和测试样本集。
(7)若最优个体的综合误差满足要求精度 或已达到进化最大代数,则终止算法并输出结果;否则,令 ,转到步骤(3)
4.2 针对问题(1)
4.2.1 预测深圳是未来十年全市总人口所采用模型----GM(1,1)模型和BP神经网络模型的组合预测
尽管目前时序预测的方法很多,但它们的应用条件、建模机理各异,都存在一定的局限,因此,在实际应用中传统的单一预测方法难以获得较为满意的预测结果。如果将各种预测方法进行组合,充分利用各自包含的一些有用的信息,扬长避短,将能产生较好的预测效果。自J.M.Bates和C.W.Granger(1969)首次提出组合预测以来,组合预测的方法和应用被广泛研究,但这些方法的大部分都侧重于预测误差方法的最小。文献 用各种预测方法如平均值法、递归最小二乘法、模糊逻辑系统、神经网络法等对煤气日用量的无隐含层前馈网络和单隐层前馈网络的预测值进行了组合预测的研究,研究结果表明神经网络的组合预测效果优于其它方法。鉴于此,本文将人口规模的GM(1,1)等维新息模型的预测值和BP神经网络进行组合预测并求出其最终的预测值。用于人口预测的灰色预测和神经网络的组合模型的基本方法与步骤为:
(1)以人口的历史统计数据建立GM(1,1)等维数为的等维新息模型,其灰色预测值为 。
(2)将灰色预测值 作为用于组合预测的多层前馈网络的输入,其对应的实际值 作为该网络的输出构成匹配对( , )然后将这些匹配对分为两部分,A部分用于网络的训练,B部分用于测试该网络的性能。
(3)如同递归网络,用GASA混合学习策略对A部分样本进行组合预测网络FNN的学习,然后作一步预测,从而得到人口规模的最终预测值 。
4.2.2 未来十年深圳市总人口预测结果分析
表4-1 2011-2020年深圳市总人口预测
单位 人口预测值(万人)
2011 1083.018
2012 1131.64
2013 1182.52
2014 1235.3
2015 1289.743
2016 1345.691
2017 1403.042
2018 1461.729
2019 1521.705
2020 1582.941
图(4-3)深圳市未来十年总人口预测图
按此预测,从以上图表中可以知道深圳市人口增长的中短期趋势为:深圳市人口自然增长率继续保持平稳下降,人口总量在中短期内继续增长,增速较为平稳。人口总量在未来10年还将净增500万人左右,总人口将于2020年达到1582.941万人。
单独的GM(1,1)模型和神经网络模型都能非常精确的预测出在短期内深圳市未来人口总数,在中期预测中,也能较好的反映出人口变化趋势。在长期预测时,GM(1,1)的预测数据偏差非常大,神经网络虽然变化趋势较符合深圳市未来人口变化情况,但偏差还是较大。而组合模型在这三个时期内,都能够很好的预测出深圳市未来人口总量的及其变化情况,显然组合模型的预测效果最佳。关于GM(1,1)长期预测的局限性将在模型评价中讨论。
4.3 针对问题(2)
4.3.1 预测深圳市未来十年人口年龄结构所采用模型----人口发展动力方程(部分指标值的预测见附表1)
4.3.1.1 人口的年龄结构
将人口按年龄大小逐年分成 个年龄组,模型要讨论在不同时间人口的年龄分布,对时间也加以离散化,其单位与年龄组的间隔相同。时间离散化为 .设在时间段 第 年龄组的人口总数为 ,定义向量 ,根据分年龄的人口结构递推公式进行预测,模型的数学表达如下:
其中:
式中: 为第 年常住人口0岁出生婴儿数, 为第年的第 岁的常住人口数, 为第 年到第 年迁入的总人口, 为第 年到第 年迁入的 岁人口, 为第 年容纳的最大迁入人口, 为第t年到第t+1年的迁出的总人口, 为第 年到第 年的迁出的 岁的人口, 为 年的迁入率(在一定时期内可以认为不变), 为 年的迁出率(在一定时期内可以认为不变), 为第 年常住人口出生婴儿当年死亡率, 为常住人口中妇女总和生育率,即社会人中平均意义下一个妇女在整个育龄时期的生育总数( , 即为生育年龄的上下限), 为常住人口中第 年年龄为 的女性性别比, 为第 年第 岁的常住人口死亡率, 表示生育模式,反映某一地区某一个育龄妇女生育状态分布; 表示迁入模式,反映某一地区迁入人口随迁入年龄的状态分布, 表示迁出模式,反映某一地区迁出人口随迁出年龄的状态分布。
假定一:
三个模式在一定时期内稳定,生育模式采取对数正态分布,迁入模式和迁出模式均采取 分布,
即:
其中; 取总和生育率, 为最低生育年龄, 的取值范围为(1.7,2.5), 的取值范围为(0,1),在本文中 取2.4, 取0.5,拟合效果比较理想。
其中期望生育年龄为 ,经计算等于26.49,比较符合实际。
其中 为迁入峰值年龄, 为迁入人群年龄下限, 为可控变量,根据拟合可以得出其值约为0.67;
其中 为迁出峰值年龄, 为迁出人群年龄下限, 为可控变量,根据拟合可以得出其值约为1.4;
假定二:
迁入人口的阻尼程度与总人口的阻尼程度成正比;迁出人口的逆阻尼程度与总人口的阻尼程度成正比。
即:
人口的阻尼程度利用经验公式:
;
4.3.1.2 人口的死亡率
人口的死亡率的计算公式为:
其中死亡率 表示第 岁的人口所占总人口的比例, 表示第 岁人口的分年龄层死亡率。
其中分年龄的死亡模式计算公式:
因而,预测未来十年的人口分年龄死亡模式 为:
在这里,
(1)我们假定环境因子不变,设定为1;
(2)收入因子的计算公式为: ,其中人均可支配收入的增长速率以最近五年的平均速率来计算。用反衰减因子法预测未来的人均可支配收入。即:
则,未来的人均可支配收入的计算公式为:
(3)居民健康水平:
4.3.1.3 人口的性别比
性别比的预测公式:
其中第三产业的增长速率数据可以从深圳市国民经济和社会发展统计公报获知。
4.3.1.4 各项预测指标调整的方法
1.先由已知的各指标值的数据,算出其均值和标准差,分别记为记为 ,我们定义一个相似随机因子,计算公式为 。
2.对已预测出的数据进行随机操作:记以预测数的数据所组成的数列为 ,
①求出已预测出的数据的均值和标准差,分别记为 和 ;
②调整后的数列为 ,则,调整后的预测值所组成的数列的计算公式为:
4.3.2 未来十年深圳市人口年龄结构预测结果分析
4.3.2.1 深圳市年龄结构变化趋势
图(4-4) 深圳市未来十年年龄别人口预测图
图(4-4-1) 深圳市未来十年中青年人口发展趋势
图(4-4-2) 深圳市未来十年老年人口发展趋势
按此预测,有以上图表可知,深圳市未来十年年龄别人口的发展趋势是:中青年的流动性大,人口结构相对不稳定,易受外部影响(政府的调整、经济的吸引力等);而老年人口在缓慢增加,导致老龄化在平稳中逐年加剧。
但是人口老龄化将导致抚养比不断提高,尤其是乡老年人口变化显著,老龄化速度仅仅是深圳市在10年就增加了0.7个百分点。
老年人口比重的不断提高和老年人口绝对数的大量增加,在如何搞好老年人口的衣食住行和老有所养、老有所乐、老有所为等方面是社会不容忽视的问题。
4.3.2.2 深圳市人口分年龄死亡率变化
人口死亡水平是造成人口数量和结构变化的重要因素之一,随着深圳市经济的迅速发展和医疗卫生条件的进一步改善,深圳市人口的健康水平有了明显改善, 人口的死亡率总体上较低。
图(4-5) 深圳市未来十年人口年龄别死亡率变化预测图
图(4-5-1) 深圳市未来十年中青年人口死亡率变化预测图
图(4-5-2) 深圳市未来十年老年人口死亡率变化预测图
按此预测,由以上图表可知,深圳市未来十年青少年的死亡率在逐年下降,这与居民生活水平的提高、生活质量的改善有关,从而导致患病率降低;小中青年和青壮年的死亡率逐年递增,与外来务工人员的不断流入,和从事的工作(体力、高风险等)性质有关。
在刚进入老年时期时,死亡率不增反降,与居民的生活水平的提高和刚退休生活压力小有关,而后上升幅度较大,是由于居民的年龄增大和身体素质的下降。
4.3.2.3 深圳市性别比与第三产业关系
图(4-6) 深圳市人口性别比与第三产业关系图
图中居上的一条线代表人口性别比,居下的一条线表示第三产业的增长速度,根据深圳市国民经济和社会发展统计公报上的数据,在近十年中深圳市产业结构发生着巨大的改变,第一产业的增长速率在逐年减少,而第二、第三产业的增长速率却在逐年增加,因而大量的外来务工人员进入深圳市,导致了深圳市性别比、人口结构、分年龄的死亡模式发生了变化。
由图可以知道,第三产业的发展在一定程度上影响性别比(即模型中性别比与第三产业的关系式)。
4.3.3 预测深圳市全市医疗床位需求----卫生服务需求量法
在如何合理配置医疗卫生资源的问题上,有两点大家是有共识的:第一要以区域内居民的卫生服务需要和需求为基础;第二,规划是面向未来的,因此必须以某种方式较准确地反映未来的需要和需求。预测未来医疗服务的需要和需求的变化,不能忽略了一些重要的社会经济指标,多个社会经济因素对卫生服务需要和需求产生影响,这些因素包括人口(数量、年龄结构、性别等)、收入、价格、疾病谱及医疗保障制度等等。因此,在制订医疗资源配置规划时,必须对这些因素的未来状态做一个恰当的估计,并实实在在地纳入影响卫生服务需要和需求的计量中去。
同时在分析本市医疗资源历史发展及现有状况的基础上,考虑病人的流向、潜在需求、流动人口及人口增长等因素的影响,来进一步确定医疗资源的数量、结构、布局以及发展速度与规模。
4.3.3.1 卫生服务需求量法基本公式
医院床位需求量:
医院床位需要量:
4.3.4 未来十年深圳市全市医疗床位需求预测结果分析
表4-2 2011-2020年深圳市全市医疗床位需求预测
单位 全市床位需求(张)
2011 33949
2012 39063
2013 45795
2014 55200
2015 69759
2016 92470
2017 128464
2018 191571
2019 310318
2020 498966
图(4-7)深圳市未来十年全市医疗床位需求预测图
4.4 针对问题(3)
4.4.1 深圳市不同医疗机构的需求权重
通过综合患者偏好、医院规模(主要以床位数据为准)、医师比例等因素,求出了综合医院、专科医院以及街道医院三种医院床位需求权重。
表4-3 不同医疗机构床位需求权重
综合医院 专科医院 街道医院
消费者偏好 58% 33% 9%
医院规模 55% 40% 5%
医师比例 60% 33% 7%
权值 0.58 0.35 0.07
4.4.2 疾病别的床位需求预测
4.4.2.1 因病住院人数的计算
设 ,利用衰减因子法: ,则对于深圳市未来的 ,有 ;其中,住院人数计算公式为:
图(4-8)住院人数与就诊人数的比值随年份的变化趋势图
4.4.2.2 因患高血压所需的床位数
针对深圳市老龄化的日趋严重,以及高血压在老年人口中的高发病率这一现状,随着经济的增长和社会福利制度的完善,老年人患病后的就诊需求会更加迫切,因此,我们预测仅仅因为高血压这一疾病深圳市全市就要增加的床位数总数,其计算公式:
4.4.2.3 因妊娠、分娩和产褥期小计所需的床位数
根据深圳市国民经济和社会发展统计公报的数据,第三产业的增长速率在逐年增加,因而人口性别比也在变化,同时根据深圳市卫生统计年鉴(数据来源于深圳市卫生与人口计划生育委员会网站),在深圳市医院住院病人疾病顺位里,从2003年—2010年妊娠、分娩和产褥期小计的比重连续8年排在第一位,所以对妊娠、分娩和产褥期小计的床位需求预测是很有必要的,其计算公式为:
4.4.3 高血压在不同的医疗机构的床位需求的预测结果
表4-4 2011-2020年高血压在不同医疗机构的床位预测
单位 高血压所需床位数(张) 综合医院 专科医院 街道医院
2011 99.986 57.99 34.99 6.99
2012 100.054 58.03 35.02 7.00
2013 100.133 58.08 35.05 7.01
2014 100.212 58.12 35.07 7.015
2015 100.290 58.16 35.10 7.02
2016 100.369 58.21 35.13 7.025
2017 100.457 58.26 35.16 7.03
2018 100.546 58.31 35.19 7.038
2019 100.634 58.36 35.22 7.04
2020 100.722 58.41 35.25 7.05
4.4.4 妊娠、分娩和产褥期小计在不同的医疗机构的床位需求的预测结果
表4-5 2011-2020年分娩在不同医疗机构的床位预测
单位 分娩所需床位数(张) 综合医院 专科医院 街道医院
2011 7276 4220.1 2546.6 509.3
2012 7357 4266.9 2574.8 515.0
2013 7297 4232.1 2553.8 510.8
2014 7266 4214.1 2543.0 508.6
2015 7127 4133.7 2494.5 498.9
2016 6966 4040.4 2438.2 487.6
2017 7181 4165.1 2513.4 502.7
2018 7181 4165.1 2513.4 502.7
2019 7441 4315.8 2604.4 520.9
2020 10681 6194.9 3738.3 747.7
5. 模型检验
5.1 人口预测
现有深圳市1979—2010年的人口总数,、出生率和死亡率数据。用C语言编写的灰色GM(1,1)模型和改进的BP神经网络模型的程序,首先根据深圳市1979-2009年的数据,利用此组合模型进行预测,将所预测得到的2010年深圳市人口总数与已有数据进行比较,并验证组合模型的短期预测精度。
通过计算,可知GM(1,1)预测的数据与实际数值的绝对误差 大于组合模型得到的仿真数据与实际数值的绝对误差 ,相对误差 大于组合模型得到的仿真数据与实际数值的相对误差 ,均方差 大于组合模型得到的仿真数据与实际数值的均方差 ,由此可见此组合模型在人口总数预测方面仿真数据的精确性较单独的GM(1,1)模型要高得多。
5.2 床位数量预测
5.2.1 卫生服务需求量法的精度和优势
预测未来医疗服务的需要和需求的变化,不能忽略了一些重要的社会经济指标。前面的分析己经证明,多个社会经济因素对卫生服务需要和需求产生影响,这些因素包括人口(数量、年龄结构、性别等)、收入、价格、疾病谱及医疗保障制度等等。因此,在制订医疗资源配置规划时,我们对这些因素的未来状态做一个恰当的估计,并实实在在地纳入影响卫生服务需要和需求的计量中去。同时在分析本市医疗资源历史发展及现有状况的基础上,考虑病人的流向、潜在需求、流动人口及人口增长等因素的影响,来进一步确定医疗资源的数量、结构、布局以及发展速度与规模,这样结合了实际情况的预测值比仅仅依靠历年床位数据所得出的预测值更可行,更贴合实际情况。
5.2.2 评价医院床位供需平衡状况
床位供需平衡评价采用供需比方法,即将当地实际医院床位供给数与医院床位需要(需求)数进行对比,求出比值再进行评价。
(1) 供需比值在 范围内,为供需平衡;
(2) 供需比值在 范围外,但在 范围外,为基本平衡;
(3) 供需比值超出 范围为供需不平衡,比值 为短缺或不足,比值 为过剩。
5.2.3 对医疗机构的划分
在这个问题上,我们依据经济学和消费心理学中的相关知识,综合患者偏好、医院规模、医师比例这三个指标求出不同医疗机构的需求权重,而不是根据医院科室的设置来划分,这样的处理更贴合居民看病消费的实际需求。
6. 模型的评价和推广
6.1 灰色GM(1,1) 模型评价及推广
6.1.1 灰色GM(1,1)模型优点
灰色GM(1,1)预测模型在计算过程中主要以矩阵为主,它与C语言的结合解决了它在计算中的问题。由C语言编制的灰色预测程序简单实用,容易操作,预测精度较高。
6.1.2 灰色GM(1,1)模型的缺点
该模型是指运用曲线拟合和灰色系统理论对我国人口发展进行预测的方法, 因此它对历史数据有很强的依赖性,而且GM (1,1)的模型没有考虑各个因素之间的联系。因此,误差偏大,尤其是对中长期预测,例如对中国人口总数变化情况做长期预测时,误差偏大,脱离实际。下面我们来讨论GM(1,1)模型的适用范围。
GM(1,1)模型的白化微分方程:
其中 为发展系数,
有命题 当GM(1,1)发展系数 时,GM(1,1)模型无意义。
通过分析,可得下述结论:
当 时,GM(1,1)可用于中长期预测;
当 时,GM(1,1)可用于短期预测,中长期预测慎用;
当 时,GM(1,1)作短期预测应十分谨慎;
当 时,应采用残差修正GM(1,1);
当 时,不宜采用GM(1,1);
在对深圳市人口总数变化情况的预测过程中, =-0.040597,因此可做短期和中长期的预测。
如果要考虑到多因素的联系和影响,此时我们不妨建立GM( 1, n) 模型。 GM( 1, N) 模型能模拟系统发展的动态过程,不但吸收了传统的灰色模型的建立,而且建立了多中改进的灰色模型,提高了预测精度。具体参考
6.2 BP神经网络模型的优化、评价及推广
6.2.1 学习因子h 的优化
采用变步长法根据输出误差大小自动调整学习因子,来减少迭代次数和加快收敛速度。
, 为调整步长,在0~1之间取值
6.2.2 隐含层节点数的优化
隐含层节点数的多少对网络性能的影响较大,当隐含层节点数太多时,会导致网络学习时间过长,甚至不能收敛;而当隐含层节点数过小时,网络的容错能力差。利用逐步回归分析法并进行参数的显著性检验来动态删除一些线形相关的隐节点,节点删除标准:当由该节点出发指向下一层节点的所有权值和阈值均落于死区(通常取±0.1、±0.05等区间)之中,则该节点可删除。最佳隐含层节点数 可参考下面公式计算:
表示输入节点数; 表示输出节点数;表示介于1~10的常数。
6.2.3 输入和输出神经元的确定
利用多元回归分析法对神经网络的输入参数进行处理,删除相关性强的输入参数,来减少输入节点数。
6.2.4 运用BP神经网络进行人口预测的可行性
一个好的人口预测模型首先应符合人口基本理论和数学建模要求,这是选择模型的关键。其次要保证模型数据可得,一致和可比性,在数据预测检验阶段应充分拟合原始数据,特别是有波动的数据,因为波动性数据往往蕴藏了系统重要信息。具有P个输入,Q个输出的BP网络可看作P维欧氏空间到Q维欧氏空间的一个非线性映射,含一个隐含层的BP网络可以逼近任何连续函数。BP网络的非线性映射与人口非线性特征是相近的,对于未知的人口动力学系统可通过神经网络来学习系统的表征量并进行预测,已有定理从数学上保证了网络用于时间序列预测的可行性。网络的输入向量和结构参数可由相空间重构技术予以确定, 同时BP网络的动态学习能力对人口波动性数据具有较强的识别和拟合能力,克服了以往人口预测模型剔除奇异值或划分阶段处理的缺陷。因此从模型映射性质, 输入变量的选择和波动性数据拟合等方面表明BP神经网络模型用于人口预测是可行的。用神经网络对人口历史数据进行分析拟合,是人口预测的有效方法。与传统的人口预测方法相比,将基于BP神经网络的时间序列预测方法用于人口预测,避免了繁琐的常规建模过程。神经网络模型良好的适应和自学习能力,使预测系统计算简单、灵活,运用计算机强大的组合能力,可以更好地实现人口分类预测和管理,大大提高人口预测效率和预测精度。
6.2.5 BP神经网络的不足:
BP神经网络需要大量的样本数据用来训练和测试,当样本数量不够时,预测的误偏差很大。
针对这些问题,我们提出GM(1,1)和BP神经网络的组合模型,这样利用灰色系统理论具有所需要的样本数据少,原理简单,运算方便,短期预测精度高等优点,也发挥了神经网络并行计算,容错能力强,自适应能力强等优点。
6.3 供需比评价法对医院床位的预测的优缺点
6.3.1 供需评价法对医院床位的预测的优势
卫生服务的公益福利性质也决定了不可能使市场机制在卫生资源的配置中起基础性作用。因为在医疗卫生领域市场机制的局限性突出表现在这个机制不能解决医疗卫生服务分配不公的问题,不能解决人人享有基本医疗保健问题,这个局限性是市场固有的,是无法克服的。所以在医疗卫生领域,资源的配置只有在政府的宏观调控下,辅以市场调节,二者有机结合的资源配置方式。宏观调控的基本内容就是根据医疗需求,对医疗资源的总量、功能、结构和布局进行调控,合理配置医疗资源,保持总供给与总需求的基本平衡。
影响床位数的因素多而复杂,如人口数、人口年龄结构、经济水平、人均收入水平、居民健康状况、居民卫生服务需求、卫生服务利用、卫生服务能力等。其中,居民健康状况、卫生服务需求和利用是综合性指标,代表着医疗卫生服务的工作量,从而决定着床位的客观需要量。本文利用卫生服务调查中居民健康状况、居民卫生服务需要(需求)与利用以及卫生统计年鉴中卫生服务利用效率等数据,对深圳市全市床位的需要(需求)量进行测算,然后与实际床位供给数进行比较,求出供需比值,进行供需评价。此法具有以下的优点:
①按照深圳市居民的实际需要(需求)量来测算床位需要(需求)量,科学性和实用性较好;
②方法简单可行,可操作性强;
③结果是定量的而非定性的,在床位资源供需平衡状态评价方面,提供了一个客观的量化标准,为总量控制提供依据。
6.3.2 供需评价法对医院床位的预测的劣势
本法仅限于总量评价,而无法对各级各类医院床位的供需平衡状况进行客观的评价。
6.3.3 对医疗资源预测的评价和改进
该模型考虑的是常住人口,而根据深圳市的人口现状,有大量的外来务工人员在深圳市务工,因而可以对该模型做进一步的改进,即把深圳市人口的中非户籍人口远远高于户籍人口这一现状考虑进去,并考虑流动人口的经济水平和实际就诊需求,对医疗需求的预测会更完善。
7. 我们的一些建议
1.今后20年前后我国人口趋于年青化的发展态势,之后人口老年化的趋势逐渐显著,且成年群体的负担会越来越重,深圳市也不例外。鉴于此, 要加强发展基层的养老保险等社会保障事业,现在的年轻群体可以投入这样的组织来保障老年的生活,同时也减轻年轻一代的负担。
2.继续实施计划生育政策,促使人口健康、稳定发展,并利用教育,宣传等形式来。引导男女性别比的协调发展,如果按照上述的态势发展,势必会造成一系列严重的社会问题.
3.发挥深圳市当地的地区优势,合理调整甚至是的产业结构,创造就业机会,发展自己的经济,活跃市场,给上述的群体创造更多的就业和再就业机会。
结 语:
此组合模型将灰色预测与神经网络相结合,充分利用了灰色预测建模所需信息少、方法简单的特点和神经网络具有较强的非线性映射能力的特性,采用多层前馈网络预测模型和灰色预测GM(1,1)等维新息模型的预测值进行组合预测,同时针对BP算法易陷入局部极小的缺陷和GA易产生早熟收敛的问题,提出了一种GASA混合策略的神经网络权值学习方法,并将这种混合策略应用于BP神经网络中进行学习,从而提高了预测的精度。此组合模型简单、实用、 特别是在原始数据非常有限的情况下,可以得到相当精度的拟合数据,并能得到可靠的预测数据。
由于神经网络的功能之强大, 型式之多样,若能将其它网络形式同灰色预测相结合,则有可能进一步提高预测精度,并能在人口预测方面发挥更大的作用。
在参考宋健人口发展方程的基础上,我们提出了更切合深圳市人口特色的人口动力发展方程,在预测出深圳市未来十年的总人口的基础上,预测出了未来十年的人口结构,并基于此提出了生育模式和死亡模式。
在预测床位的数量这一问题上,我们结合了深圳市的产业结构发展特点、外来务工人员较多、非户籍人口远远大于户籍人口的特点、深圳市人均可支配收入、居民健康状况、卫生服务需求等种种因素,以医疗服务需求法来预测深圳市未来十年全市的床位需要量、需求量以及疾病别的床位需求量,得出的数据比单纯使用历年数据所预测出的结果要精确得多。
在医疗资源稀缺的情况下,对于医疗资源配置的方式主要包括一下三种:以需求为基础的模式,以供给为基础的模式,以供给和需求相结合为基础的模式。但是随着人类社会的发展和进步、疾病谱的改变、医学模式的转变和人均期望寿命的延长等等,如何更好地体现医疗服务的公平性和可及性以及更好地配置医疗资源成为困扰宏观调控的又一课题。
8. 参考文献
Khotanzad A,Elaragal H and Lu Tsun_Liang. Combination of Artificial Neural-Network Forecasters for Prediction of Natural Gas Consumption. IEEE Transactions on Neural Networks,2000,11(2):464-473.
赖红松,祝国瑞,董品杰.基于灰色预测和神经网络的人口预测.经济地理,2004,24(2):197-201;
汪璇,谢德体,吕家恪,武伟.集成GASA混合学习策略的BP神经网络优化研究.(2007),03(12);
邓聚龙.灰预测与灰决策.武汉:华中科技大学出版社,2002;
深圳市卫生和人口计划生育委员会. http://www.szhpfpc.gov.cn/view?fid=view&id=1&oidyp=A10B032=menunews&nt ;
深圳市统计局.http://www.sztj.com/main/xxgk/tjsj/tjgb/gmjjhshfzgb/
政务公开站点——卫生部政府信息公开专题.http://www.moh.gov.cn/sofpro/cms/previewjspfile/zwg
林安弟.吐鲁番地区医院床位医生配比标准研究.;
刘丽娜,我国医院卫生院床位配置情况及预测研究.山东大学.2007。
附录:
附表1 2011-2020年深圳市各指标值预测
单位 老龄化(老年人口比例)(%) 人均可支配收入增长速率(%) 第一产业增速(%) 第三产业增速(%)
2011 0.0178 0.1270 -21.6090 11.08
2012 0.0183 0.1150 -16.5183 10.62
2013 0.019 0.0912 -19.2546 10.96
2014 0.0198 0.1012 -15.9456 11.14
2015 0.0206 0.1037 -18.3001 11.99
2016 0.0214 0.1046 -22.9454 13.08
2017 0.0222 0.0829 -20.4666 11.65
2018 0.0231 0.0983 -20.0182 11.65
2019 0.0240 0.0887 -11.2366 10.16
2020 0.0249 0.0943 -3.0914 9.37
(1) GM(1,1) 灰色系统C语言源程序清单:
#include<stdio.h>
#include<math.h>
#define N 100
void main()
{
int t0,tn,t,n,i,m;
float e,q,z,z11,z12,z21,z22,c1,c2,a0,p,u,yy,y,s1,s2,g0,g;
float y1,h1,h0,h4,r,z1,a,a1;
float z2,v,s11,s12,s21,s22,ee,l1,l2,c3,o;
z=0;
z11=0;
z12=0;
z21=0;
z22=0;
a0=0;
p=0;
u=0;
printf("===========================GM(1,1)===========================\n");
printf("请输入起始年份:");
scanf("%d",&t0);
printf("请输入终止年份:");
scanf("%d",&tn);
n=tn-t0+1;
for(i=0;i<n;i++)
{
printf("请输入%d个数据:",i+1);
scanf("%f",&a);
}
m=1;
while(m>0)
{
for(i=1;i<n;i++)
{
r=a/a;
}
for(i=0;i<n-1;i++)
{
// printf("r[%d]:%f\n",i,r);
}
m=0;
v=-2/(float)(n+1);
l1=pow(2.7183,v);
l2=pow(2.7183,-v);
for(i=0;i<n-1;i++)
{
if(r>l2||r<l1)
{
printf("r[%d]:%f\n",i,r);
printf("11");
m=1;
printf("需要调整,请输入调整值:");
scanf("%f",&c3);
for(i=0;i<n;i++)
{
a=a+c3;
}
break;
}
}
}
a1=a;
for(i=1;i<n;i++)
{
a1=a1+a;
// printf("a1 %f \n",a1); //累和
}
for(i=1;i<n;i++)
{
y1=a;
}
for(i=0;i<n-1;i++)
{
// printf("y %f \n",y1);//缺原始数据第一个元素
}
for(i=0;i<n-1;i++)
{
z1=(a1+a1)*-1/2;
}
for(i=0;i<n-1;i++)
{
// printf("z:%f \n",z1);// 求1/2(相邻两数和)
}
for(i=0;i<n-1;i++)
{
z11+=z1*z1;
z12+=z1;
}
z22=n-1;
z21=z12;
// printf("z矩阵:\n");
// printf("%f %f\n",z11,z12);
// printf("%f %f",z21,z22);
z2=z11*z22-z12*z21;
// printf("行列式:%f",z2);
s11=z22/z2;
s12=-z12/z2;
s22=z11/z2;
s21=-z21/z2;
// printf("\n");
// printf("%f %f\n",s11,s12);
// printf("%f %f",s21,s22);
c1=0;
c2=0;
for(i=0;i<n-1;i++)
{
c2=c2+y1;
c1=c1+z1*y1;
}
// printf("c1:%f c2:%f",c1,c2);
a0=s11*c1+s12*c2;
u=s21*c1+s22*c2;
// printf("a=%f u=%f\n",a0,u);
for(i=0;i<n;i++)
{
h1=(a-u/a0)*exp(-a0*i)+u/a0;
}
h1=a;
h0=a;
for(i=1;i<n;i++)
{
h0=h1-h1;
}
for(i=0;i<n;i++)
{
// printf("预测:%f\n",h0); //预测值!
}
for(i=0;i<n;i++)
{
e=a-h0;
}
for(i=0;i<n;i++)
{
q=e/a;
}
for(i=0;i<n;i++)
{
// printf("e(%d)=%f\t\tq(%d)=%f\n",i,e,i,q); //--------e为残差! q相对误差!、
}
yy=0;
for(i=0;i<n;i++)
{
yy+=a;
}
yy=yy/n;
y=0;
for(i=0;i<n;i++)
{
y+=e;
}
y=y/n;
// printf("平均数:y:%f e:%f\n",yy,y);//原始数据的平均数
ee=0;
for(i=0;i<n;i++)
{
ee+=(a-yy)*(a-yy);
}
s1=ee/(float)n;
// printf("%f ,%d\n",s1,n);
s1=sqrt(s1);
// printf("s1:%f\n",s1);//---------------------s1
ee=0;
for(i=0;i<n;i++)
{
ee+=(e-y)*(e-y);
}
s2=ee/(float)n;
// printf("%f ,%d\n",s2,n);
s2=sqrt(s2);
// printf("s2:%f\n",s2);//---------------------s2
ee=s2/s1;
// printf("均方差比值:%f",ee);//-------------ee均方差比值
o=0;
for(i=0;i<n;i++)
{
if((y-0.6745*s1)<e<(y+0.6745*s1))
{
o++;
}
}
o=o/(float)n;
// printf("小误差概率为:%lf\n",o);//----------o 小误差概率
printf("请输入预测终止年份:");
scanf("%d",&t);
t=t-tn;
g0=(a-u/a0)*exp(-a0*n)+u/a0;
h4=g0-a1;
for(i=0;i<t-1;i++)
{
g=(a-u/a0)*exp(-a0*(n+i+1))+u/a0;
h4=g-g0;
g0=g;
}// 预测
printf("===============================结果==============================\n");
printf("序号:");
for(i=0;i<n+t;i++)
{
printf("%8d",i+1);
}
printf("\n");
printf("年份:");
for(i=0;i<n+t;i++)
{
printf("%8d",t0+i);
}
printf("\n");
printf("原始:");
for(i=0;i<n;i++)
{
printf("%8.4f",a);
}
printf("\n");
printf("预测:");
for(i=0;i<n;i++)
{
printf("%8.4f",h0);
}
for(i=0;i<t;i++)
{
printf("%8.4f",h4);
}
printf("\n");
printf("残差:");
for(i=0;i<n;i++)
{
printf("%8.4f",e);
}
printf("\n");
printf("均方差比值:");
printf("\t\t%f",ee);
printf("\n");
printf("小概率:");
printf("\t\t%f",o);
printf("\n");
printf("==============================精度评价===========================");
printf("\n");
if(ee<0.35&&o>0.95)
printf("\t模型预测精度好!");
else if(ee<0.5&&o>0.8)
printf("\t模型预测精度一般!");
else if(ee<0.65&&o>0.7)
printf("\t模型预测精度勉强合格!");
else printf("\t模型预测精度不好");
printf("\n");
printf("==============================预测结束===========================");
printf("\n");
printf("\n");
printf("\n");
printf("\n");
scanf("%f",&o);
}
(2)基于GASA混合学习策略的BP神经网络的C语言源程序清单:
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#define M 10
#define N 16
#define m 10
#define jingdu 2000
#define jingdu1 1000
#define jingdu2 0.1
const double e=2.71828;
float in;
float out;
float get;
float one;
float two;
typedef struct
{
float yi;
float er;
float fi;
float Fi;
}dui;
dui du;
dui du1;
dui du2;
dui rao;
dui gd;
float T=100;
typedef struct
{
float year;
float num;
}Data;
Data data;
void chushihua()
{
for(int i=0;i<8;i++)
{
for(int j=0;j<M;j++)
{
for(int k=0;k<N;k++)
{
int h=rand()%700;
int w=rand()%10000;
float q;
q=(float)h/10000;
q=q+(float)w/10000/10000;
one=0.0375-q;//
h=0;
}
}
}
for(i=0;i<8;i++)
{
for(int j=0;j<N;j++)
{
for(int k=0;k<m;k++)
{
int h=rand()%24;
int w=rand()%1000;
float q;
q=(float)h/1000+(float)w/1000/1000;
two=q;
h=0; //
}
}
}
for(i=0;i<64;i++)
{ int h=i/8;
for(int j=0;j<M;j++)
{
for(int k=0;k<N;k++)
{
du.yi=one;
}
}
int z=i%8;
for(j=0;j<N;j++)
{
for(int k=0;k<m;k++)
{
du.er=two;
}
}
}
/* for(i=0;i<10;i++)
{
data.year=i;
printf("请输入第%d个数据:",i+1);
scanf("%f",&data.num);
}*/
data.year=1;
data.num=0.1106;
data.year=2;
data.num=0.1879;
data.year=3;
data.num=0.3153;
data.year=4;
data.num=0.4591;
data.year=5;
data.num=0.5274;
data.year=6;
data.num=0.5907;
data.year=7;
data.num=0.6748;
data.year=8;
data.num=0.7733;
data.year=9;
data.num=0.8713;
data.year=10;
data.num=1.0000;
}
void yuce(dui h)
{
float z,g;
for(int i=0;i<N;i++)
{ g=0;
for(int j=0;j<M;j++)
{
g=g+(j+1)*h.yi;
}
in=g;
}
for(i=0;i<N;i++)
{
z=in;
z=pow(e,z);
z=1/z;
z=1+z;
z=1/z;
out=z;
}
for(i=0;i<m;i++)
{ g=0;
for(int j=0;j<N;j++)
{
g=g+out*h.er;
}
get=g*10;
}
for(i=0;i<m;i++)
{
printf("get:%f\n",get);
}
scanf("%f",&z);
}
float shiyingdu(dui h)
{
float Fi=0;
float E=0;
float z=0;
float g=0;
float in;
float get;
float out;
for(int i=0;i<N;i++)
{
for(int j=0;j<M;j++)
{
g=g+data.year*h.yi;
}
in=g;
}
for(i=0;i<N;i++)
{
z=in;
z=pow(e,z);
z=1/z;
z=1+z;
z=1/z;
out=z;
}
for(i=0;i<m;i++)
{ g=0;
for(int j=0;j<N;j++)
{
g=g+out*h.er;
}
get=g;
}
E=0;
for(i=0;i<m;i++)
{
E=E+(get-data.num)*(get-data.num)/2;
}
if(E<0.01)
{
yuce(h);
exit(0);
}
return(E);
}
void gailv()
{
float l=0;
float max=0;
float min=1000;
for(int i=0;i<64;i++)
{
if(du.Fi>max)
max=du.Fi;
}
for(i=0;i<64;i++)
{
if(du.Fi<min)
min=du.Fi;
}
for(i=0;i<64;i++)
{
du.Fi=(du.Fi-min+0.000001)/(max-min);
}
for( i=0;i<64;i++)
{
l=l+du.Fi;
}
for(i=0;i<64;i++)
{
du.fi=du.Fi/l;
}
}
void lunpan()
{int t=0;
for(int k=0;k<64;k++)
{
float p=0;
int h=rand()%1000;
int w=rand()%1000;
float q;
q=(float)h/1000;
q=q+(float)w/1000/1000;
for(int i=0;i<64;i++)
{
p=p+du.fi;
if(q<p)
{
for(int w=0;w<M;w++)
{
for(int r=0;r<N;r++)
{
du1.yi=du.yi;
}
}
for(w=0;w<N;w++)
{
for(int r=0;r<m;r++)
{
du1.er=du.er;
}
}
t++;
break;
}
}
}
}
void jiaocha()
{
for(int b=0;b<64;b++)
{
int p=0;
int q=0;
int o=0;
int s1,s4;
float s2,s3,s5,s6;
p=rand()%64;
q=rand()%64;
o=rand()%10;
o=(float)o/10;
if(o<0.2)
{
s1=rand()%10;
s1=(float)s1/10;
s4=rand()%10;
s4=(float)s4/10;
for(int w=0;w<M;w++)
{
for(int j=0;j<N;j++)
{
s2=du1.yi*s1+du1.yi*(1-s1);
}
}
for(int i=0;i<N;i++)
{
for(int j=0;j<m;j++)
{
s3=du1.er*s4+du1.er*(1-s4);
}
}
for(i=0;i<M;i++)
{
for(int j=0;j<N;j++)
{
s5=du1.yi*(1-s1)+du1.yi*s1;
}
}
for(i=0;i<N;i++)
{
for(int j=0;j<m;j++)
{
s6=du1.er*(1-s4)+du1.er*s4;
}
}
for(i=0;i<M;i++)
{
for(int j=0;j<N;j++)
{
du1.yi=s2;
}
}
for(i=0;i<N;i++)
{
for(int j=0;j<m;j++)
{
du1.er=s3;
}
}
for(i=0;i<M;i++)
{
for(int j=0;j<N;j++)
{
du1.yi=s5;
}
}
for(i=0;i<N;i++)
{
for(int j=0;j<m;j++)
{
du1.er=s6;
}
}
}
}
}
void bianyi()
{
int p,o;
float r1,r2;
p=rand()%64;
o=rand()%10;
o=(float)o/10;
if(o<0.01)
{
for(int i=0;i<M;i++)
{
for(int j=0;j<N;j++)
{
r1=rand()%10/1000;
}
}
for(i=0;i<N;i++)
{
for(int j=0;j<m;j++)
{
r2=rand()%10/100;
}
}
for(i=0;i<M;i++)
{
for(int j=0;j<N;j++)
{
du1.yi=du1.yi+r1;
}
}
for(i=0;i<N;i++)
{
for(int j=0;j<m;j++)
{
du1.er=du1.er+r2;
}
}
}
}
void change()
{
for(int i=0;i<64;i++)
{
for(int j=0;j<M;j++)
{
for(int k=0;k<N;k++)
{
du.yi=du1.yi;
}
}
for(j=0;j<N;j++)
{
for(int k=0;k<m;k++)
{
du.er=du1.er;
}
}
}
}
void raodong()
{
for(int i=0;i<M;i++)
{
for(int j=0;j<N;j++)
{
rao.yi=du2.yi+(0.1-rand()%2000/10000)/10;
}
}
for(i=0;i<N;i++)
{
for(int j=0;j<m;j++)
{
rao.er=du2.er+(20-rand()%20)/10/100;
}
}
}
int qushe(dui d,dui r,float T)
{
float w=0;
float p=0;
float h=0;
w=d.Fi-r.Fi;
w=w/T;
p=pow(e,w);
h=rand()%1000/1000;
if(p>h)
{
return(1);
printf("\n概率:%f,%f\n",p,h);
}
else
{
return(0);
}
}
void yichuan()
{
for(int i=0;i<64;i++)
{
for(int j=0;j<M;j++)
{
for(int k=0;k<N;k++)
{
gd.yi=du.yi;
}
}
for(j=0;j<N;j++)
{
for(int k=0;k<m;k++)
{
gd.er=du.er;
}
}
du.Fi=5-shiyingdu(gd);
}
gailv();
lunpan();
jiaocha();
bianyi();
change();
for( i=0;i<64;i++)
{
for(int j=0;j<M;j++)
{
for(int k=0;k<N;k++)
{
gd.yi=du.yi;
}
}
for(j=0;j<N;j++)
{
for(int k=0;k<m;k++)
{
gd.er=du.er;
}
}
if(shiyingdu(gd)<0.01)
{
for(int j=0;j<N;j++)
{
for(int k=0;k<M;k++)
{
printf("%f ",gd.yi);
}
}
printf("\n");
for(j=0;j<M;j++)
{
for(int k=0;k<m;k++)
{
printf("%f ",gd.er);
}
}
printf("\n");
exit(0);
}
}
}
void tuihuo()
{
for(int i=0;i<10;i++)
{
int sj;
sj=rand()%63;
for(int j=0;j<M;j++)
{
for(int k=0;k<N;k++)
{
du2.yi=du.yi;
}
}
for(j=0;j<N;j++)
{
for(int k=0;k<m;k++)
{
du2.er=du.er;
}
}
float Ei,Ej;
Ei=shiyingdu(du2);
raodong();
Ej=shiyingdu(du2);
while(Ei>Ej)
{
raodong();
Ej=shiyingdu(du2);
}
if(Ej<0.01)
{
yuce(du);
exit(0);
}
if(T<0.01)
{
yuce(du);
exit(0);
}
if(qushe(du2,rao,T)==1)
{
for(int j=0;j<M;j++)
{
for(int k=0;k<N;k++)
{
du.yi=du2.yi;
}
}
for(j=0;j<N;j++)
{
for(int k=0;k<m;k++)
{
du.er=du2.er;
}
}
}
}
}
void main()
{
chushihua();
int n=1;
int jishu=0;
for(int i=0;i<2000;i++)
{
yichuan();
tuihuo();
float p=0;
p=log(n)/log(e);
n++;
p=1+p;
T=100/p;
printf(" 次数:%d,温度:%f\n",jishu++,T);
}
yuce(du);
printf("\n\n");
printf("\n");
exit(0);
}
(3)人口动力发展方程C语言源程序清单:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#define N 100//年龄分段
#define M 10//未来几年
void main()
{
FILE *fp = fopen("实验结果.txt","w");
float num,out,in,Nin,Nout,ch,gd,m,t;
float c1,c2,c3,c4,h;
float he;
int t0,tn,jh;
int i;
t0=1;
tn=10;
for(i=0;i<N;i++)
{
printf("请输入第%d年%d岁的人口:",t0,i);
scanf("%f",&num);
//printf("%f",num);
}
for(i=0;i<N;i++)
{
out=0;
in=0;
}
for(i=0;i<30;i++)
{
printf("请输入%d岁迁入比例:",i+20);
scanf("%f",&out);
// printf("%f",out);
}
for(i=0;i<30;i++)
{
printf("请输入%d岁迁出比例:",i+20);
scanf("%f",&in);
// printf("%f",in);
}
for(i=0;i<M;i++)
{
printf("请输入%d年迁入人数:",t0+i);
scanf("%f",&Nin);
// printf("%f",Nin);
}
for(i=0;i<M;i++)
{
printf("请输入%d年迁出人数:",t0+i);
scanf("%f",&Nout);
// printf("%f",Nout);
}
for(i=0;i<M;i++)
{
for(int j=0;j<N;j++)
{
printf("请输入%d年%d岁死亡率:",t0+i,j);
scanf("%f",&ch);
// printf("%f",t0+i,j+1,ch);
}
}
for(i=0;i<10;i++)
{ for(int j=0;j<35;j++)
{
printf("请输入第%d年%d岁妇女比:",i+1,j+15);
scanf("%f",&c1);
}
}
for(i=0;i<35;i++)
{
printf("请输入生育模式率");
scanf("%f",&c2);
}
printf("请输入总和生育率:");
scanf("%f",&c3);
for(i=0;i<10;i++)
{
printf("请输入新生婴儿存活率:");
scanf("%f",&c4);
}
he=0;
for(i=0;i<10;i++)
{
for(int j=15;j<51;j++)
{
he=he+num*c1*c2;
}
h=he*c3*c4;
}
for(i=0;i<M;i++)
{
for(int j=0;j<N;j++)
{
m=in*Nin-out*Nout;
gd=num*(1-ch)+m;
}
gd=h;
for(j=0;j<N;j++)
{
num=gd;
}
}
printf("\n");
for(i=0;i<M+1;i++)
{
for(int j=0;j<N;j++)
{
printf("%f ",num);
fprintf(fp,"%f ",num);
}
printf("\n");
fprintf(fp,"\n");
fprintf(fp,"\n");
fprintf(fp,"\n");
}
scanf("%f",&num);
}
哇~居然通过啦!好开心呢 楼主好人啊 gooooooooooooooooooooooooooooooooooooooooooooooooooooooood
页:
[1]