例如,我有一个三个变量:“x”、“y”和“z”。它们都来自一定的范围{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) 并且它需要适当地映射到它自己的范围内。我怎么做?