こんにちは、単純な関数を最適化するための 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 を使用しています)。前もって感謝します
1 に答える
0
Matlab は浮動小数点演算を使用して計算を行っています。これはエラーにつながります。Epsilon は精度の尺度です ( eps
matlab のコマンド)。1 + eps != 1 となる 0 より大きい最小の数値です。
この丸め誤差がどのように影響するかは、計算によって異なります。たとえば、大きさの異なる 10 個の数値を加算する場合、数値を絶対値で並べ替えて昇順に加算すると、誤差が最小になります。互いにほぼ等しい 2 つの数値を減算すると、多くの精度が失われるか、検出力が低下する可能性があります。
==> 「完璧な」解決策を得るには、アルゴリズムを書き直して、これらの効果を考慮に入れる必要があります。簡単な解決策は、数値を丸めることです。さらにしきい値を定義し、たとえば 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 に答える