求解释一段遗传算法matlab代码% Pair and mateprob=flipud([1:keep]’/sum([1:keep])); % weights chromosomesodds=[0 cumsum(prob(1:keep))’]; % probability distribution[1:sum([1:keep]是指1到keep的和么?[0 cumsum(prob(1:keep))’]又是什
来源:学生作业帮助网 编辑:六六作业网 时间:2024/11/15 07:33:07
求解释一段遗传算法matlab代码% Pair and mateprob=flipud([1:keep]’/sum([1:keep])); % weights chromosomesodds=[0 cumsum(prob(1:keep))’]; % probability distribution[1:sum([1:keep]是指1到keep的和么?[0 cumsum(prob(1:keep))’]又是什
求解释一段遗传算法matlab代码
% Pair and mate
prob=flipud([1:keep]’/sum([1:keep])); % weights chromosomes
odds=[0 cumsum(prob(1:keep))’]; % probability distribution
[1:
sum([1:keep]是指1到keep的和么?
[0 cumsum(prob(1:keep))’]又是什么意思?
求解释一段遗传算法matlab代码% Pair and mateprob=flipud([1:keep]’/sum([1:keep])); % weights chromosomesodds=[0 cumsum(prob(1:keep))’]; % probability distribution[1:sum([1:keep]是指1到keep的和么?[0 cumsum(prob(1:keep))’]又是什
先看这个结构里面的这些函数都是干什么用的,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()运算的时候,又把结果从列向量转换成了行向量.
仅从这两行代码里面,就大概只能看出这个意思了.
不过简单一说,现在看不出来这个遗传算法的核心是什么样的,一般的神经网络里面只有连锁交换定律的应用,一般没有基因分离定律的应用.看这个样子,这是分离出来然后自由配对的做法,应该是比较高端的东西吧.