首页 > 编程知识 正文

模拟退火算法matlab(matlab遗传算法教程)

时间:2023-05-03 18:39:09 阅读:1783 作者:957

我们先来看看这个结构中的这些函数是做什么的,prob,probaby。[1:keep],这里我们应该可以大致看到keep是一个整数,1:1:keep相当于1:keep,例如1:10,就是1,2,3,4,5,6,7,8,9,10。步长为1,从1到保持。

右上角这个表示换位的符号,比如1:10,是一个1行10列的矩阵,通过换位变换成10行1列。

其中,sum([1: kep])表示这个矩阵的和(从1到keep),但这个语句prob=flipud([1: kep]'/sum([1: kep]);

总觉得少了一个。prob=flipud([1:keep]'。/sum([1: keep]);看来这应该能跑了。我没试过。直接在命令窗口中执行是可以的,但是如果在脚本文件中执行,可能会出现错误。和这个矩阵运算有关系,暂时放在这里。

然后到外面,这样我们62616964757 a 686964616 Fe 78988 e 69d 83313333263332就知道,在flipud()函数体的第一行,我们实际上是把每个从1到keep的数字除以1到keep的和,得到一个长度为keep的矩阵。值得注意的是,这个矩阵的和是1,将在下面使用。

然后flipud()函数将矩阵反相,比如[1,3,4,5],使用flipud()后变成[5,4,3,1]。请注意,此操作不同于sort()函数。此操作只反转先前的顺序,不排序。

从这里可以看出,这个keep的值实际上等于染色体的数量。这样,不同染色体的配对概率是不同的。从这里可以看出,染色体配对的概率应该是第一个中最高的,然后依次递减。

然后计算概率,cumsum(),再相加求和。例如,在matlab给出的例子中,我们也可以用[1,2,3]写1:3。一般来说,cumsum后的结果是[1,3,6],也就是从第一项加到这一项的和。这和高斯函数积分的感觉很像。用于计算概率累积分布。

然后奇数变量在总和结果前面加0。例如,刚才的例子[0 cumsum ([1,2,3]]变成了[0,1,3,6]。

请注意,他再次转置了这个位置,因为在计算第一行的prob时,他将一个行向量转换为一个列向量,现在他想在头部添加0,所以他在cumsun()操作期间将一个列向量的结果转换为一个行向量。

单从这两行代码,你大概只能看到这个意思。

但是简单来说,我们现在看不到这个遗传算法的核心是什么。一般只有连锁交换定律在神经网络中的应用,一般没有基因分离现象的应用。看这个,这是分离然后自由配对的做法。应该是更高端的东西。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。