java并行流函数占用更多时间
我有下面的函数,在遗传算法中计算每个个体的适应度。适应度函数需要花费大量的时间,所以对于种群中的每个个体来说,它需要花费大量的时间
Individual fittest = individuals.get(0);
for (int i = 0; i < individuals.size(); i++) {
if (fittest.getFitness() >= getIndividual(i).getFitness()) {
fittest = getIndividual(i);
}
}
return fittest;
我正在尝试以下并行版本,但它比顺序执行更糟糕
return
individuals.parallelStream().min(Comparator.comparing(GeneticAlgorithm::getFitness)).get();
在并行计算不同个体的适合度方面的任何帮助。谢谢
# 1 楼答案
如果花很长时间来
getFitness()
,应该尽量减少它的调用这将使通话次数减半
# 2 楼答案
只是一个建议。请参阅下面的代码
在
Individual
类中,存储计算的适应度。这样你就不用每次都计算了。只要调用影响适应度公式的任何参数的setter方法,就可以计算适应度。此外,对于每个解决方案,您可以同时计算并行流中所有个体的适应度,如代码所示