Я написал следующую функцию для реализации типа мутации (creep
) в моем проекте genetic algorithm
. Поскольку я использовал встроенную библиотеку случайных поколений java, вероятность получения каждого index
является единообразной. Меня попросили изменить функцию таким образом, что она использует биномиальное распределение вместо равномерного. Насколько я искал Google, я не мог найти ни одного примера/учебника, демонстрирующего преобразование униформы в биномиальный. Как мне это достичь?Преобразование однородной случайной генерации в биномиальную
int mutationRate = 0.001;
public void mutate_creep() {
if (random.nextDouble() <= mutationRate) {
// uniform random generation
int index = random.nextInt(chromoLen);
if(index%2 == 0) { // even index
chromo[index] += 1;
} else { // odd index
chromo[index] -= 1;
}
}
}
Примечание: Я уже видел решение в A efficient binomial random number generator code in Java. Поскольку моя проблема здесь специфична для creep mutation algorithm
, я не уверен, как ее можно применять напрямую.
Возможный дубликат [Эффективный двоичный код генератора случайных чисел в Java] (http://stackoverflow.com/questions/23561551/a-efficient-binomial-random-number-generator-code-in-java) – pjs
@ pjs Я понимаю, что вы ответили на дублированный помеченный вопрос. FYI, я уже видел это, и я не могу использовать его в своей ситуации напрямую, поскольку мне это нужно специально для алгоритма алгоритма ползучести. Поэтому, пожалуйста, отмените флаг дублирования и ответьте на мою проблему здесь, если вы можете. – DhiwaTdG
Биномальный битномиал, и связанный ответ подсказывает, как их получить. Как сказано в настоящее время, ваш вопрос * * является дубликатом. Похоже, ваша проблема заключается не в том, как генерировать биномиальную, а в том, как использовать ее в алгоритме ползучести. – pjs