有可能使用模拟退火和遗传算法的参数估计参数系统的常微分方程?

14日视图(30天)
你好,我想知道如果有可能应用遗传算法(GA)和模拟退火(SA)优化方法参数系统的常微分方程来估计最好的一组参数曲线拟合实验数据集。
我已经写了代码,使用nnlinfit和lsqcurvefit。第一个我获得好结果拟合,但一些参数有负值,所以我使用lsqcurvefit (trust-region-reflective算法)与下界= 0,但系统有很多局部最小值和很容易受初始值和上界,总是给予不同的结果。
方程5和6的常微分方程系统包括参数,和lsqcurvefit我使用这一行脚本
(参数)= lsqcurvefit (@odesystem parr0,时间、experimentaldata 0(大小(p)), [])
parr0是向量参数的初始值;我试着改变它几次获得总是不同的解决方案。金宝搏官方网站
由于这些原因我试图取代lsqcurvefit GA和SA但它不工作,因为他们不认识有效使用的函数@odesystem lsqcurvefit脚本。
在lsqcurvefit脚本@odesystem解决参数是一个函数,使用ode23s系统。
也许我需要重写代码为了给GA和SA正确形式的函数使用这些算法,你知道怎么解决这个问题?
你认为GA和SA的使用不正确的方法来获得最好的一组参数,因为系统的复杂性?
提前谢谢你。

接受的答案

明星黾
明星黾 2019年2月27日
这绝对是可以使用的 遗传算法 函数来估计参数的微分方程组。我尝试了这个自己。
使用一个例子 遗传算法 (基于前一个comparmental动力学建模问题 lsqcurvefit ):
%指出:
%
% 1。“θ”(参数)的论点必须首先在你
% funcition“动力学”,
% 2。你需要返回所有的值从DifEq因为你是合适的
%的所有值
函数C =动力学(θ,t)
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 =简历;
结束
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);
theta0 = [1; 1; 1; 1; 1; 1];
%(θ,Rsdnrm, Rsd, ExFlg OptmInfo, Lmda, Jmat] = lsqcurvefit (@kinetics theta0 t、c);
ftn = @(θ)规范(c-kinetics(θ,t));
PopSz = 500;
改= 6;
选择= optimoptions (“遗传算法”,“PopulationSize”PopSz,“InitialPopulationMatrix”兰迪(1 e + 4, PopSz parm) * 1 e - 3,“MaxGenerations”2 e3,“PlotFcn”,“gaplotbestf”);
t0 =时钟;
流(“\ nStart时间:% 4 d - % 2 d - % 2 d % 2 d: % 2 d: % 07.4 f \ n 't0)
% (B fval exitflag、输出人口,分数)= ga(现年53岁的ftn[]、[][],[], 0(53岁,1),正(53岁,1),[],[],选择)
[θ,fval、exitflag、输出]= ga (ftn改,[],[],[],[],0(改,1),正(改,1),[],[],选择)
t1 =时钟;
流(“\ nStop时间:% 4 d - % 2 d - % 2 d % 2 d: % 2 d: % 07.4 f \ n ',t1)
t0 GA_Time =结束(t1)
流(“\ nElapsed时间:% 23.15 e \ t \ t % 2 d: % 2 d: % 2 d % 03 d \ n '、GA_Time hmsdv (GA_Time))
流(1,“\物常量:\ n”)
k1 = 1:长度(θ)
流(1,' \ t \ tTheta (% d) = % 8.5 f \ n ',k1,θ(k1))
结束
电视= linspace (min (t)、马克斯(t));
Cfit =动力学(θ,电视);
图(1)
高清=情节(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₁(t)”,“c₂(t)”,“C_3 (t)”,“C_4 (t)”,“位置”,“N”)
注意的编码 “ftn” 适应度函数,及其与目标函数的关系我最初使用写道 lsqcurvefit 。我写这是我自己的试验品,所以它不是十分地comment-documented我通常做代码我发布在这里。我将提供尽可能多的解释我可以为任何不清楚。
遗传算法收敛需要一段时间,不过根据我的经验,他们通常是成功的如果你给他们机会。
2的评论
明星黾
明星黾 2019年2月28日
像往常一样,我的荣幸。
注意,在我的代码,我约束的参数要大于零,自定义的动力学参数都是积极的。
我怀疑复制会导致问题为他们提供你的微分方程和数据账户(相同的复制了独立和相关的变量,例如)。唯一影响那些会给复制更多的“重量”,在这个意义上,他们将有更多的影响健康(因此估计参数)比如果他们不是复制。如果 所有 数据复制,它只会减缓 遗传算法 函数。
如果你有问题 遗传算法 适合你的数据,我将使用原始的 “选择” 在我的代码结构 “改” 参数的数量你想要健康。我最初的人口比例为:
“InitialPopulationMatrix”兰迪(1 e + 4, PopSz parm) * 1 e - 3
所以规模大小提供适当的初始参数。(他们都在的范围 1 ,但你可以扩展他们的大小分别通过乘以一个向量的大小,和使用 bsxfun 函数,最有效地完成在一个单独的行代码。我选择了 兰迪 因为它仅仅是容易定义参数的初始范围。)我设计它开始一个巨大的和非常广泛的初始种群,专门为了容易找到最好的参数集的参数空间。它,尽管速度为代价,因为更大的人群产生慢收敛。
我偶尔会有 遗传算法 几次同样的问题如果它最终第一次疯狂偏离轨道。一个大的初始种群(我选择 500年 )通常可以防止这个。同样的,如果你有问题得到一个适合你的模型数据,仔细复习你的模型确定你正确编码。这一直是我 个人 经验,小错误可能导致重大的问题。

登录置评。

更多的答案(2)

alesmaz
alesmaz 2019年6月18日
你好我在这里粘贴同样的问题昨天发布了如果你有任何想法,既然你有经验为目的使用SA的估计。
我实现你的建议后,一个代码,估计参数的最佳设置的参数赋系统使用模拟退火本月的非线性回归或曲线拟合模型(nnlinfit、lsqcurvefit等),没能解决我的问题。
因为SA是一个算法,找出至少一个函数,我用它来找到最佳的参数集最小化残差平方和函数。
我想知道如果有一种方法来调查的善良估计,自回归/曲线拟合模型的雅可比矩阵和置信区间可以用于这个范围。有什么方法来计算置信区间SA这个应用程序?
如果需要我可以插入我的代码。
提前感谢您的回答
1评论
明星黾
明星黾 2019年6月18日
我只会使用估计的参数 nlinfit 用已知的参数估计,然后 nlparci nlpredci (或 fitnlm 和它的相关函数)。的 nlinfit (或 fitnlm )函数可能不会调整的参数估计(如果有的话),并将提供置信区间(或必要的信息来计算)。

登录置评。


crt56正义与发展党
crt56正义与发展党 2021年8月8日
编辑:crt56正义与发展党 2021年8月8日
你好,谢谢你的有用的代码。我是一个追随者。我有一组2 8微分方程参数估计说θθ(1)和(2)。我只有一个的实验数据集c(微分eqn 5)和相应的时间t。我尝试使用您的代码对ga参数的估计通过改变c = c = CV(:, 5),其余不变。但似乎健身功能带来错误。代码行抱怨没有足够的输入参数的遗传算法的输入。我是否可以修改我的健身功能在这种情况下吗?
4评论

登录置评。

类别

找到更多的在和迭代解算器输出显示帮助中心文件交换

社区寻宝

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

开始狩猎!