m基于遗传优化算法的公式参数拟合matlab仿真

news2024/11/30 20:30:59

目录

1.算法描述

2.仿真效果预览

3.MATLAB核心程序

4.完整MATLAB


1.算法描述

遗传算法的原理

       遗传算法GA把问题的解表示成“染色体”,在算法中也即是以二进制编码的串。并且,在执行遗传算法之前,给出一群“染色体”,也即是假设解。然后,把这些假设解置于问题的“环境”中,并按适者生存的原则,从中选择出较适应环境的“染色体”进行复制,再通过交叉,变异过程产生更适应环境的新一代“染色体”群。这样,一代一代地进化,最后就会收敛到最适应环境的一个“染色体”上,它就是问题的最优解。

       其主要步骤如下:

1.初始化

       选择一个群体,即选择一个串或个体的集合bi,i=1,2,...n。这个初始的群体也就是问题假设解的集合。一般取n=30-160。

       通常以随机方法产生串或个体的集合bi,i=1,2,...n。问题的最优解将通过这些初始假设解进化而求出。

2.选择

      根据适者生存原则选择下一代的个体。在选择时,以适应度为选择原则。适应度准则体现了适者生存,不适应者淘汰的自然法则。

给出目标函数f,则f(bi)称为个体bi的适应度。以

为选中bi为下一代个体的次数。

显然.从式(3—86)可知:

(1)适应度较高的个体,繁殖下一代的数目较多。

(2)适应度较小的个体,繁殖下一代的数目较少;甚至被淘汰。

这样,就产生了对环境适应能力较强的后代。对于问题求解角度来讲,就是选择出和最优解较接近的中间解。

3.交叉

       对于选中用于繁殖下一代的个体,随机地选择两个个体的相同位置,按交叉概率P。在选中的位置实行交换。这个过程反映了随机信息交换;目的在于产生新的基因组合,也即产生新的个体。交叉时,可实行单点交叉或多点交叉。

拟合公式:

 该公式经过化简实部、虚部分离得: 

公式化简 

令: 

所以: 

需要拟合的参数有: 

定义GA优化目标函数如下所示:

2.仿真效果预览

matlab2022a仿真结果如下:

3.MATLAB核心程序

%根据遗传算法进行参数的拟合
MAXGEN = 2000;
NIND   = 400;
Chrom  = crtbp(NIND,14*10);
%14个变量的区间
Areas  = [0   ,0   ,0   ,0   ,0   ,0    ,0   ,0   ,0   ,0    ,0   ,0   ,0   ,0;
          10  ,1   ,100 ,500 ,100 ,5e8  ,1   ,1   ,1   ,1    ,2e11,2e8 ,1e4 ,1e2];
 
FieldD = [rep([10],[1,14]);Areas;rep([0;0;0;0],[1,14])];
 
epls_inf_NIND    = zeros(NIND,1);
deltas_NIND      = zeros(NIND,1);
delta_epls1_NIND = zeros(NIND,1);
delta_epls2_NIND = zeros(NIND,1);
delta_epls3_NIND = zeros(NIND,1);
delta_epls4_NIND = zeros(NIND,1);
beta1_NIND       = zeros(NIND,1);
beta2_NIND       = zeros(NIND,1);
beta3_NIND       = zeros(NIND,1);
beta4_NIND       = zeros(NIND,1);
fc1_NIND         = zeros(NIND,1);
fc2_NIND         = zeros(NIND,1);
fc3_NIND         = zeros(NIND,1);
fc4_NIND         = zeros(NIND,1);
 
epls_inf         = zeros(MAXGEN,1);
deltas           = zeros(MAXGEN,1);
delta_epls1      = zeros(MAXGEN,1);
delta_epls2      = zeros(MAXGEN,1);
delta_epls3      = zeros(MAXGEN,1);
delta_epls4      = zeros(MAXGEN,1);
beta1            = zeros(MAXGEN,1);
beta2            = zeros(MAXGEN,1);
beta3            = zeros(MAXGEN,1);
beta4            = zeros(MAXGEN,1);
fc1              = zeros(MAXGEN,1);
fc2              = zeros(MAXGEN,1);
fc3              = zeros(MAXGEN,1);
fc4              = zeros(MAXGEN,1);
Error            = zeros(MAXGEN,1);
 
gen              = 0;
 
 
 
for a=1:1:NIND 
    epls_inf_NIND(a)    = epls_inf_0;      
    deltas_NIND(a)      = deltas_0;
    delta_epls1_NIND(a) = delta_epls1_0;
    delta_epls2_NIND(a) = delta_epls2_0;
    delta_epls3_NIND(a) = delta_epls3_0;      
    delta_epls4_NIND(a) = delta_epls4_0;
    beta1_NIND(a)       = beta1_0;
    beta2_NIND(a)       = beta2_0;          
    beta3_NIND(a)       = beta3_0;
    beta4_NIND(a)       = beta4_0;
    fc1_NIND(a)         = fc1_0;      
    fc2_NIND(a)         = fc2_0;
    fc3_NIND(a)         = fc3_0;
    fc4_NIND(a)         = fc4_0;    
    %计算对应的目标值
    [epls_1,epls_2] = func_obj(f,...
                               epls_inf_NIND(a),...
                               deltas_NIND(a),...
                               delta_epls1_NIND(a),delta_epls2_NIND(a),delta_epls3_NIND(a),delta_epls4_NIND(a),...
                               beta1_NIND(a),beta2_NIND(a),beta3_NIND(a),beta4_NIND(a),...
                               fc1_NIND(a),fc2_NIND(a),fc3_NIND(a),fc4_NIND(a));
    for m = 1:length(f)
        tmps1(m) = ((e1(m)-epls_1(m))^2)/(e1(m)^2);               
        tmps2(m) = ((e2(m)-epls_2(m))^2)/(e2(m)^2);    
    end
    E = sum(tmps1)+sum(tmps2);
    J(a,1)  = E;
end
 
Objv  = (J+eps);
gen   = 0; 
 
while gen < MAXGEN;   
      gen
      FitnV=ranking(Objv);    
      Selch=select('sus',Chrom,FitnV);    
      Selch=recombin('xovsp', Selch,0.9);   
      Selch=mut( Selch,0.01);   
      phen1=bs2rv(Selch,FieldD);   
      for a=1:1:NIND  
          if  gen == 1
              epls_inf_NIND(a)    = epls_inf_0;      
              deltas_NIND(a)      = deltas_0;
              delta_epls1_NIND(a) = delta_epls1_0;
              delta_epls2_NIND(a) = delta_epls2_0;
              delta_epls3_NIND(a) = delta_epls3_0;      
              delta_epls4_NIND(a) = delta_epls4_0;
              beta1_NIND(a)       = beta1_0;
              beta2_NIND(a)       = beta2_0;          
              beta3_NIND(a)       = beta3_0;
              beta4_NIND(a)       = beta4_0;
              fc1_NIND(a)         = fc1_0;      
              fc2_NIND(a)         = fc2_0;
              fc3_NIND(a)         = fc3_0;
              fc4_NIND(a)         = fc4_0;           
          else
              epls_inf_NIND(a)    = phen1(a,1);      
              deltas_NIND(a)      = phen1(a,2);
              delta_epls1_NIND(a) = phen1(a,3);
              delta_epls2_NIND(a) = phen1(a,4);
              delta_epls3_NIND(a) = phen1(a,5);      
              delta_epls4_NIND(a) = phen1(a,6);
              beta1_NIND(a)       = phen1(a,7);
              beta2_NIND(a)       = phen1(a,8);          
              beta3_NIND(a)       = phen1(a,9);
              beta4_NIND(a)       = phen1(a,10);
              fc1_NIND(a)         = phen1(a,11);      
              fc2_NIND(a)         = phen1(a,12);
              fc3_NIND(a)         = phen1(a,13);
              fc4_NIND(a)         = phen1(a,14);  
          end
          
          %计算对应的目标值
          [epls_1,epls_2] = func_obj(f,...
                                     epls_inf_NIND(a),...
                                     deltas_NIND(a),...
                                     delta_epls1_NIND(a),delta_epls2_NIND(a),delta_epls3_NIND(a),delta_epls4_NIND(a),...
                                     beta1_NIND(a),beta2_NIND(a),beta3_NIND(a),beta4_NIND(a),...
                                     fc1_NIND(a),fc2_NIND(a),fc3_NIND(a),fc4_NIND(a));
          for m = 1:length(f)
              tmps1(m) = ((e1(m)-epls_1(m))^2)/(e1(m)^2);               
              tmps2(m) = ((e2(m)-epls_2(m))^2)/(e2(m)^2);    
          end
          E = sum(tmps1)+sum(tmps2);
          JJ(a,1)  = E;
      end 
      Objvsel=(JJ+eps);    
      [Chrom,Objv]=reins(Chrom,Selch,1,1,Objv,Objvsel);   
      gen=gen+1; 
 
      %保存参数收敛过程和误差收敛过程以及函数值拟合结论
      epls_inf(gen)         = mean(epls_inf_NIND);
      deltas(gen)           = mean(deltas_NIND);
      delta_epls1(gen)      = mean(delta_epls1_NIND);
      delta_epls2(gen)      = mean(delta_epls2_NIND);
      delta_epls3(gen)      = mean(delta_epls3_NIND);
      delta_epls4(gen)      = mean(delta_epls4_NIND);
      beta1(gen)            = mean(beta1_NIND);
      beta2(gen)            = mean(beta2_NIND);
      beta3(gen)            = mean(beta3_NIND);
      beta4(gen)            = mean(beta4_NIND);
      fc1(gen)              = mean(fc1_NIND);
      fc2(gen)              = mean(fc2_NIND);
      fc3(gen)              = mean(fc3_NIND);
      fc4(gen)              = mean(fc4_NIND);
      Error(gen)            = mean(JJ);
end 
 
 
MIN=min(Objv); 
for ttt=1:1:size(Objv)     
    if Objv(ttt)<=MIN         
       tt=ttt;         
       break;     
    end
end
 
 
epls_inf_best    = epls_inf_NIND(tt);      
deltas_best      = deltas_NIND(tt);
delta_epls1_best = delta_epls1_NIND(tt);
delta_epls2_best = delta_epls2_NIND(tt);
delta_epls3_best = delta_epls3_NIND(tt);      
delta_epls4_best = delta_epls4_NIND(tt);
beta1_best       = beta1_NIND(tt);
beta2_best       = beta2_NIND(tt);          
beta3_best       = beta3_NIND(tt);
beta4_best       = beta4_NIND(tt);
fc1_best         = fc1_NIND(tt);      
fc2_best         = fc2_NIND(tt);
fc3_best         = fc3_NIND(tt);
fc4_best         = fc4_NIND(tt);  
 
%计算对应的目标值
[epls_best1,epls_best2] = func_obj(f,...
                                 epls_inf_best,...
                                 deltas_best,...
                                 delta_epls1_best,delta_epls2_best,delta_epls3_best,delta_epls4_best,...
                                 beta1_best,beta2_best,beta3_best,beta4_best,...
                                 fc1_best,fc2_best,fc3_best,fc4_best);
%画图
 
 
figure;
subplot(211);
loglog(e1,'b','linewidth',2);
hold on
loglog(epls_best1,'r','linewidth',2);
legend('原始数据','拟合数据');
subplot(212);
loglog(e2,'b','linewidth',2);
hold on
loglog(epls_best2,'r','linewidth',2);
legend('原始数据','拟合数据');
02_016m

4.完整MATLAB

matlab源码说明_我爱C编程的博客-CSDN博客

V

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/41052.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MySQL窗口函数

窗口函数在统计类的需求中很常见&#xff0c;稍微复杂一点的查询需求就有可能用到它&#xff0c;使用窗口函数可以极大的简化我们的 SQL 语句。像 Oracle、SQL Server 这些数据库在较早的版本就支持窗口函数了&#xff0c;MySQL 直到 8.0 版本后才支持它。 一般来说涉及复杂的分…

pytorch深度学习实战lesson29

第二十九课 深度学习硬件 这节课讲一下深度学习的硬件。具体来讲一下所谓的 CPU 和 GPU有什么区别&#xff0c;为什么 GPU 会快&#xff1f; 目录 CPU GPU 首先大家如果学习深度学习的话基本上都有一个GPU的电脑&#xff0c;如果你自己装一台机器的话&#xff0c;很有可能是…

【JavaScript高级】04-JavaScript函数增强

JavaScript函数增强函数属性和arguments函数对象的属性函数中的argumentsarguments转Array函数的剩余参数纯函数的理解和应用JavaScript纯函数定义纯函数案例柯里化的理解和应用柯里化定义组合函数理解和应用函数属性和arguments 函数对象的属性 在JavaScript中函数也是一个对…

维格云自定义按钮入门教程

目录 维格云自定义按钮功能简介 维格云自定义按钮适用场景 维格云自定义按钮设置步骤 开启插件 在拓展设置中创建按钮 在数据表中添加自定义按钮 效果展示 维格云自定义按钮注意事项 维格云自定义按钮功能简介 给不同情境下的数据详情页面,添加按钮,点击后可往另一个…

【博弈论】极小极大搜索(Minimax Algorithm)与α-β剪枝(Alpha-Beta Pruning)

文章目录一、极大极小搜索&#xff08;Minimax Algorithm&#xff09;二、α-β剪枝&#xff08;Alpha-Beta Pruning&#xff09;三、解题技巧一、极大极小搜索&#xff08;Minimax Algorithm&#xff09; 在零和博弈&#xff08;有完整信息的&#xff0c;确定的、轮流行动的&…

steam搬砖项目月入过万靠谱吗

大家好&#xff0c;我是阿阳 什么是国外steam游戏装备汇率差项目 一、项目介绍 其实&#xff0c;Steam就是一个美国的游戏平台&#xff0c;搬砖主要是搬的一款火遍全球的游戏CSGO的装备和饰品。CS听说过吧&#xff0c;这款游戏就是CS的一个系列。&#xff08;通俗易懂的理解就…

【C++数据结构】性能测量

性能测量 4.1 引言 容易计算内存的需求大小&#xff0c;只要知道编译后的代码和数据空间的大小就可以了&#xff1b; 数据空间的大小取决于用户所要解决的问题实例的大小。 要确定程序运行时间&#xff0c;需要通过实验来测量。 程序性能不仅依赖操作类型和数量&#xff0c…

Excel逆向查询的多种方法,赶快学起来

关于匹配查询&#xff0c;我们平时用的做多的就是VLOOKUP函数了&#xff0c;但VLOOKUP函数只能正向查找&#xff0c;不能逆向查询。 像是下面这种情况就不可以&#xff1a; &#xff08;现在我们想用编码去匹配书名&#xff09; 如果在不改变原表格结构的基础上查找出书目编码…

当MySQL和java通过媒婆navicate谈上了恋爱 ------ MySQL的安装和Java的连接

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! 本文由 秩沅 原创 **收录于专栏 数据库 ⭐当MySQL和java通过媒婆navicate谈上了恋爱⭐ 文章目录⭐当MySQL和java通过媒婆navicate谈上了恋爱…

vue组件库发布到npm

修改项目的信息 在package.json文件中&#xff1a; 修改Readme文件的信息 注册npm 账号 指路官网 vscode终端登录npm 执行 npm login 输入用户名&#xff0c;密码&#xff0c;邮箱&#xff0c;邮箱验证码 如下图 执行 npm publish 如下图 出现的问题 npm ERR! code E403 …

CSAPP Lab6:Malloc

文章目录一、实验简介二、隐式链表实现基本宏块的相关函数mm_initmm_mallocmm_freemm_reallocextend_heapblk_mergeblk_findblk_split使用下次匹配三、显式链表实现四、分离适配五、完整代码隐式链表显式链表课本实现一、实验简介 实现一个动态内存分配器。 tar xvf mallocla…

Linux 应急响应命令总结,收藏版

系统排查 系统基本信息 CPU 信息 CPU 信息&#xff1a;lscpu 操作系统信息 操作系统信息&#xff1a;uname -a 操作系统信息&#xff1a;cat /proc/version 模块信息 模块信息&#xff1a;lsmod 账户信息 系统所有账户 系统所有账户&#xff1a;cat /etc/passwd 超级权限账户 超…

3D-SKIPDENSESEG医学图像分割

蓝色三角、黄色三角、红色三角相对应。 得到第三个feature map&#xff0c;反卷积会恢复到原来的尺寸 Dense block&#xff0c;通道增加了 Transition&#xff0c;池化 用正则表达式把里面的h5文件匹配一下吧 os.path.join()把两个部分的路径拼一下 root_path —data_train *.…

[kubernetes]-k8s开启swap

导语&#xff1a;记录k8s开启swap后先后做的调整 测试版本 k8s1.20版本 使用参数--fail-swap-onfalse Environment"KUBELET_EXTRA_ARGS--fail-swap-onfalse"使用测试 可以开启swap不报错 但是pod使用swap不太理想。且无法实现在使用swap的时候限制pod的内存。会造…

【Java面试】List接口

文章目录Iterator 和 ListIterator 有什么区别&#xff1f;遍历一个 List 有哪些不同的方式&#xff1f;每种方法的实现原理是什么&#xff1f;Java中List 遍历的最佳实践是什么&#xff1f;说一下 ArrayList 的优缺点如何实现数组和 List 之间的转换&#xff1f;ArrayList 和 …

M4 tm4c1294单片机软件调式总结

1&#xff0c;框架图&#xff1a; 调式基本方法&#xff1a; &#xff08;1&#xff09;加串口打印初始化&#xff0c;单步跟踪查看&#xff0c;类似gdb的单步&#xff1b; &#xff08;2&#xff09;打印命令行&#xff0c;重点参数添加命令行打印; &#xff08;3&#xff…

Redis 的相关基础知识

【一】 Redis 中默认的端口号为什么是6379 图中的人名为 Alessia Merz &#xff0c;其中的 Merz 对应的九键输入法按出来的就是6379 【二】 Redis 默认的数据库 Redis 中默认使用的是16个数据库&#xff0c;类似数组下标从0开始&#xff0c;初始默认使用0号数据库 【三】 Redis…

vscode搭建Verilog HDL开发环境

工欲善其事&#xff0c;必先利其器。应该没有多少人会使用Quartus和vivado这些软件自带的编辑器吧&#xff0c;原因在于这些编辑器效率很低&#xff0c;Verilog HDL代码格式比较固定&#xff0c;通常可以利用代码片段补全加快书写。基本上代码写完之后才会打开Quartus或者vivad…

一文带你了解Spring中的事务管理

文章目录前言一、事务的基础概念二、spring中事务的使用声明式事务编程式事务如何选择事务方式三、spring中事务管理实现原理前言 本文将涉及以下知识点&#xff1a; 事务的基础概念spring当中事务的使用spring当中事务管理的实现原理 一、事务的基础概念 事务&#xff08;T…

python画图

python画图1.使用matplotlib画图2.使用pyecharts画图2.x pyecharts的三种图片渲染工具2.x.1 snapshot_selenium2.x.2 snapshot_phantomjs2.x.3 snapshot_pyppeteer1.使用matplotlib画图 2.使用pyecharts画图 pyecharts是一款将python与echarts结合的强大的数据可视化工具&…