优化的遗传算法拟合

43岁的观点(30天)
半詹森
半詹森 2023年5月24日11:48
评论道: 明星黾 约16小时前
这就跟你问声好!
我申请了遗传算法参数拟合为一个已经存在的ODE体系,但似乎我的配件很差. .
我加载experiemental数据(xdata),由一个120 * 8矩阵,给出的测量在此期间ydata(120 * 1矩阵)
ydata =(数据);
xdata =[时间];
ftn = @ (x)规范(ydata-kinetics (x, xdata));
PopSz = 100;
改= 4;
optsAns = optimoptions (“遗传算法”,“PopulationSize”PopSz,“InitialPopulationMatrix”兰迪(1 e + 4, PopSz parm) * 1 e - 3,“MaxGenerations”5 e10,“FunctionTolerance”1 e-12“PlotFcn”@gaplotbestf,“PlotInterval”1);
[K fval exitflag、输出人口,分数)= ga (ftn改,[],[],[],[],0(改,1),正(改,1),[],[],optsAns);
我的动力学函数由8常微分方程4未知参数。
每当运行代码,我看到合适的很差(橙色线)
我不是很熟悉遗传算法函数,我想知道我该怎样才能提高拟合?
11日评论
明星黾
明星黾 39分钟前
在这个例子中,它不是贫穷,虽然我通常会得到更好的结果比我这里
t = [0.1
0.2
0.4
0.6
0.8
1
1.5
2
3
4
5
6);
c = (0.902 - 0.06997 0.02463 - 0.00218
0.8072 0.1353 0.0482 0.008192
0.6757 0.2123 0.0864 0.0289
0.5569 0.2789 0.1063 0.06233
0.4297 0.3292 0.1476 0.09756
0.3774 0.3457 0.1485 0.1255
0.2149 0.3486 0.1821 0.2526
0.141 0.3254 0.194 0.3401
0.04921 0.2445 0.1742 0.5277
0.0178 0.1728 0.1732 0.6323
0.006431 0.1091 0.1137 0.7702
0.002595 0.08301 0.08224 0.835);
ftn = @(θ)规范(c-kinetics(θ,t));
PopSz = 50;
改= 10;
optsAns = optimoptions (“遗传算法”,“PopulationSize”PopSz,“InitialPopulationMatrix”兰迪(1 e + 4, PopSz parm) * 1 e - 3,“MaxGenerations”5 e3,“FunctionTolerance”1平台以及);%为“答案”选项结构问题
%选择= optimoptions(“遗传算法”,“PopulationSize”、PopSz InitialPopulationMatrix,兰迪(1 e + 4, PopSz parm) * 1 e - 3,‘MaxGenerations’, 5 e3, FunctionTolerance, 1平台以及PlotFcn, @gaplotbestf, ' PlotInterval ', 1);
% optshf = optimoptions(“遗传算法”,“PopulationSize”、PopSz InitialPopulationMatrix,兰迪(1 e + 4, PopSz parm) * 1 e - 3,‘MaxGenerations’, 5 e3, FunctionTolerance, 1平台以及HybridFcn, @fmincon, PlotFcn, @gaplotbestf, ' PlotInterval ', 1);%与“HybridFcn”
t0 =时钟;
流(“\ nStart时间:% 4 d - % 2 d - % 2 d % 2 d: % 2 d: % 07.4 f \ n 't0)
开始时间:2023-05-25 16:50:49.4058
[θ,fval exitflag、输出人口,分数)= ga (ftn改,[],[],[],[],0(改,1),正(改,1),[],[],optsAns);
优化终止:平均不到options.FunctionTolerance健身价值的变化。
t1 =时钟;
流(“\ nStop时间:% 4 d - % 2 d - % 2 d % 2 d: % 2 d: % 07.4 f \ n ',t1)
停止时间:2023-05-25 16:51:16.4013
GA_Time =结束(t1、t0);
DT_GA_Time = datetime ([0 0 0 0 0 GA_Time],“格式”,“HH: mm: ss.SSS”);
流(' \ nElapsed时间:% 23.15 e \ t \ t % s \ n \ n”、GA_Time DT_GA_Time)
运行时间:2.699544200000000 e + 01 00:00:26.995
流(健身价值趋同= %。4 f \ nGenerations \ t \ t = % d \ n \ n '、fval output.generations)
健身价值趋同= 0.3321 = 1807
流(1,“\物常量:\ n”)
速率常数:
k1 = 1:长度(θ)
流(1,' \ t \ tTheta (% 2 d) = % 8.5 f \ n ',k1,θ(k1))
结束
θ(1)= 0.14839θ(2)θ= 1.07988(3)θ= 8.65595(4)θ= 16.25283(5)θ= 1.31069θ(6)= 0.50595(7)θ= 1.11451(8)= 0.05151θ(9)= 0.01602θ(10)= 0.00001
电视= linspace (min (t)、马克斯(t));
Cfit =动力学(θ,电视);
高清=情节(t、c、“p”);
k1 = 1:尺寸(c, 2)
简历(k1,:) =高清(k1) .Color;
高清(k1)。:MarkerFaceColor =简历(k1);
结束
持有
hlp =情节(电视、Cfit);
k1 = 1:尺寸(c, 2)
hlp (k1)。:颜色=简历(k1);
结束
持有
网格
包含(“时间”)
ylabel (“浓度”)
传奇(hlp组成(“C_ % d '1:尺寸(c, 2)),“位置”,“N”)
函数C =动力学(θ,t)
c0 =θ(7:10);
% c0 = [1, 0, 0, 0);
(T, Cv) =数值(@DifEq T c0);
%
函数dC = DifEq (t, c)
dcdt = 0 (4,1);
dcdt(1) =θ(1). * c(1)θ(2). * c (1);
dcdt(2) =θ(1)。* c(1) +θ(4)。* c(3)θ(3). * c(2)θ(5). * c (2);
dcdt(3) =θ(2)。* c(1) +θ(3)。* c(2)θ(4)。* c(3) +θ(6)。* c (4);
dcdt(4) =θ(5)。* c(2)θ(6). * c (4);
dC = dcdt;
结束
C =简历;
结束
一个选择是在一个循环中运行代码,记录参数向量( “θ” 这里)和结束健身价值和后代的数量(如果你想要,运行时间)在每个迭代中。这将是最容易记录在一个单元阵列。将其设置为迭代 One hundred. 次(临时去做别的事),然后返回来检查结果。很有可能其中一个会猜到失踪paarameters正确。然后您可以使用这些结果与梯度下降算法“微调”的参数估计,(中注释掉选项结构 “optshf” 已经有这个设置,如果你想使用它。)另一个选择是使用 lsqcurvefit 来调整估计参数:
[θ,Rsdnrm, Rsd, ExFlg OptmInfo, Lmda, Jmat] = lsqcurvefit (@kinetics theta0 t、c、零(大小(theta0)));
“theta0” “θ” 向量 遗传算法 提供了。

登录置评。

答案(0)

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!