问题
我一直在对粒子群优化进行一些研究,所以我说我会对它进行测试。
我试图解决的问题是平衡分区问题 - 或简单地减少到子集和问题(其中总和是所有数字的一半)。
似乎更新粒子速度的通用公式是
但我不会详细讨论这个问题。
由于没有PSO在线尝试子集和问题,我改为查看了旅行商问题。
他们正在采用更新速度的方法,这些速度涉及到访问过的城镇,相互减去并对其进行一些操纵。
我看到它与上面的公式没有关系。
我的方法
所以我废弃了公式并尝试了自己的方法来解决子集和问题。
我基本上使用gbest
和pbest
来确定删除或添加特定元素到子集的概率。
即 - 如果我的问题空间为[1,2,3,4,5]
(目标为7
或8
),我当前的粒子(子集)为[1,None,3,None,None]
,{{1根据{{1}}确定gbest
,添加[None,2,3,None,None]
和删除3
的可能性更高2
我可以发布代码,但不认为这是必要的,你明白了(我正在使用python btw - 因此1
)。
所以基本上,这在某种程度上起了作用,我得到了不错的解决方案,但是对于更大的数据集和值,它的速度非常慢。
我的问题
我是否编码问题并以智能方式更新粒子“速度”?
有没有办法确定这是否会正确收敛?
是否有可用于学习如何为特定问题空间创建收敛“更新”公式的资源?
提前多多感谢!
答案 0 :(得分:1)
<强>编码
是的,您正确地对此进行了编码:您的每个位图(实际上是您的5元素列表)都是粒子。
<强>概念强>
你对方程的概念问题是因为你的问题空间是一个离散的格子图,它不会立即适应更新步骤。例如,如果您希望通过调整学习率来获得更精细的粒度,则通常会将其减少一些小因素(例如,3)。在这个空间中,采取步骤只有1/3的意义是什么意思?这就是你遇到问题的原因。
我看到的主要可能性是创建3倍的粒子,然后将转换概率全部除以3.这仍然不能很好地满足,但它确实模拟了这个过程。
离散步骤
如果您有一个非常大的图形,高速度可以在一个步骤中为您提供数十个过渡,您可以利用更平滑的距离(丢失或错误)功能来指导您的模型。对于这么小的东西,你在任何两个位置之间的步数不超过5步,很难使用这样的概念。
相反,您可以根据与解决方案的估计距离来使用误差函数。容易的是从7或8的较近者中减去粒子的总数。更难的是根据该差异和粒子元素估计距离#34;在游戏中#34。
融合证明
是的,有办法实现,但它需要一些功能分析。通常,您希望证明误差函数在粒子空间上是凸的。换句话说,您必须证明您的错误函数是一个可靠的距离指标,至少就相对位置而言(即证明较低的错误 暗示您&#39;接近解决方案)。
创建更新公式
不,这是一个启发式字段,基于由粒子坐标,误差函数和运动特征定义的问题空间的形状。
额外推荐
您当前允许的转换是&#34;添加&#34;和&#34;删除&#34;元件。 包括&#34;交换元素&#34;对此:交换一个现有成员为缺席者。这将允许琐碎的误差函数为您定义凸空间,并且您将在很短的时间内收敛。