2015-03-16 15 views
5

Piszę kod Java, aby rozwiązać problem z symulowaną metodą wyżarzania. Potrzebuję metody generowania losowego true tylko z prawdopodobieństwem exp (a/b), gdzie a i b mają podane parametry.Generowanie losowej wartości logicznej z podanym prawdopodobieństwem

Dzięki.

+0

Czy to znaczy, że rozkład muszą być wykonane zgodnie z 'F = exp (a/b)', ze f będąc función gęstość, lub że 'f = exp (a/b)' jest faktyczną dystrybucją? –

+0

Zobacz [mój kod źródłowy] (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()

Odpowiedz

9

Zakładając, że a/b jest prawdopodobieństwo procent powrocie prawda:

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

jeśli używasz tylko' probability_true', wtedy możesz usunąć parametr metody 'probability_false', a także instrukcję return można skrócić do' return (Math.Random() * 100)> probability_true; 'ponieważ ocena tego polecenia powoduje, że mimo to zwracana jest wartość true lub false. – kstandell

+0

@kstandell Edytowałem pytanie. Poprawną formą jest exp (a/b). Prawdopodobieństwo prawdziwych wyników to exp (a/b). Mogę jednak dostosować go do mojej sprawy. Dzięki – Nina

Powiązane problemy