“物竞天择,适者生存“,进化界的名言没想到也能用在算法里,不得不承认每个算法工程师也是天马行空的魔法师。由于经常参加数学煎馍美食烹饪大赛,因此时不时需要和启发式算法打交道,这些智能算法的思想充满着活力和开拓性,coding的时候甚至感觉自己像上帝一样为自己的世界制定着规则,不禁连连感叹。
今天开启智能算法篇章,首先上场的是遗传大法。
Ω
启发式算法的目的往往是寻求一个优化模型的最优解,但由于模型的过于庞大或是复杂,想要把精确的最优解揪出来需要花费大量的时间和算力。那么我们退而求其次,争取尽可能逼近最优解,接受一定范围的误差,从而有了各种启发式算法八仙过海。
遗传算法,顾名思义,我们将每一个可行解看作为一个个体,让这些个体生存繁衍,我们作为上帝制定出如何计算个体对于环境适应值(目标函数)的规则。接下来就交给大自然去选择,经过一代一代的淘汰进化,最终出现在我们面前就是适应度最高的个体们。
那么繁衍淘汰这么复杂的生理过程如何在计算机内表达呢,我们知道繁衍的本质就是基因的交换重组,而基因的本质是对遗传信息的编码,计算机最擅长的莫过于此。因此我们首先需要将每个个体(可行解)进行编码为基因串,为了贴合计算机并方便起见一般都是转换为二进制编码,那么繁衍的过程很显然就是对基因进行切片重组。问题是大自然如果只靠单纯的基因重组繁衍后代,那么物种的多样性将被限制,之所以物种能够进化一方面是自然选择,另外一个重要的机制是变异,变异使得原本的基因片段得以改变,从而物种朝着不同的方向发展(搜索),大大增加了算法的鲁棒性。
下面是一个数模比赛中遇到的简化版案例。
ƺ
简单地说,有一些交易订单,首先根据每个订单的计算结果对所有订单进行降序排序(其中

最低0.47元/天 解锁文章
2410

被折叠的 条评论
为什么被折叠?



