24小时热门版块排行榜    

CyRhmU.jpeg
南方科技大学公共卫生及应急管理学院2026级博士研究生招生报考通知(长期有效)
查看: 1876  |  回复: 8

cq0932

金虫 (初入文坛)

[求助] 请教关于遗传算法的几个问题

1.在选择复制的过程中,适应度值大的个体将有更多的子孙,而相反的会被淘汰。在看书上代码《先进PID控制及其Matlab仿真 刘金琨著》的时候发现选择复制后的种群规模变小了,比如初始种群是30个个体,选择以后,就只剩十几个了。在交叉之前是否需要补全?如果要补全有什么比较好的方法?

2.接下来是交叉,交叉的对象应该如何选择?只从选择复制后产生的优势群体中选择吗?问题1中补全的部分是否参加交叉?未发生交叉的个体是直接保留原样到下一代吗?

3.然后是变异,是否只有交叉产生的个体才有可能发生变异?还是所有个体都会变异?另外,适应度大小对变异概率是否有影响?
回复此楼

» 猜你喜欢

» 本主题相关价值贴推荐,对您同样有帮助:

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

whzwcm

木虫 (著名写手)

劲升

【答案】应助回帖

感谢参与,应助指数 +1
来学习一下!社会很复杂啊
Believe myself!有志者事意成,加油!
2楼2012-12-20 22:53:18
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

wanghg_70

银虫 (小有名气)

【答案】应助回帖


感谢参与,应助指数 +1
cq0932: 金币+1, 有帮助, 感谢深夜里还在为虫友排忧解难~~ 2012-12-21 20:00:26
以前研究过GA,在交叉、变异之后,种群规模会增大一倍,之后在扩大的群体中选择复制,形成新的群体,恢复群体规模的大小。十多年没有研究了,尽供参考

[ 发自手机版 http://muchong.com/3g ]
坚持坚持再坚持
3楼2012-12-21 04:54:00
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

dreamrequiem

木虫 (小有名气)

【答案】应助回帖


感谢参与,应助指数 +1
cq0932: 金币+1, 有帮助, 感谢回复!能更有针对性的回答一下我的疑问吗? 2012-12-24 15:00:50
1.选择只是进化的第一步,选择出来的个体往往有3种用途,比如直接复制到下一代(elite selection),或者选择出来的个体进行交叉,或者是变异。

2.选择进行交叉的个体可以有多种办法,经典的有rank selection, roulette wheel selection, tournament selection。可以网上随意找到各自的选择办法。

3.变异有两种策略,一种是对交叉后的个体进行变异,另外一种办法是分别使用交叉和变异产生一定数量的下一代个体,两者之间分别产生。具体由问题而定。
4楼2012-12-21 23:54:08
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

DaleSong

银虫 (小有名气)

【答案】应助回帖


感谢参与,应助指数 +1
cq0932: 金币+1, 有帮助 2012-12-24 15:01:06
第一步中,选择之后种群要保持为30的,具体恢复方法,给你个用matlab写的遗传算法优化PID控制器的简单算法,你看看就明白了吧。
http://good.gd/2364258.htm
5楼2012-12-22 00:16:36
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

cq0932

金虫 (初入文坛)

引用回帖:
5楼: Originally posted by DaleSong at 2012-12-22 00:16:36
第一步中,选择之后种群要保持为30的,具体恢复方法,给你个用matlab写的遗传算法优化PID控制器的简单算法,你看看就明白了吧。
http://good.gd/2364258.htm

您贴的代码和我从书上看到的遗传算子部分是一样的,选择结束以后,种群的个体数是减少的,他是在交叉的时候把选择出来的个体和初始种群中的个体进行交叉,不知道这样处理是否合理?程序的结果是在交叉之后恢复了种群的个体数目。

%****** Step 2 : 选择算子******
   fi_sum=sum(fi);
   fi_Size=(Oderfi/fi_sum)*Size;
   fi_S=floor(fi_Size);                 %按较大的适应度选择个体
   kk=1;
   for i=1:1:Size
      for j=1:1:fi_S(i)               %选择与产生后代个体
       TempE(kk,:)=E(Indexfi(i),:);  
         kk=kk+1;                    %kk用于产生后代用
      end
   end
%************ Step 3 交叉算子************
pc=0.60;                             %交叉概率0.60
n=ceil(20*rand);
for i=1:2:(Size-1)
    temp=rand;               
    if pc>temp                       %若temp落在[0,0.6]区间,则进行交叉操作
    for j=n:1:20
        TempE(i,j)=E(i+1,j);
        TempE(i+1,j)=E(i,j);
    end
    end
end
TempE(Size,:)=BestS;
E=TempE;
6楼2012-12-24 14:58:01
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

dreamrequiem

木虫 (小有名气)

【答案】应助回帖

★ ★ ★ ★ ★ ★ ★
cq0932: 金币+7, ★★★★★最佳答案, 原来一直是我自己没有理解选择的真谛,非常感谢您的回答!! 2012-12-25 22:25:38
引用回帖:
4楼: Originally posted by dreamrequiem at 2012-12-21 23:54:08
1.选择只是进化的第一步,选择出来的个体往往有3种用途,比如直接复制到下一代(elite selection),或者选择出来的个体进行交叉,或者是变异。

2.选择进行交叉的个体可以有多种办法,经典的有rank selection, r ...

我觉得已经回复得非常有针对性了,看了下lz你的留言,我觉得你是完全没有理解什么是选择。population的size是不会变的,有一些ind被选择出来了,如你所说的按适应度比例选择,即roulette wheel selection,新的pop是通过重复地对这些选择出来的ind进行crossover和mutation来产生的。

无论如何,最后下一代的pop大小都会跟前一代的相同的。程序上来说,一个for循环就搞定了。
7楼2012-12-24 17:05:25
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

DaleSong

银虫 (小有名气)

【答案】应助回帖

引用回帖:
6楼: Originally posted by cq0932 at 2012-12-24 14:58:01
您贴的代码和我从书上看到的遗传算子部分是一样的,选择结束以后,种群的个体数是减少的,他是在交叉的时候把选择出来的个体和初始种群中的个体进行交叉,不知道这样处理是否合理?程序的结果是在交叉之后恢复了种 ...

合理性有待商榷吧。。。
8楼2012-12-24 18:37:11
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

marlywoos

新虫 (小有名气)

1,不用补全,适应度差的就是要被淘汰掉,适应度高的个体的基因才应该保留,或者以大概率保留,这样才能保证收敛。至于补全那是交叉的过程产生的,交叉之后自然就又30个了。
2,一般的交叉有一个交叉概率,从那10几个选出来的解中选两个交叉,得到新解,直到到达种群规模30。
3,变异怎么操作很灵活,你可以随意让它怎么变,但效果就不一定了,具体问题具体分析,变异是保持多样性的策略,防止陷入局部最优。
生活因为充实而快乐,也因为充实而有意义
9楼2012-12-31 16:36:40
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 cq0932 的主题更新
信息提示
请填处理意见