1.启发式算法一般是指“基于规则”的方法,能够直接给出一个解。
我们平时说的【智能算法】有的人也叫它启发式算法,其实不太对;或者说为了与前一种区分,通常叫做“元”启发式算法,meta-heuristics。这种通常是改进型算法,也就是通过种群或者邻域不断迭代予以改进。像邻域搜索,蚁群,蜂群等等都属于这一类。
2.智能算法层出不穷,每过一段时间就会出新的。但是据期刊透露,部分编委基本是看到单纯的算法就拒了。原因是这么做只是为了写论文而写,实际并没有什么价值;而且数学功底比较薄弱,并没有什么精巧的设计,所以注定只会是昙花一现。
我也看到不少同道有相似思考,那就是,算法本身没什么意义,解决了实际问题才有意义。所以我们学习,应用算法的时候,不要求多求新,而要把握住其中的设计或者数学理论的精髓,用好了才是正道。
3.智能算法通常最关键的点是:种群初始化构造;邻域/算子构建,这两块。
其中,初始化种群,通常需要结合问题的性质设计一定的规则进行构造,一般来说结果会好一些。但并不是一定会好,具体需要我们测试。
第二,算子构建,通常也是需要结合问题而构造的。
4.所以,我们看到,这里的关键就是对问题本身的理解。实际在企业中,或者学术界应用导向之下,把握业务,也就是问题本身是很重要的。否则,我们就只是一个码农而已了。
很多人设计算法,其实是应用计算机的算力在穷举,然后从中挑出一个最好的。这种思路也是有害的。
我们需要根据问题的结构,精心设计算子和邻域,缩小可行域规模,进而求解,也就是结合【理解】+【算力】两方面进行设计,这种是进阶做法,效果也会更好。
举个例子:查找1-100内素数。有的人会直接遍历1-100,看是否是素数,这是第一种思路。但是有的人会动一下脑筋,首先排除所有偶数,因为所有偶数一定不是素数,然后找奇数中的素数,这样的话,解空间直接缩短一半。第二种显然更精明得多。
或者数学界一直找的近似算法和最差情况分析其实就是第二种方法的极致。
5.现在比较热的是math-heuristics,也就是基于数学的启发式算法,一定程度上也是4中第二种思路的体现。
6.比较基准。还可以和低界LB比,低界可以是松弛掉IP约束求解器求到的解;也可以根据问题松弛掉部分约束得到的解。可以作为评价元启发式算法质量的参考依据。
|