2015-07-03 48 views
0

大家好,我写的是用于优化简单函数的pso代码。它没有问题。现在我想用pso解决茶匙问题。例如,群体向量内容是[1 2 4 3 1],最佳群体向量是[2 3 1 4 2]。当我想更新[1 2 4 3 1]的新值时,这些值就像[1.2 2.3 3.8 3.4 1.2]。这不是真的或可以接受的答案。我怎样才能将这个答案映射到一个真实的答案? 如果你有这个问题的一些来源,请分享它。
(我的代码使用matlab)。 在此先感谢如何在pso优化中将连续数转换为离散数?

回答

0

Matlab正在使用floating point操作来执行计算。这导致错误。 Epsilon是精度的度量(matlab中的eps命令)。这是最小的数字> 0其中1   +   eps  !=   1。

它取决于计算如何舍入误差会影响你。例如,如果要添加10个不同大小的数字,那么如果按绝对值对数字进行排序并将其添加,则误差最小。相互减去两个几乎相等的数字会失去很多精度,或者功率也可能很差。

==>你将不得不重写你的算法,并考虑到这些效果的“完美”解决方案。简单的解决方案只是对数字进行四舍五入,你可以额外定义一个阈值,比如说0.25,如果一个数字的变化超过了你输出的警告(比如在计算逆矩阵时用matlab几乎奇异的矩阵)。

> A = [1.2 2.3 3.8 3.4 1.2] ; 
> A = round(A) 
A = 
    1 2 4 3 1 
+0

感谢您的答案,但如果我这样做的解决方案改变,因此这不是pso算法。答案并非如此 –

+1

@ zara-T什么是不正确的?它将浮点数转换为整数,就像它在问题的标题中所说的那样。没有任何实施代码,没有人能够猜出问题所在。 – maraca

+0

这是不正确的,因为在pso的正常形式中,解决方案的进度不是静态的,我的意思是如果在下一次迭代中第一次迭代中4变为3.8,则可能变为3.2,并且在第一次迭代的解决方案中,它的值被四舍五入为4并在下一个4再次变为3.8,如果我们四舍五入,值为4。这不是真的,因为该算法将接近群1,在我们的解决方案中这不会发生,我认为答案是离散PSO概念 –