| 查看: 2639 | 回复: 9 | |||
[求助]
遗传算法的一段程序请教解释
|
|
各位高手我在做遗传算法的东西,但是自己刚开始研究,高手给我解决一下下面的程序是什么意思吧: while generation<=maxgen ind=randperm(N-2)+2; % 随机配对交叉 A=fatherrand(:,ind(1 N-2)/2)); B=fatherrand(:,ind((N-2)/2+1:end)); % 多点交叉 rnd=rand(num,(N-2)/2); ind=rnd tmp=A(ind); A(ind)=B(ind); B(ind)=tmp; % % 两点交叉 % for kk=1 N-2)/2 % rndtmp=randint(1,1,num)+1; % tmp=A(1:rndtmp,kk); % A(1:rndtmp,kk)=B(1:rndtmp,kk); % B(1:rndtmp,kk)=tmp; % end fatherrand=[fatherrand(:,1:2),A,B]; |
» 猜你喜欢
康复大学泰山学者周祺惠团队招收博士研究生
已经有6人回复
AI论文写作工具:是科研加速器还是学术作弊器?
已经有3人回复
孩子确诊有中度注意力缺陷
已经有6人回复
2026博士申请-功能高分子,水凝胶方向
已经有6人回复
论文投稿,期刊推荐
已经有4人回复
硕士和导师闹得不愉快
已经有13人回复
请问2026国家基金面上项目会启动申2停1吗
已经有5人回复
同一篇文章,用不同账号投稿对编辑决定是否送审有没有影响?
已经有3人回复
ACS Applied Polymer Materials投稿
已经有10人回复
RSC ADV状态问题
已经有4人回复
» 本主题相关价值贴推荐,对您同样有帮助:
一个关于matlab的遗传算法的问题
已经有3人回复
关于遗传算法中交叉的程序
已经有5人回复
请教关于遗传算法编程的问题(俺是小白)
已经有4人回复
【其他】了解遗传算法
已经有12人回复
【讨论】遗传算法解决象棋问题
已经有8人回复
【求助】遗传算法求解eil51.tsp问题,离最优解还很远。怎么办?
已经有26人回复
【原创】请教遗传算法+车间调度相关的研究方向?谢谢
已经有4人回复
【分享】遗传算法与蚁群算法演示程序
已经有18人回复
wangyuewu08
木虫 (著名写手)
- 应助: 13 (小学生)
- 金币: 2794
- 红花: 4
- 帖子: 1141
- 在线: 279.1小时
- 虫号: 1290073
- 注册: 2011-05-09
- 性别: GG
- 专业: 制造系统与自动化

2楼2011-05-14 08:59:48
3楼2011-05-16 08:21:32
wangyuewu08
木虫 (著名写手)
- 应助: 13 (小学生)
- 金币: 2794
- 红花: 4
- 帖子: 1141
- 在线: 279.1小时
- 虫号: 1290073
- 注册: 2011-05-09
- 性别: GG
- 专业: 制造系统与自动化

4楼2011-05-16 09:06:47
zhouhanlei
银虫 (初入文坛)
- 应助: 0 (幼儿园)
- 金币: 422.4
- 帖子: 40
- 在线: 32.4小时
- 虫号: 1293923
- 注册: 2011-05-12
- 性别: GG
- 专业: 化石能源储存与输送

5楼2011-05-16 09:12:44
6楼2011-05-18 08:30:12
wangyuewu08
木虫 (著名写手)
- 应助: 13 (小学生)
- 金币: 2794
- 红花: 4
- 帖子: 1141
- 在线: 279.1小时
- 虫号: 1290073
- 注册: 2011-05-09
- 性别: GG
- 专业: 制造系统与自动化
【答案】应助回帖
★ ★ ★ ★
xiegangmai(金币+4): 谢谢应助! 2011-05-18 22:56:13
s20090281(金币+6): 很感谢你,以后还要多多请教呢 2011-05-19 08:28:59
xiegangmai(金币+4): 谢谢应助! 2011-05-18 22:56:13
s20090281(金币+6): 很感谢你,以后还要多多请教呢 2011-05-19 08:28:59
|
因为楼主和管理员都给了金币,今天又花时间把这代码看了几遍,组要是揣测那些没有交代清楚的条件(在其它子函数中定义的变量)。 我推测fatherrand是num行N列的数组,其中每一列元素代表种群中的一个个体,fatherrand是一个种群,num应该是染色体代码的长度。 先说说这一段: ind=randperm(N-2)+2; % 随机配对交叉 A=fatherrand(:,ind(1N-2)/2)); B=fatherrand(:,ind((N-2)/2+1:end)); ind=randperm(N-2)+2; 作用是将( N - 2 )进行全排,排列之后加上2是为了能够选取最后两列的个体,但是这样的话fatherrand的前2列始终不参加交叉,这个从代码的最后一句 fatherrand=[fatherrand(:,1:2),A,B]可以看出,是将前2列与交叉之后的A和B重新组成新的种群。 A=fatherrand(:,ind(1N-2)/2)); 作用是将( N - 2 )个个体的一半放在数组A中。 B=fatherrand(:,ind((N-2)/2+1:end)); 将另一半放在B中。 多点交叉我还没有看懂,在这里只说说我对两点交叉的理解: % % 两点交叉 % for kk=1: ( N-2)/2 % rndtmp=randint(1,1,num)+1; % tmp=A(1:rndtmp,kk); % A(1:rndtmp,kk)=B(1:rndtmp,kk); % B(1:rndtmp,kk)=tmp; % end for kk=1: ( N-2)/2; 作用是能够遍历A和B中的( N - 2 ) / 2个个体(从第一列到最后一列)。 rndtmp=randint(1,1,num)+1; 作用是产生一个[ 1, num ]的随机数,注意是闭区间,这个随机数确定了交叉点在染色体中的位置。由于只确定了一个交叉点,所以我觉得这应该叫单点交叉(我看到的一个GA算法的例子中是这样定义单点交叉的)。 % tmp=A(1:rndtmp,kk); % A(1:rndtmp,kk)=B(1:rndtmp,kk); % B(1:rndtmp,kk)=tmp; 这3行的作用是将A中某一列的( 1 : rndtmp )个元素与B中相应列的相应元素进行交换,也就是交叉。循环( N - 2 ) / 2次,将A和B中的相应个体均进行交叉。 最后一句的作用是将交叉后的个体与没有参与交叉的前2个个体进行组合,生成新的种群。 有空再帮楼主看看多点交叉的代码,写了这么大一坨字,希望楼主别嫌我太啰嗦 ![]() |

7楼2011-05-18 20:13:23

8楼2011-05-19 13:32:07
小新爱小白
金虫 (小有名气)
- 应助: 0 (幼儿园)
- 金币: 1365.5
- 红花: 1
- 帖子: 80
- 在线: 51.8小时
- 虫号: 1919956
- 注册: 2012-08-01
- 性别: GG
- 专业: 工程管理

9楼2012-08-06 19:42:32

10楼2012-08-06 20:12:28













N-2)/2));
回复此楼
