问题
我一直在对粒子群优化进行一些研究,所以我说我会对其进行测试。
我要解决的问题是平衡分区问题 - 或者简单地简化为子集和问题(总和是所有数字的一半)。
似乎更新粒子速度的通用公式是
但我不会为这个问题详细介绍。
由于没有针对子集总和问题的 PSO 在线尝试,我改为查看旅行商问题。
他们是更新速度的方法,包括获取一组访问过的城镇,从另一个中减去一个并对其进行一些操作。
我发现这与上面的公式没有关系。
我的方法
所以我放弃了这个公式并尝试了我自己的方法来解决子集和问题。
我基本上使用gbest
andpbest
来确定删除或添加特定元素到子集的概率。
即-如果我的问题空间是[1,2,3,4,5]
(目标是7
或8
),并且我当前的粒子(子集)具有[1,None,3,None,None]
,并且gbest
是,则保留,添加和删除[None,2,3,None,None]
的概率更高,基于3
2
1
gbest
我可以发布代码,但认为没有必要,你明白了(我正在使用 python btw - 因此None
)。
所以基本上,这在一定程度上有效,我得到了不错的解决方案,但在更大的数据集和值上它非常慢。
我的问题
我是否以智能的方式对问题进行编码并更新粒子“速度”?
有没有办法确定这是否会正确收敛?
有没有我可以用来学习如何为特定问题空间创建收敛“更新”公式的资源?
提前非常感谢!