-2

たとえば、「x」、「y」、「z」の 3 つの変数があります。それらはすべて特定の範囲 {min, max} からのものです。ここで、新しい変数を計算したいと思います。たとえば、p = x + F*(yz) とします。ここで、F は 0 から 1 の間の定数です。この新しい計算された変数 "p" は、{min, max} の上にマッピングする必要があります。範囲。それ、どうやったら出来るの?

編集1

数値を配列に生成する:

population[D*id]=0;
    population[D*id+N]=0;
    population[D*id +2*N]=0;

    population[D*id+1]=rndFloat(globalState,threadIdx.x,4);
    population[D*id+N+1]=0;
    population[D*id +2*N+1]=0;

    for(int i=2; i<N; i++){
        float min= -4 - 1/4*abs((int)((i-4)/3));
        float max= 4 + 1/4*abs((int)((i-4)/3));
        if(i==2)
        {
            population[D*id+2]=rndFloat(globalState,threadIdx.x,3.14159265359);
            population[D*id+N+2]=rndFloat(globalState,threadIdx.x,min,max);
            population[D*id +2*N+2]=0;
        }
        else
        {
            population[D*id +i]=rndFloat(globalState,threadIdx.x,min,max);
            population[D*id+N+i]=rndFloat(globalState,threadIdx.x,min,max);
            population[D*id +2*N+i]=rndFloat(globalState,threadIdx.x,min,max);
        }
    }

新しい変数の計算:

for(int i=0; i<D-1; i++)
    {
        pop[D*id+i]= population[D*a +i] + F*(population[D*b +i]-population[D*c +i]);
    }

インデックス a、b、c はランダムに選択されます。注意すべき重要なことは、最小範囲と最大範囲、および指定されたインデックスによるその依存性です。

float min= -4 - 1/4*abs((int)((i-4)/3));
        float max= 4 + 1/4*abs((int)((i-4)/3));

ここで、i は各範囲の a、b、および c に置き換えられます。

編集2

簡単にするために、特定の範囲内にある 3 つの変数 x、y、z があるとしましょう。各変数には独自の範囲があります。新しい変数 p = x + F*(yz) を計算したいので、独自の範囲に適切にマップする必要があります。それ、どうやったら出来るの?

4

2 に答える 2

0

最小値と最大値が何であるかによって異なります。たとえば、p を 0 と 1 の間でマップするには、次のようにします。

if (p < 10)
    p /= 9.0f;

else if (p < 100)
    p /= 99.0f;

else if (p < 1000)
    p /= 999.0f;

等々...

于 2013-06-21T17:38:34.683 に答える
0

x範囲内にある変数を取り、[A, B]それを別の範囲にスケーリングしたいだけの場合は、次の[C, D]ことに注意してください。

  1. x - A範囲内[0, B - A]です。
  2. 範囲内の数値のスケーリングは、[0, B - A]事実上、この質問で解決されているのと同じ問題です: Rand() から数値を縮小するにはどうすればよいですか? .

モジュラス演算子のような非常にナイーブな手法を使用すると、マッピングで不均一な分布が生じることに注意してください。リンクされた質問には、ほぼ均一なマッピングを実現するための合理的な手法がいくつか含まれています。

あなたの場合、p範囲内[min - max + min, max + max - min]です。

于 2013-06-21T17:35:39.387 に答える