import java.util.Random;
/***
*
*@Author ChenjunWang
*@Description:
*@Date: Created in 22:23 2020/12/22
*@Modified By:
*
*/
public class Laplace {
//
private double mu;
//敏感度/epsilon
private double b;
public Laplace(double mu, double b) {
this.mu = mu;
this.b = b;
}
public double random(double p) {
if (p == 0) {
return Double.NEGATIVE_INFINITY;
} else if (p == 1) {
return Double.POSITIVE_INFINITY;
}
double x = (p > 0.5) ? -Math.log(2.0 - 2.0 * p) : Math.log(2.0 * p);
return mu + b * x;
}
public static void main(String[] args) {
Laplace laplace = new Laplace(0, 1 / 0.1);
Random random = new Random();
for (int i = 0; i < 1000; i++) {
System.out.println(5001 + ((int) laplace.random(random.nextDouble())));
}
}
}
评论0