當前位置:編程學習大全網 - 源碼下載 - 求解釋壹段遺傳算法matlab代碼

求解釋壹段遺傳算法matlab代碼

先看這個結構裏面的這些函數都是幹什麽用的,prob,概率。[1:keep],這裏應該能大概看出來keep是整數,1:keep 等價於1:1:keep,比如1:10,就是1,2,3,4,5,6,7,8,9,10。步長為1,從1到keep.

右上角的',這個符號,表示轉置,比如1:10,是壹個1行10列的矩陣,通過轉置變成10行壹列。

其中,sum([1:keep]),表示對這個矩陣(從1到keep求和),但是這個語句 prob=flipud([1:keep]'/sum([1:keep]));

裏面總覺得缺少了壹個.。prob=flipud([1:keep]'./sum([1:keep])); 這樣看來應該才能運行,我沒嘗試,在command window裏面直接做是可以的,但是在腳本文件裏面做,可能會報錯。這個和矩陣運算有關,暫且放在這裏。

然後到外部,這樣我們知道了在第壹行flipud()函數體裏面,實際上是在用1到keep的每壹個數,除以1到keep的和值,得到壹個長度為keep的矩陣。值得註意的是,這個矩陣的和值為1,在下面會用到這壹點。

然後flipud()函數的作用,是把矩陣倒置,比如[1,3,4,5],使用flipud()之後變成[5,4,3,1]。註意,這個操作和sort()函數不同,這個只是把以前的順序倒置,並不排序。

從這裏大概可以看出來,其實這個keep的值,等於chromosomes,染色體數量。這樣,對於不同的染色體,配對概率就不壹樣了。從這裏可以看出來,染色體配對概率應該是第壹條最高,然後依次遞減。

然後計算或然率,cumsum(),進行累加求和,比如matlab中給出的例子,我們用[1,2 ,3] 也可以寫作1:3,來說,cumsum之後的結果是[1, 3, 6],也就是從第壹個開始加和,壹直加到這壹項。這壹點,非常類似高斯函數積分的感覺。用來計算概率cumulative distribution。

然後odd變量,把0加在了cumsum結果的前面,比如剛剛的例子[0 cumsum([1, 2, 3])],就變成了[0, 1, 3,6]。

註意這個地方他又轉置了壹次,因為在第壹行計算prob的時候,他把壹個行向量,轉換成了列向量,然後現在要把0加在頭上,所以在進行cumsun()運算的時候,又把結果從列向量轉換成了行向量。

僅從這兩行代碼裏面,就大概只能看出這個意思了。

不過簡單壹說,現在看不出來這個遺傳算法的核心是什麽樣的,壹般的神經網絡裏面只有連鎖交換定律的應用,壹般沒有基因分離定律的應用。看這個樣子,這是分離出來然後自由配對的做法,應該是比較高端的東西吧。

  • 上一篇:如何看待太極拳申遺成功?
  • 下一篇:2010年有哪些電影大片要上映?
  • copyright 2024編程學習大全網