2015-03-16 24 views
5

Ich schreibe Java-Code, um ein Problem mit Simulated Annealing-Methode zu lösen. Ich brauche eine Methode, um eine zufällige true nur mit Wahrscheinlichkeit exp (a/b) zu generieren, wobei a und b Parameter gegeben sind.Generieren Sie einen zufälligen Boolean mit gegebener Wahrscheinlichkeit

Danke.

+0

Haben Sie bedeuten, dass die Verteilung gemäß 'f = exp sein muss (a/b)', mit f die Dichte funcion zu sein, oder dass 'f = exp (a/b)' die tatsächliche Verteilung ist? –

+0

Siehe [mein Quellcode] (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()

Antwort

9

Unter der Annahme, dass a/b ist die prozentuale Wahrscheinlichkeit der Rückkehr wahr:

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

Wenn Sie nur' wahrscheinlichkeit_wahr 'verwenden, dann können Sie den 'probability_false' Methodenparameter entfernen und auch die return-Anweisung kann auf' return (Math.Random() * 100)> wahrscheinlichkeit_wahr; 'da die Auswertung dieser Aussage dazu führt, dass wahr oder falsch zurückgegeben wird. – kstandell

+0

@kstandell Ich habe die Frage bearbeitet. Die korrekte Form ist exp (a/b). Die Wahrscheinlichkeit wahrer Ergebnisse ist exp (a/b). Jedoch kann ich es für meinen Fall anpassen. Vielen Dank – Nina