2015-03-16 16 views
5

Sto scrivendo codice java per risolvere un problema con il metodo di ricottura simulato. Ho bisogno di un metodo per generare un numero casuale true solo con probabilità exp (a/b) dove a e b sono dati parametri.Genera un booleano casuale con la probabilità data

Grazie.

+0

vuoi dire che la distribuzione deve essere conforme a 'f = exp (a/b)', con f essendo la funcion densità, o che 'f = exp (a/b)' è la distribuzione attuale? –

+0

Vedere [il mio codice sorgente] (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()

risposta

9

Supponendo che a/b è la probabilità percentuale di restituendo vero:

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

se si utilizza solo' probability_true', è possibile rimuovere il parametro del metodo 'probability_false' e ​​anche l'istruzione return può essere abbreviata in' return (Math.Random() * 100)> probability_true; 'dal momento che la valutazione di tale affermazione si traduce in un vero o falso restituito comunque. – kstandell

+0

@kstandell Ho modificato la domanda. La forma corretta è exp (a/b). La probabilità di risultati veri è exp (a/b). Tuttavia, posso personalizzarlo per il mio caso. Grazie – Nina

Problemi correlati