使用粒子群优化进行适当的编码

时间:2016-11-08 00:49:41

标签: python optimization machine-learning artificial-intelligence particle-swarm

问题

我一直在对粒子群优化进行一些研究,所以我说我会对它进行测试。

我试图解决的问题是平衡分区问题 - 或简单地减少到子集和问题(其中总和是所有数字的一半)。

似乎更新粒子速度的通用公式是

enter image description here

但我不会详细讨论这个问题。

由于没有PSO在线尝试子集和问题,我改为查看了旅行商问题。

他们正在采用更新速度的方法,这些速度涉及到访问过的城镇,相互减去并对其进行一些操纵。

我看到它与上面的公式没有关系。

我的方法

所以我废弃了公式并尝试了自己的方法来解决子集和问题。

我基本上使用gbestpbest来确定删除或添加特定元素到子集的概率。

即 - 如果我的问题空间为[1,2,3,4,5](目标为78),我当前的粒子(子集)为[1,None,3,None,None],{{1根据{{​​1}}确定gbest,添加[None,2,3,None,None]和删除3的可能性更高2

我可以发布代码,但不认为这是必要的,你明白了(我正在使用python btw - 因此1)。

所以基本上,这在某种程度上起了作用,我得到了不错的解决方案,但是对于更大的数据集和值,它的速度非常慢。

我的问题

我是否编码问题并以智能方式更新粒子“速度”?

有没有办法确定这是否会正确收敛?

是否有可用于学习如何为特定问题空间创建收敛“更新”公式的资源?

提前多多感谢!

1 个答案:

答案 0 :(得分:1)

<强>编码

是的,您正确地对此进行了编码:您的每个位图(实际上是您的5元素列表)都是粒子。

<强>概念

你对方程的概念问题是因为你的问题空间是一个离散的格子图,它不会立即适应更新步骤。例如,如果您希望通过调整学习率来获得更精细的粒度,则通常会将其减少一些小因素(例如,3)。在这个空间中,采取步骤只有1/3的意义是什么意思?这就是你遇到问题的原因。

我看到的主要可能性是创建3倍的粒子,然后将转换概率全部除以3.这仍然不能很好地满足,但它确实模拟了这个过程。

离散步骤

如果您有一个非常大的图形,高速度可以在一个步骤中为您提供数十个过渡,您可以利用更平滑的距离(丢失或错误)功能来指导您的模型。对于这么小的东西,你在任何两个位置之间的步数不超过5步,很难使用这样的概念。

相反,您可以根据与解决方案的估计距离来使用误差函数。容易的是从7或8的较近者中减去粒子的总数。更难的是根据该差异和粒子元素估计距离#34;在游戏中#34。

融合证明

是的,有办法实现,但它需要一些功能分析。通常,您希望证明误差函数在粒子空间上是凸的。换句话说,您必须证明您的错误函数是一个可靠的距离指标,至少就相对位置而言(即证明较低的错误 暗示您&#39;接近解决方案)。

创建更新公式

不,这是一个启发式字段,基于由粒子坐标,误差函数和运动特征定义的问题空间的形状。

额外推荐

您当前允许的转换是&#34;添加&#34;和&#34;删除&#34;元件。 包括&#34;交换元素&#34;对此:交换一个现有成员为缺席者。这将允许琐碎的误差函数为您定义凸空间,并且您将在很短的时间内收敛。