少儿编程算法科普帖:遗传算法之——袋鼠故事

网友投稿 2018-02-22 22:29

https://cdn.china-scratch.com/timg/180224/2229162291-0.jpg

      前几天休息,家里的小丫头跟我说想去几个地方玩,要去科技馆、游乐场 、动物园。周日一大早,我就打电话看路线规划行程,科技馆的门票没有了,游乐场开到晚上8点,动物园5年关门。

     了解这些之后,最终确定了上午9点出发,下午2点从动物园出来去游乐场,晚上5点半回家。孩子玩了一天很开心,但是有点遗憾没去成科技馆。告诉她说,很多事情不能尽善尽美,能去上两个地方也挺好的。

     这个问题有点像计算机算法中的”寻找局部最优解“,虽然存在”全局最优解“,但是受条件限制,退而求其次也是不错的做法。

      其实,如果获得”全局最优解“——妥善安排三个行程,实现无缝衔接也是能做到的,只是需要更长的计划时间。 当然,这是一个小小小小的问题,用脑袋算算就能想明白。可如果面对一个庞大的问题现状的时候,该用什么方法解决呢?有什么算法可以最终解决这个问题呢?


     出个难题 ,假如:

     我们要让一只可以跳一跳的袋鼠在连绵起伏的喜马拉雅山脉中,找到最高的珠穆朗玛峰。

https://cdn.china-scratch.com/timg/180224/22291633N-1.jpg

袋鼠?!你确定说的是袋鼠?!!袋鼠不是在澳大利亚吗?

https://cdn.china-scratch.com/timg/180224/2229163113-2.jpg

哦,我只是举个例子,我想要用这个可以跳跳跳的形象来说明一个问题——寻找局部最优解和全局最优解。当然你想像用”跳一跳中的小人”也行。对于小孩来说,可以不会编码,明白这个道理,以后在解决实际问题中就不纠结了。


       连绵起伏的雪山?抽象成数学大约是这个样子啦:

https://cdn.china-scratch.com/timg/180224/2229163F9-3.jpg

一、      爬山法—寻找局部最优解


傻傻的袋鼠被安排在一个波谷出场,它会四周的去看,目力所及,哪个地方比现在高,就跳到哪!这样它就会跳啊跳啊,慢慢的,它会发现,咦,周围没有比我现在站着的地方高了!!我现在是最高的!!!


可是呢,因为它的探测范围太小(视力有限),其实它只是在其中一个山峰上,比这个山峰高的还有10000多个!珠穆朗玛峰还不知道在哪里。它只是找到了一个它目力所及的最高点,这就是局部最优解,这个东东就是有用的,没有最好的时候 ,它是相对最好的,

如果它要想办法找到珠穆朗玛峰,那就需要用遗传算法找到全局最优解


二、  遗传算法——寻找全局最优解

还是袋鼠,不过,这次是一大群,它们被莫名其妙的零散地遗弃于喜马拉雅山脉。于是只好在那里艰苦的生活。555555好可怜,假设海拔低的地方弥漫着一种无色无味的毒气,海拔越高毒气越稀薄。可是可怜的袋鼠们对此全然不觉,还是习惯于活蹦乱跳。(袋鼠们太惨了)于是,不断有袋鼠死于海拔较低的地方,而越是在海拔高的袋鼠越是能活得更久,也越有机会生儿育女。就这样经过许多年,这些袋鼠们竟然都不自觉地聚拢到了一个个的山峰上,可是在所有的袋鼠中,只有聚拢到珠穆朗玛峰的袋鼠才能活下来,那......咋办捏?

解析一下:

1、袋鼠群放零散的放到喜马拉雅山脉,这在计算里算法里被称作——初始化种群。就是一切都是按照自然随机的方式呈现的。

2、海拔越高毒气越稀薄,这是在计算机里面叫——适应度函数。这是一种规则,必须遵守。

3、生儿育女,这被称为计算机算法里的——生存经验遗传。

    散落在各地的袋鼠们不断的育有下一代,下一代的袋鼠继承了父代们教给它们的生存经验——不断地跳向海拔更高处,到低处的自然死亡,不会育有下一代。这样下去,袋鼠群中都必须有适应度函数,必须遵守这个向上跳生存,向高处跳就能把基因遗传给下一代。那么,很多代遗传之后,当然,这个结果可以用程序实现,最终的结果是,袋鼠们竟然都不自觉地聚拢到了一个个的山峰上——找到了珠峰,也找到全局最优解。


     举这个例子就是为了说明——可以用计算机中的遗传算法,找到问题的最佳解决方案。


--end--

声明:本文章由网友投稿作为教育分享用途,如有侵权原作者可通过邮件及时和我们联系删除:freemanzk@qq.com