1

大家好,我编写 pso 代码来优化一个简单的函数。它没有问题。现在我想用 pso 解决 tsp 问题。例如,群向量内容为 [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)。提前致谢

4

1 回答 1

0

Matlab 使用浮点运算来进行计算。这会导致错误。Epsilon 是精度的度量(epsmatlab 中的命令)。它是 1 + eps != 1 的最小数字 > 0。

这取决于计算该舍入误差将如何影响您。例如,如果你想添加 10 个不同大小的数字,那么如果你按照它们的绝对值对数字进行排序,然后将它们升序相加,那么误差是最小的。将两个几乎相等的数字相减会损失很多精度,或者功率也会很差。

==> 您将不得不重写您的算法并将这些影响考虑在内以获得“完美”的解决方案。简单的解决方案就是对数字进行四舍五入,您可以另外定义一个阈值,比如说 0.25,如果一个数字的变化大于您输出的警告(就像 matlab 在计算逆矩阵时使用几乎奇异的矩阵)。

> A = [1.2 2.3 3.8 3.4 1.2] ;
> A = round(A)
A =
   1   2   4   3   1
于 2015-07-03T16:19:59.663 回答