“matlab中 a=1:19; 如何实现a中19个数的随机交换,用遗传算法如何实现diyi步的编码 谢谢 ”
就是这个问题,您的回答还是用二进制的来转换的吧
diyi步的编码:假设当前的两个个体分别为:A:1 2 3 4 5 6……19,B:19 18 17 16 ……1;
第二步的交叉:随机产生一个1到19之间的整数,假设为10。那么这时候就可以将个体A的第10位到第19位数字放到B的前面,得到新个体C:10 11 ……19 | 19 18 17 16……1;同理,将个体B的第10位到第19位数字放到A的前面,得到新个体D:10 9 8 ……1 | 1 2 3 4……19。这时候C和D中的部分数字是重复的,那么就从“|”线后去掉和前面重复的数字,Z终得到一个1到19的随机排列的数字,也就是两个满足条件的新个体C和D。
第三步的变异:针对个体A,随机产生一个1到19之间的整数,假设为10,那么变异就是将个体A的第10位上的数字与第11位上的数字相交换,这样就实现了一个随机交换,也就是变异。变异方法还有很多,比如随机产生两个整数相交换等。
Z后,你这个问题非常类似于旅行商问题(英文叫TSP),强烈建议你找一找遗传算法解决TSP问题的文章来看,百度文库就可以搜到很多。这种编码方法有人叫做实数编码,有人叫做类似于二进制的按位编码,反正编码方法就是这样,怎么称呼无所谓。