Matlab pso优化中如何将连续数转化为离散数?

Matlab pso优化中如何将连续数转化为离散数?,matlab,traveling-salesman,particle-swarm,Matlab,Traveling Salesman,Particle Swarm,大家好,我写的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编写代码)。 提前感谢Matlab正在使用运算进行计算。这会导致错误。Epsilon是精度的度量(

大家好,我写的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编写代码)。 提前感谢

Matlab正在使用运算进行计算。这会导致错误。Epsilon是精度的度量(
eps
matlab中的命令)。它是1+eps的最小值>0=一,

这取决于此舍入误差将如何影响您的计算。例如,如果要添加10个不同量级的数字,则如果按数字的绝对值排序并按升序添加,则误差最小。将两个几乎相等的数字相减会损失很多精度,或者功率也会很糟糕

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

Matlab正在使用运算来进行计算。这会导致错误。Epsilon是精度的度量(
eps
matlab中的命令)。它是1+eps的最小值>0=一,

这取决于此舍入误差将如何影响您的计算。例如,如果要添加10个不同量级的数字,则如果按数字的绝对值排序并按升序添加,则误差最小。将两个几乎相等的数字相减会损失很多精度,或者功率也会很糟糕

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


谢谢你的回答,但如果我这样做的解决方案改变,因此这不是粒子群优化算法。答案也是否定的true@zara-什么不是真的?它将浮点数转换为整数,如问题标题中所述。没有任何实现代码,没有人能猜出问题是什么。这是不正确的,因为在pso的正常形式中,解决方案的进度不是静态的,我的意思是,如果在第一次迭代中4改为3.8,在下一次迭代中3.8可能改为3.2,在第一次迭代的解决方案中,它的值被四舍五入到4,在下一次迭代中,4再次改为3.8,如果我们四舍五入,值是4。这是不正确的,因为在这一点上,算法将接近swarm 1,在我们的解决方案中,这不会发生,我认为答案是在离散PSO概念中,为什么不使用遗传算法?更适合这类问题。谢谢你的回答,但如果我这样做,解决方案会改变,因此这不是pso算法。答案也是否定的true@zara-什么不是真的?它将浮点数转换为整数,如问题标题中所述。没有任何实现代码,没有人能猜出问题是什么。这是不正确的,因为在pso的正常形式中,解决方案的进度不是静态的,我的意思是,如果在第一次迭代中4改为3.8,在下一次迭代中3.8可能改为3.2,在第一次迭代的解决方案中,它的值被四舍五入到4,在下一次迭代中,4再次改为3.8,如果我们四舍五入,值是4。这是不正确的,因为在这一点上,算法将接近swarm 1,在我们的解决方案中,这不会发生,我认为答案是在离散PSO概念中,为什么不使用遗传算法?更适合这种问题。
> A = [1.2 2.3 3.8 3.4 1.2] ;
> A = round(A)
A =
   1   2   4   3   1