2015-03-16 3 views
5

Я пишу код Java, чтобы решить проблему с использованием метода имитированного отжига. Мне нужен метод генерации случайного true только с вероятностью exp (a/b), где заданы параметры a и b.Создайте случайное булево значение с заданной вероятностью

Спасибо.

+0

ли вы имеете в виду, что распределение должно быть в соответствии с 'F = ехр (а/б)', с е будучи несильно плотность, или что 'f = exp (a/b)' является фактическим распределением? –

+0

См. [Мой исходный код] (https://github.com/droolsjbpm/optaplanner/blob/master/optaplanner-core/src/main/java/org/optaplanner/core/impl/localsearch/decider/acceptor/simulatedannealing/ SimulatedAnnealingAcceptor.java # L88): 'double acceptChance = Math.exp (-moveScoreDifference/temperature); if (random.nextDouble()

ответ

9

Предполагая, что a/b процент вероятности возвращения верно:

public boolean exp(double probabilityTrue) 
{ 
    return Math.random() >= 1.0 - probabilityTrue; 
} 
+3

, если вы используете' always_true', тогда вы можете удалить параметр метода 'prob_false', а также оператор return можно сократить до' return (Math.Random() * 100)> success_true; 'поскольку оценка этого утверждения приводит к тому, что в любом случае возвращается true или false. – kstandell

+0

@kstandell Я отредактировал вопрос. Правильная форма - exp (a/b). Вероятность истинных результатов равна exp (a/b). Тем не менее, я могу настроить его для моего дела. благодаря – Nina