Я пытаюсь изучить и реализовать простую библиотеку генетических алгоритмов для своего проекта. На данный момент эволюция, отбор популяции готовы, и я пытаюсь реализовать простой хороший оператор мутации, такой как оператор мутации Гаусса (GMO), для моего механизма генетической эволюции на Java и Scala.
] Я нахожу некоторую информацию о гауссовском операторе мутации (GMO) в статье Оператор мутации, основанный на рейтинге Парето для многоцелевых эволюционных алгоритмов (PM Mateo, I. Alberto), страницы 6 и 7.
Но у меня есть проблема с поиском другой информации о том, как реализовать этот оператор мутации Гаусса и другие полезные варианты этого оператора в Java. Что мне делать?
Я использую функцию random.nextGaussian ()
случайной утилиты Java, но этот метод возвращает только случайное число от 0 до 1.
Итак,
] а) Как я могу изменить точность возвращаемого числа в этом случае? (Например, я хочу получить случайное двойное число от 0 до 1 с шагом, равным 0,00001.)
b) и как мне указать mu
и sigma
для этого функция, потому что я хочу искать локально значение моего генома, а не между -1 и 1. Как я могу скорректировать это локальное исследование вокруг значения моего генома?
После исследования я нашел ответ на вопрос б). Кажется, я могу заменить гауссово случайное число следующим образом:
newGenomeValue = oldGenomeValue + (( gaussiandRndNumber * sigma ) + mean )
где означает
= значение моего генома.
(См. Метод нижней страницы в Как я могу генерировать случайные числа с помощью нормальное или гауссово распределение? .)