Если в вашей версии Java EquationGenome
реализован интерфейс Comparable
, вы сможете воспользоваться многими API Java . Это изменит ваш класс так:
final class EquationGenome
implements Comparable<EquationGenome>
{
...
public int compareTo(final EquationGenome gene2) ...
Тогда, что вы делаете с умножением, не ясно. Я предполагаю, что «естественный порядок» - от наиболее подходящего до наименее подходящего. Тогда я бы реализовал сравнение следующим образом:
public int compareTo(final EquationGenome that) {
if (currentFitness == that.currentFitness) {
/* TODO: Add more tests if there are other properties that distinguish
* one EquationGenome from another (secondary sort keys). */
return 0;
} else
return (currentFitness > that.currentFitness) ? -1 : +1;
}
По соглашению вы должны либо реализовать метод equals
, чтобы он был "согласованным" с вашим методом compareTo
, либо четко документировать свой класс, чтобы отметить несоответствие. Если вы реализуете equals
, вам также следует внедрить hashCode
для согласованности.
public boolean equals(Object o) {
return o instanceof EquationGenome && compareTo((EquationGenome) o) == 0;
}
public int hashCode() {
return currentFitness;
}
Метод получения случайных чисел в порядке, если вы понимаете, что max
исключен; метод генерирует случайные числа из полуоткрытого интервала (min, max]
. Если вы хотите включить в диапазон max
, добавьте один к diff
.