最近对GA算法的一些思考

最近多次试验了下代码,发现了一些很有意思的事情,主要涉及到的问题是分别用实值编码和二进制编码对一个问题的解决的收敛速度等的体会,分别总结下:

1:用来做实验的目标函数是 miny=x21+x22s.t.x1,x2[5.12,5.12]

2:大概的流程就是这样子:随机初始化一定数量的种群,评估fitness,根据fitness删除掉不需要的个体,从剩余的个体中选择出来父亲来生孩子,变异。

3:其中删除不需要的个体,这个地方可以事先设定,比如我每次的评估之后只需要一般的父类,那么就删除一半就好了。删除的策略可以是把fitness不好的删除掉。剩下的流程就没啥问题了。也可以按照一定的策略,比如roulette wheel等思路,但是经过我的实验发现,以及和别的老师讨论发现这个效果不好,并且实践中很少有人这么来用的。具体怎么用,接下来说。

4:经过讨论和试验,发现如果想要好的结果就这么来操作:首先还是初始化,评估。然后随机从这个种群中取出来2个,找出其中fitness最好的一个 p1 ,同样在随机取2个出来,找出fitness最好的一个 p2 。接着用一定策略产生后代,然后一直产生够后代的数量等于种群数量,接着抛弃掉之前的种群。

5:其实第四部包含了selection和crossover了,具体的产生后代的策略还可以在 p1 p2 选出之后,搞个crossover_rate,来决定是直接复制这2个父类当做后代,还是交配产生,交配的策略可以是single point策略。

6:接着就是mutation了,这个没啥好说的了。

7:我分别用real value和binary 的方法编码基因,发现real value的方法比较方便一点,用binary的方法的时候,分别尝试了用8,10,20长度来编码一个基因,发现20的时候最好,8的时候最小化到一个值之后就弄不下去了,我发现是此时是种群中不相同的个体很少很少,也就是说大部分都是一样的个体,类别太少了。而长度增大以后,可以在一定程度上导致个体多样性,但是能不能从mutating的角度来增大多样性,我还没测试,我这里测试的是每次只有 10% 的个体产生mutation,并且每个个体上只有一位产生变异。

8:收敛速度都还是挺快的,只是最终收敛到的那个最好结果不一定都一样,还是需要多写写,多测试才知道!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值