经验杂谈-浅谈智能算法

序.

雪域祝您圣诞节快乐

知乎上有个热帖: 越来越多的群体智能算法(蛙跳算法、猫群算法、蟑螂算法等等)有存在的必要吗?

https://www.zhihu.com/question/22752108

浏览量9万多,下面的回答者身份各异,都从自己的角度回答了这一问题。我结合自己的经验,简单谈谈对此的理解.

认识部分

如果你总问我说这个“越来越多的群体智能算法(蛙跳算法、猫群算法、蟑螂算法等等)有存在的必要吗?”,一字以蔽之,当然是“有”。 如知乎ID留德华叫兽所言,“智能算法方向通常被设置在计算机系(与人工智能师出同门),但因为其被广泛应用在解决运筹学问题。”数学上,我们的NDhard问题目前无法在多项式时间范围内求解,但是在数据规模比较大的前提下,工程上往往需要“高效”和“近似”。实际问题中,迭代次数是可以设置的,收敛准则是可以设置的,这些保证了算法在时间上是可控的,得不到精确解,得到个近似解已经满足要求了。 至于知乎上的一些回答认为“群智能算法纯属懵猜”的,我认为毫无道理。例如,“我看到今天天阴,推断明天可能会下雨”与“我对任何条件一无所知,但是明天会下雨”类似,前者是理性推测,后者是无端猜测。以粒子群为例,我通过历史最佳和全局最佳推断最优解可能的方向,这种并非毫无道理。我也不赞同把群智能算法神化,毕竟这些算法还留有很多待解决的问题。这也是如此多的群算法没有广泛应用的原因。

技术相关

Q & A Q: 群智能算法有效?A: 除了某些经典算法(遗传算法GA,粒子群算法PSO),大部分群智能算法的提出者和研究者只给了算法流程和算例,并没有严格的证明。从实践效果来讲,算法对于单峰数据基本有效;对于多峰数据,基本有效。不过维度不宜过多,实验尝试,数据维度应当小于5个,否则可能达不到最优值[1]。在编码范围的值中,无效值(可能因为其他约束导致或者不在定义域范围内等原因)不应该超过总编码数量的1/3。

Q: 你对XXX(一个新智能算法)有什么看法?A:1.实践效果不能说明一切。毕竟一个效果好不能代表全部。 2.不鼓励在舍弃巨人肩膀的前提下进行天马行空的脑洞。

Q: 如何“创造”一个新的智能算法?或者说,一个智能算法需要满足的条件有哪些? A:1. 智能算法需要确定可行域(系统边界) 2. 智能算法应迭代寻优。此处的寻优应满足局部搜索能力和全局搜索能力。 3. 概率收敛 一般来说,没有做到这两点的算法往往具有设计上的缺陷。

实现相关

推荐几个比较好用的工具:

1. jMetal java实现的单/多目标优化https://github.com/jMetal/jMetal

2. Platypus python实现的目标优化https://github.com/Project-Platypus/Platypus

3. snowland-algorithm python实现的单目标优化(推一波自己的代码,嘿嘿)https://gitee.com/hoops/snowland-algorithm-python

4. geatpy python实现的GA多目标优化https://github.com/geatpy-dev/geatpy

5. gaft python实现的遗传算法框架https://github.com/PytLab/gaft

[1]: 码云 snowland-algorithm-python

https://gitee.com/hoops/snowland-algorithm-python/blob/v0.0.7-dev/slapy/swarm/README.md

  • 发表于:
  • 原文链接:https://kuaibao.qq.com/s/20181216G0O95400?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券