/** * return a random individual (other than i unless i is the only member in the population). * * @param individuals List // List<DPSOIndividual> * @param i int * @param gen int unused * @param params HashMap must contain an entry <"thread.id",Integer val> * @return DPSOIndividual */ public DPSOIndividual getBestIndividual(List individuals, int i, int gen, HashMap params) { final int indsz = individuals.size(); final int id = ((Integer) params.get("thread.id")).intValue(); final RndUtil rndgen = RndUtil.getInstance(id); int j = rndgen.getRandom().nextInt(indsz); if (j == i) { if (i < indsz / 2) ++j; else if (i > 0) --j; // if i==0 && i>=indsz/2 ==> indsz <= 1 thus keep j=0 } DPSOIndividual ret = (DPSOIndividual) individuals.get(j); return ret; }