【发布时间】:2014-02-18 16:40:17
【问题描述】:
我正在尝试学习一些关于机器人技术和 Java 的知识。在我的尝试中,我编写了一个函数,它(应该)采用一个名为 q(0.2,0.2,0.2,0.2,0.2) 的统一数组,与另一个数组世界相比,根据 Z 值将该数组中的每个值乘以 0.6 或 0.2 (0,1,1,0,0) 表示与数组世界比较值 Z 的命中或未命中,最后返回一个新的统一数组。
所以: 1.) 循环 (0,1,1,0,0) 2.) 如果 i!=Z 比 i*0.2,如果 i=Z 比 i*0.6 3.) 将 q 中的所有新值加到一个称为 normalize 的双精度数中 4.) 对q中的每个值进行归一化(值/归一化)
下面是函数:
public static final double pHit = 0.6;
public static final double pMiss = 0.2;
public static int[] world = {0,1,1,0,0};
public static List<Double> q = new ArrayList<Double>();
public static List<Double> sense(int Z){
double normalize = 0;
for(int i=0;i < q.size();i++){
if(Z == world[i]){
q.set(i, (q.get(i) * pHit));
}
else{
q.set(i, (q.get(i) * pMiss));
}
}
//Normalize
for(int i=0;i < q.size();i++){
normalize += q.get(i);
}
for(int i=0;i<q.size();i++){
q.set(i, q.get(i)/normalize);
}
return q;
}
如果我将 world 设置为 (0,1,0,0,0) 并将 Z 设置为 1,我会得到以下结果: 0.14285714285714288 0.4285714285714285 0.14285714285714288 0.14285714285714288 0.14285714285714288
这很好地归一化(总和 = 1)。
但是,如果我将 world 设置为 (0,1,1,0,0) 并将 Z 设置为 1,我会得到一个奇怪的结果: 0.1111111111111111 0.3333333333333332 0.3333333333333332 0.1111111111111111 0.1111111111111111
这“标准化”为 0.9999999999999998 ?
非常感谢您的任何意见!
【问题讨论】:
标签: java double normalization