我正在使用遗传算法来进化某些东西,我有一个双数组,如下所示。
fitness[0] = 15.0
fitness[1] = 12.0
fitness[2] = 13.0
fitness[3] = 17.0
fitness[4] = 8.0
fitness[5] = 18.0
数组索引表示人口,其值为适合度功能。 我可以通过使用排序算法轻松地对数组进行排序,或者可以使用类似下面的内容 -
Integer[] arr =
{ 12, 67, 1, 34, 9, 78, 6, 31 };
Arrays.sort(arr, new Comparator<Integer>()
{
@Override
public int compare(Integer x, Integer y)
{
return x - y;
}
});
System.out.println("low to high:" + Arrays.toString(arr));
但我想知道排序后的索引,如下所示: -
fitness[5] = 18.0
fitness[3] = 17.0
fitness[0] = 15.0
fitness[2] = 13.0
fitness[1] = 12.0
fitness[4] = 8.0
基本上我想要输出像5,3,0,2,1,4。这意味着第五人比第三人好......
我写了一个包含太多if-else的代码,还有一些对我有用的代码。但代码看起来很丑陋而且令人困惑。 如果我尝试将数据/副本加载到HASH SET,但可以重复RHS上的值。
对于我来说,有比使用批次的if-else语句更好的方法吗?
答案 0 :(得分:1)
解决此问题的一种常见方法是对排列数组进行排序,如下所示:
final Integer[] arr =
{ 12, 67, 1, 34, 9, 78, 6, 31 };
final Integer[] perm = new Integer[arr.length];
for (int i = 0 ; i != perm.length ; i++) {
perm[i] = i;
}
Arrays.sort(perm, new Comparator<Integer>()
{
@Override
public int compare(Integer x, Integer y)
{
return arr[x] - arr[y];
}
});
System.out.println("low to high:" + Arrays.toString(perm));
答案 1 :(得分:0)
final double[] fitnessArray = new double [6];
fitnessArray[0] = 15.0;
fitnessArray[1] = 12.0;
fitnessArray[2] = 13.0;
fitnessArray[3] = 17.0;
fitnessArray[4] = 8.0;
fitnessArray[5] = 18.0;
//Find the Fittest Attack BOT
Double[] perm = new Double[fitnessArray.length];
for (int i = 0 ; i != perm.length ; i++) {
perm[i] = (double) i;
}
Arrays.sort(perm, new Comparator<Double>()
{
@Override
public int compare(Double o1, Double o2) {
// TODO Auto-generated method stub
return (int) (fitnessArray[o1.intValue()] - fitnessArray[o1.intValue()]); // Higher value first
}
});
System.out.println("low to high:" + Arrays.toString(perm));