① 目標方程和約束條件有微分方程,應該怎麼用遺傳演算法擬合
用遺傳演算法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的變化范圍加大。
對於高維地震模型的反演,由於參數太多,相應的模型字元串太長,目前用遺傳演算法作反演的計算成本還嫌太高。實際上,為了加快計算,不僅要改進反演技巧和傳代的控制技術,而且還要大幅度提高正演計算的速度,避免對遺傳演算法大量的計算花費在正演合成上。