たとえば、「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) を計算したいので、独自の範囲に適切にマップする必要があります。それ、どうやったら出来るの?