Генерировать случайное логическое значение с заданной вероятностью

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

Спасибо.


person Nina    schedule 16.03.2015    source источник
comment
Вы имеете в виду, что распределение должно соответствовать f = exp(a/b), где f — функция плотности, или что f = exp(a/b) является фактическим распределением?   -  person fps    schedule 16.03.2015
comment
См. мой исходный код: double acceptChance = Math.exp(-moveScoreDifference / temperature); if (random.nextDouble() < acceptChance) {...}   -  person Geoffrey De Smet    schedule 17.03.2015


Ответы (1)


Предполагая, что a/b - это процентная вероятность возврата true:

public boolean exp(double probabilityTrue)
{
    return Math.random() >= 1.0 - probabilityTrue;
}
person Promination    schedule 16.03.2015
comment
если вы используете только probability_true, вы можете удалить параметр метода probability_false, а также оператор return может быть сокращен до return (Math.Random() * 100) > probability_true;, так как оценка этого оператора в любом случае приводит к возврату true или false. - person kstandell; 16.03.2015
comment
@kstandell я отредактировал вопрос. Правильная форма - exp(a/b). Вероятность истинных исходов равна exp(a/b). Тем не менее, я могу настроить его для своего случая. Спасибо - person Nina; 16.03.2015