MATLAB的遗传算法在烃动力学参数标定中的应用.docVIP

MATLAB的遗传算法在烃动力学参数标定中的应用.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
MATLAB的遗传算法在烃动力学参数标定中的应用

MATLAB的遗传算法在烃动力学参数标定中的应用摘要:Matlab语言是一种简单、高效、功能极强的高级语言,在科学与工程计算领域中有着其他语言无法比拟的优势。遗传算法是计算机科学和进化论相结合的产物,在多变量优化问题方面,具有很多优点。我们创新性地采用遗传算法对进行生烃动力学模型公式中多个参数进行标定。在使用MATLAB编程实现的过程中,我们有针对性地、创造性地设计了编码方案、求解方案,并且将遗传算法和传统的数值优化方法结合起来,大大提高了计算的精度 本文针对新疆某油田的试验数据,采用遗传算法对动力学参数进行标定,并且把计算结果与采用传统优化方法得到的结果进行对比,拟和误差明显提高 关键词:农遗传算法;Matlab; 绝对误差;拟合误差 中图分类号: T18 文献标识码: A文章编号:XX年关于自适应下棋程序的论文中,首次提出了遗传算法这一术语。同年,DeJong完成了他的博士论文“遗传自适应系统的行为分析”,将Holland的模式理论与他的计算试验结合起来,进一步完善了选择、交叉和变异操作,提出了一些新的遗传操作技术。遗传算法流程如下: begin t=0; 初始化; 评估; while 不满足终止条件 do begin 重组获得; 评估; 从和中选择; t=t+1 end end 其中和分别代表第t代的双亲和后代,重组包括:交叉和变异;评估为进化操作,包括:选择 四、MATLAB编程基本思路 本文根据所考虑问题的特点,针对具体问题,创造性地设计了一种对于参数标定非常有效的、具有个性的遗传算法。其主要思路是:考虑到如果固定指前因子Aoi(i=1,2,…No),则目标函数(2-2)是待求的生油潜量XOi0 (i=1,2,…No)的二次函数,而约束条件(2-3)均为线性约束,因此,仅对指前因子Aoi(i=1,2,…No)应用遗传算法进行求解。对于给定的指前因子Aoi(i=1,2,…No),则通过普通的数值优化方法求解一个线性约束的二次规划问题得到生油潜量XOi0 (i=1,2,…No),即:通过遗传算法求解非线性参数Aoi(i=1,2,…No),在计算Aoi(i=1,2,…No)所对应的编码的适应性函数时,应用普通的数值优化方法求解线性参数XOi0 (i=1,2,…No),并计算拟合误差,将遗传算法和传统的数值计算方法很好地结合起来,发挥各自的优点 (一)编码方案 为了克服二进制编码的缺点,对于问题的变量是实向量的情况,我们直接采用实数编码。采用实数编码也便于引入与问题领域相关的启发信息以增加遗传算法的搜索能力 我们只对指前因子进行编码。假设指前因子的个数是No,则染色体的长度就数No,染色体的第i个基因对应于第i个指前因子Aoi(i=1,2,…No) (二)产生初始种群 具体操作为: for i=1:PopSize for j=1:No r=15+rand*3; Pop(i,j)=10?; end end 其中,PopSize为种群的规模,No为指前因子的个数,也是染色体的长度, (三)适应度函数的计算 定义个体AO=(AO1,AO2,…AONo)的适应值为 f 个体的AO=(AO1,AO2,…AONo)的适应值越大,说明参数标定准确性越高,反之,说明,误差越大 (四)选择操作 具体操作过程如下: NewPop(1,:)=Pop(min_i,:); for i=2:PopSize r=rand; for j=1:PopSize if r<=Rules(j) NewPop(i,:)=Pop(j,:); break; end end end (五)交叉操作 在这里我们采用两点交叉,交叉点随机选择 具体操作步骤为: CrossP=0.8; i=1; while i<PopSize r=rand; if (rCrossP) j1=round(rand*(No-1))+1; j2=round(rand*(No-1))+1; if (j1>j2) j=j1;j1=j2;j2=j; end tempX=NewPop(i,j1:j2); NewPop(i,j1:j2)=NewPop(i+1,j1:j2); NewPop(i+1,j1:j2)=tempX; end i=i+2; end 4-6变异操作 变异的操作步骤: MuteP=0.5; f

文档评论(0)

linsspace + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档