① 目标方程和约束条件有微分方程,应该怎么用遗传算法拟合
用遗传算法ga函数是可以拟合带有目标方程和约束条件且含有微分方程的系数,其拟合原则是误差最小估计原则。
解决问题的方法:1、建立自定义目标函数;2、建立自定义约束函数;3、建立自定义微分方程函数;4、误差最小控制函数;5、利用遗传算法ga函数求解拟合系数,利用ode45函数求解微分方程;6、建立嵌套函数计算
② 指数函数的遗传算法的问题
指数函数的遗传算法可以这样来考虑。
1、用最小估计原则建立自定义函数y=func(x),即min(x-xi)²
2、用ga遗传算法函数求得拟合系数
fitnessfcn=@func;
nvars=2;
k=ga(fitnessfcn,nvars) %拟合系数
3、y拟合值与y试验值比较,当两者比较接近,说明拟合是合理的。也可以用决定系数R²来判断。
4、求解结果
y=k0*(1-exp(-k1*t))
k 0= 10.020277259203;k 1=0.22885255916614
③ 遗传算法 参数拟合
我来说说我的思路吧
这种拟合问题的目的是求出拟合函数的参数,如多项式函数的系数
那么可以把拟合函数值与Y的绝对差值当做目标函数和适应度函数,相对应所求的拟合函数的参数作为遗传算法中的基因编码,每组参数对应一个拟合函数相当于一个染色体个体
遗传算法采用基本遗传算法即可
单点交叉,高斯变异
初步设想,望请指正
④ 用遗传算法求解多目标函数
用matlab来实现会非常简单,matlab中直接提供遗传算法工具箱,单目标的用ga来求解,多目标的用gamultiobj来求解。详细可以参考matlab帮助文件。
⑤ 遗传算法求曲线拟合
liugong 连遗传算法也不知道,还跑来给人居高临下的普及 算法知识,真是可笑,
可惜我对遗传算法研究不深,无法帮助楼主,
祝你早日解决问题。
liugong 应该看看计算机的基础,看看什么是算法,你那两个例子能叫算法吗?
⑥ matlab中用遗传算法拟合方程
例如:
已知数据队列 buf=【5410.】
x取值 1:n n是队列长度
函数 f(x)=a+b*sin(c*x+d) .
avg 是队列平均值
a b c d 为参数 a范围 (2/3,1)*avg
b范围 (0,1/3)*avg
c的范围 (0,24*pi)
d (0,2*pi)
1、首先定义目标函数
function y=ga_curfit(x)
global ydata n
t=1:n;
y=0;
for i=1:n
y=y+(ydata(i)-(x(:,1)+x(:,2).*sin(x(:,3).*t(i)+x(:,4)))).^2/n;
end
y=sqrt(y);
end
2、把数据b.txt放在工作空间目录中
然后再命令窗口中输入
clear
global ydata n
format long g
load b.txt
ydata=b';
n=length(ydata);
avg=sum(ydata)/n;
LB=[2/3*avg 0 0 0];
UB=[1*avg 1/3*avg 24*pi 2*pi];
nvars=4;
options=gaoptimset;
options=gaoptimset(options,'PopulationSize',300);
options=gaoptimset(options,'CrossoverFraction',0.8);
options=gaoptimset(options,'MigrationFraction',0.1);
options=gaoptimset(options,'Generations',500);
options = gaoptimset(options,'TolFun',1e-50);
%options = gaoptimset(options,'InitialPopulation',final_pop);
options = gaoptimset(options,'Display','final');
options = gaoptimset(options,'PopInitRange',[LB;UB]);
options = gaoptimset(options,'PlotFcns',@gaplotbestf);
options=gaoptimset(options,'Vectorize','on');%目标函数向量化
[x,fval,exitflag,output,final_pop,scores]=ga(@ga_curfit,nvars,[],[],[],[],LB,UB,[],options);
t=1:n;
plot(t,ydata,'r*');
hold on
plot(t,x(1)+x(2)*sin(x(3)*t+x(4)))
legend('数据','拟合')
⑦ 跪求多项式遗传编程拟合曲线的代码!!!
http://www.51kaifa.com/jswz/read.php?ID=1326
多项式可用于非线性信号的拟合,关键在于求解其各项系数。对于任何非线性函数,文中提出都有一个规范化的拟合方法。相应有一个规范化的多项式。该规范化多项式是以整数n为底的幂级数,最大幂次 nmax是x坐标区间的等分数,其系数可用一个规范化的矩阵积得到。文中又给出了固体电子学中的两个应用实例。当x坐标区间分段拟合应用时,还讨论了函数及其导数计算值的连续性条件,并以正弦函数不同区间的展开为例,作了演示。
[关键词] 多项式拟合,非线性信号,规范化方法,规范化矩阵
物理或化学量之间的非线性关系已受到广泛的重视。比较广泛应用的拟合方法是最小二乘法〔1〕,还有神经网络法〔2〕, 遗传算法〔3〕,退火算法〔4〕等。都是针对某一实际问题采用的方法。其中最小二乘法又分为最佳拟合直线(最小二乘拟合直线,端点直线和零基准最小二乘拟合直线)和最佳多项式拟合曲线。前者的优点是用一个正比直线代替曲线给计算带来许多方便。后者的精度明显比前者高。因此精度要求比较高的场合通常采用多项式拟合。
1 基本原理
有一非线性信号y=f(x)可以用一个多项式来表示
通常取到n=4便可以是近似表达非剧变的非多极值的单值关系。即有
ε为小量。
如何得到多项式各个系数成为解决问题的关键。这就有上面所提到各种方法。对于式(2)来说,一般需要有4次测量值即曲线上的四个点(如图1所示)
方可得到 。时,便相应有
这里张量的右上角标指标代表方阶,第2个右下标则是列指标,两者相同。 取决于所测物理量的大小,与具体问题有关。因此求解便不能用一种标准化的方法。现在提出一种规范的方法,也就是说,不管什么问题, 都可以转化为一种规范化的同构矩阵及相应的逆矩阵。这为非线性的问题采用多项式拟合提供了极大的方便。
令xn=nx1 , (5)
n为整数。即有等分点被称为横坐标的缩尺。例如取n=4,则有x1=xmax/4。于是有 :
可以得到下式:
其中n=x/x1,比较式(7)和 (10)可以得到
由式(2),即 就是式(9),可见这是一种标准算法,与x物理量无关,这是本文所追求的目标。与物理量有关的仅仅是其缩尺x1。
2. 应用实例
集成电路生产中经常要使用Van der Pauw和Rymaszewsk法测定薄层电阻。前者用下式[5]:
于是范德堡函数可以表示为
上式的曲线如图2所示,与ASTM中的曲线(图2中虚线)十分吻合[7]。式(14)在 =1到10的范围内的精度为
3. 讨论
上面已讨论了n=5时非线性函数展开式5阶多项式的情况。取5个等分点便可以实现精确的拟合。如果已得n=8等分点上非线性函数的单值。希望多项式展开到四阶,则分成二大段展开:
同样可以应用本文所介绍的多项式进行规范化拟合。可以看出,拟合的精度取决于非线性函数自身的光滑程度以及起伏变化的大小等分点的密集程度。等分点越密集,则规范化矩阵的阶数越高,求其逆矩阵越繁琐。因此,可以进行如上面所述的分段拟合,以降低矩阵的阶数。
3.1 分段计算时接合点上的函数连续性问题
只要 矩阵元的小数点位足够精确,在分段接合点 上,函数值肯定是连续的。即有:
证明从略。
3.2 分段计算时接合点上的导数的连续性问题
由4.1讨论可知y3、y4、y5, 可以严格保持原始值,导数在 (即x4点)的连续性就取决于他们的原始分布。图3中a、b、c表示出三种情况下y3、y4、y5的分布。除了第三种情况外,第一二两种情况是在一级近似下分段计算的导数是连续的。当要求导数在接合点连续时,拟合的相邻分段就应该有部分重叠。这时y(1)和y(2)做多项式拟合时横坐标就分成5或6等分。相应展开成5阶或6阶幂级数。在接合点x4上的导数在一级近似下就可取其左右两边的导数的平均值:
因此,即使出现了图3-c情况,导数也是连续的。为了说明上述做法的可行性,下面以非线性函数sin(x)及其导数为例来加以印证。将x坐标的等分点取为 这就代表一个起伏变化的函数,有推广应用价值。现让二分段有部分重叠,用上面介绍的规范化方法分别得到二分段的多项式拟合结果:
图4示出各拟合式的曲线与sin(x)曲线的比较,以观察两者接近情况以及接合点上函数连续情况。图5示出上述拟合式的导数与sin(x)ˊ=cosx 曲线的比较。可见导数也是连续的。总之,本文所提出的方法方便,简单,拟合精度高,标准规范的特点。当拟合点多时,为降低矩阵的阶数,可以分段拟合。只要逆矩阵元的小数位足够精确,接合点上拟合式肯定连续。当两段间有部分重叠时,导数也是连续的。
参考文献
[1] 孙以材,刘玉岭,孟庆浩,压力传感器的设计制造与应用,(北京)冶金工业出版社(2000)
[2] 王伟,人工神经网络原理,北京航空航天出版社(1995)
[3] Helena Szezerbicka and Matthias Becker,Genetic Algorithms : A tool for modeling simulation and optimization of complex system . Cybernetics and systems : An International Journal , 1998 , 29 : 639-659 .
[4] 姚姚,蒙特卡洛非线性反演方法及应用,(北京)冶金工业出版社(1997).
[5] L. J. van der pauw, Philips Research Reports 13(1958), 1.
[6] Rymaszewski R., Electron. Lett. , 3 (1967), 57.
[7] ASTM F76-68,1971 Annual book,part 8,P652-668
⑧ 如何用matlab解决多元遗传算法问题
如何用matlab解决多元遗传算法的极值问题?可以按下列步骤做
1、首先,建立自定义带条件的最大值目标函数文件,ga_fun.m
if x(1)+x(2)>=-1
y=-(exp(-0.1*(x(1)^4+x(2)^4))+ exp(cos(2*pi*x(1))+cos(2*pi*x(2)))
)
else
y=inf
end
式中:x=x(1),y=x(2)
2、利用ga遗传算法工具箱求解
3、在工具箱中,Fitness function项输入@ga_fun;Number of variables项输入2;Lower项输入[-1,2];Upper项输入[2,1];
4、点击Start按钮,运行可以得到 fmax(0,0)值(Objective function value)。说明这里负号是最大值的标志
运行界面
⑨ 请问采用什么方法能拟合出方程里的两个参数
采用什么方法能拟合出方程里的两个参数?一般可以用nlinfit()、 lsqcurvefit()、 lsqnonlin()这三个常用的函数来拟合系数,也可以用遗传算法来求。今以nlinfit函数为例说明,其拟合过程:
第一步,将三个自变量赋值给x,一个因变量赋值给y。即 x=[自变量1,自变量2,自变量3];y=[因变量];
第二步,自定义数学模型表达式。即 func=@(a,x) 数学模型表达式
第三步,初定拟合系数的初值,即a0=[a01,a02,a03,a04] %这里假定未知系数有4个
第四步,使用nlinfit函数求解其数学模型的系数,即
[a,r,J]=nlinfit(x,y,func,x0);
第五步,使用 nlparci函数求拟合系数的置信区间,即
ci = nlparci(p,r,J)
第六步,计算拟合值,即 yi=func(a,x)
第七步,计算拟合精度R²,判断拟合是否成功。
⑩ 遗传算法
遗传算法是从代表问题可能潜在解集的一个种群开始的,而一个种群则由经过基因编码的一定数目的个体组成。每个个体实际上是染色体带有特征的实体。染色体作为遗传物质的主要载体,即多个基因的集合,其内部表现(即基因型)是某种基因的组合,它决定了个体形状的外部表现,如黑头发的特征是由染色体中控制这一特征的某种基因组合决定的。因此,在一开始需要实现从表现型到基因型的映射即编码工作。由于仿照基因编码的工作很复杂,我们往往进行简化,如二进制编码。初始种群产生之后,按照适者生存和优胜劣汰的原理,逐代(generation)演化产生出越来越好的近似解。在每一代,根据问题域中个体的适应度(fitness)大小挑选(selection)个体,并借助于自然遗传学的遗传算子(genetic operators)进行组合交叉(crossover)和变异(mutation),产生出代表新的解集的种群。这个过程将导致种群自然进化一样的后生代种群比前代更加适应环境,末代种群中的最优个体经过编码(decoding),可以作为问题近似最优解。
5.4.1 非线性优化与模型编码
假定有一组未知参量
xi(i=1,2,…,M)
构成模型向量m,它的非线性目标函数为Φ(m)。根据先验知识,对每个未知量都有上下界αi及bi,即αi≤x≤bi,同时可用间隔di把它离散化,使
di=(bi-αi)/N (5.4.1)
于是,所有允许的模型m将被限制在集
xi=αi+jdi(j=0,1,…,N) (5.4.2)
之内。
通常目标泛函(如经济学中的成本函数)表示观测函数与某种期望模型的失拟,因此非线性优化问题即为在上述限制的模型中求使Φ(m)极小的模型。对少数要求拟合最佳的问题,求目标函数的极大与失拟函数求极小是一致的。对于地球物理问题,通常要进行杀重离散化。首先,地球模型一般用连续函数表示,反演时要离散化为参数集才能用于计算。有时,也将未知函数展开成已知基函数的集,用其系数作为离散化的参数集xi,第二次离散化的需要是因为每一个未知参数在其变化范围内再次被离散化,以使离散模型空间最终包含着有限个非线性优化可选择的模型,其个数为
地球物理数据处理教程
其中M为未知参数xi的个数。由此式可见,K决定于每个参数离散化的间隔di及其变化范围(αi,bi),在大多数情况下它们只能靠先验知识来选择。
一般而言,优化问题非线性化的程度越高,逐次线性化的方法越不稳定,而对蒙特卡洛法却没有影响,因为此法从有限模型空间中随机地挑选新模型并计算其目标函数 Φ(m)。遗传算法与此不同的是同时计算一组模型(开始时是随机地选择的),然后把它进行二进制编码,并通过繁殖、杂交和变异产生一组新模型进一步有限的模型空间搜索。编码的方法可有多种,下面举最简单的例说明之,对于有符号的地球物理参数反演时的编码方式一般要更复杂些。
假设地球为有三个水平层的层次模型,含层底界面深度hj(j=1,2,3)及层速度vj(j=1,2,3)这两组参数。如某个模型的参数值为(十进制):
h1=6,h2=18,h3=28,单位为10m
v1=6,v2=18,v3=28,单位为 hm/s
按正常的二进制编码法它们可分别用以下字符串表示为:
地球物理数据处理教程
为了减少字节,这种编码方式改变了惯用的单位制,只是按精度要求(深度为10m,波速为hm/s)来规定参数的码值,同时也意味着模型空间离散化间距di都规格化为一个单位(即10m,或hm/s)。当然,在此编码的基础上,还可以写出多种新的编码字符串。例如,三参数值的对应字节顺序重排,就可组成以下新的二进制码串:
地球物理数据处理教程
模型参数的二进制编码是一种数学上的抽象,通过编码把具体的非线性问题和生物演化过程联系了起来,因为这时形成的编码字符串就相当于一组遗传基因的密码。不仅是二进制编码,十进制编码也可直接用于遗传算法。根据生物系统传代过程的规律,这些基因信息将在繁殖中传到下一带,而下一代将按照“适者生存”的原则决定种属的发展和消亡,而优化准则或目标函数就起到了决定“适者生存”的作用,即保留失拟较小的新模型,而放弃失拟大的模型。在传带过程中用编码表示的基因部分地交合和变异,即字符串中的一些子串被保留,有的改变,以使传代的过程向优化的目标演化。总的来说,遗传算法可分为三步:繁殖、杂交和变异。其具体实现过程见图5.8。
图5.8 遗传算法实现过程
5.4.2 遗传算法在地震反演中的应用
以地震走时反演为例,根据最小二乘准则使合成记录与实测数据的拟合差取极小,目标函数可取为
地球物理数据处理教程
式中:Ti,0为观测资料中提取出的地震走时;Ti,s为合成地震或射线追踪算出的地震走时;ΔT为所有合成地震走时的平均值;NA为合成地震数据的个数,它可以少于实测Ti,0的个数,因为在射线追踪时有阴影区存在,不一定能算出合成数据Tj,0。利用射线追踪计算走时的方法很多,参见上一章。对于少数几个波速为常数的水平层,走时反演的参数编码方法可参照上一节介绍的分别对深度和速度编码方法,二进制码的字符串位数1不会太大。要注意的是由深度定出的字符串符合数值由浅到深增大的规律,这一约束条件不应在杂交和传代过程中破坏。这种不等式的约束(h1<h2<h3…)在遗传算法中是容易实现的。
对于波场反演,较方便的做法是将地球介质作等间距的划分。例如,将水平层状介质细分为100个等厚度的水平层。在上地壳可假定波速小于6400 m/s(相当于解空间的硬约束),而波速空间距为100m/s,则可将波速用100m/s为单位,每层用6位二进制字符串表示波速,地层模型总共用600位二进制字符串表示(l=600)。初始模型可随机地选取24~192个,然后通过繁殖杂交与变异。杂交概率在0.5~1.0之间,变异概率小于0.01。目标函数(即失拟方程)在频率域可表示为
地球物理数据处理教程
式中:P0(ωk,vj)为实测地震道的频谱;ωk为角频率;vj为第j层的波速;Ps(ωk,vj)为相应的合成地震道;A(ωk)为地震仪及检波器的频率滤波器,例如,可取
A(ω)=sinC4(ω/ωN) (5.4.6)
式中ωN为Nyquist频率,即ωN=π/Δt,Δt为时间采样率。参数C为振幅拟合因子,它起到合成与观测记录之间幅度上匹配的作用。C的计算常用地震道的包络函数的平均比值。例如,设E[]为波动信号的包络函数,可令
地球物理数据处理教程
式中:tmax为包络极大值的对应时间;J为总层数。包络函数可通过复数道的模拟取得。
用遗传算法作波速反演时失拟最小的模型将一直保存到迭代停止。什么时候停止传代还没有理论上可计算的好办法,一般要显示解空间的搜索范围及局部密度,以此来判断是否可以停止传代。值得指出的是,由(5.4.4)和(5.4.5)式给出的目标函数对于有误差的数据是有问题的,反演的目标不是追求对有误差数据的完美拟合,而是要求出准确而且分辨率最高的解估计。
遗传算法在执行中可能出现两类问题。其一称为“早熟”问题,即在传代之初就随机地选中了比较好的模型,它在传代中起主导作用,而使其后的计算因散不开而白白浪费。通常,增加Q值可以改善这种情况。另一类问题正相反,即传相当多代后仍然找不到一个特别好的解估计,即可能有几百个算出的目标函数值都大同小异。这时,最好修改目标函数的比例因子(即(5.4.5)式的分母),以使繁殖概率Ps的变化范围加大。
对于高维地震模型的反演,由于参数太多,相应的模型字符串太长,目前用遗传算法作反演的计算成本还嫌太高。实际上,为了加快计算,不仅要改进反演技巧和传代的控制技术,而且还要大幅度提高正演计算的速度,避免对遗传算法大量的计算花费在正演合成上。