package ldbc.snb.datagen.generator.distribution; import ldbc.snb.datagen.generator.DatagenParams; import ldbc.snb.datagen.generator.distribution.utils.Bucket; import ldbc.snb.datagen.generator.distribution.utils.BucketedDistribution; import org.apache.hadoop.conf.Configuration; import java.util.ArrayList; import java.util.Random; /** * Created by aprat on 4/03/15. */ public class MOEZipfDistribution implements DegreeDistribution { private org.apache.commons.math3.distribution.ZipfDistribution zipf_; private double ALPHA_ = 1.7; private double DELTA_ = 1.5; private Random random_; public void initialize(Configuration conf) { ALPHA_ = conf.getDouble("ldbc.snb.datagen.generator.distribution.MOEZipfDistribution.alpha",ALPHA_); DELTA_ = conf.getDouble("ldbc.snb.datagen.generator.distribution.MOEZipfDistribution.delta",DELTA_); zipf_ = new org.apache.commons.math3.distribution.ZipfDistribution(5000, ALPHA_); random_ = new Random(); } public void reset (long seed) { random_.setSeed(seed); zipf_.reseedRandomGenerator(seed); } public long nextDegree(){ double prob = random_.nextDouble(); double prime = (prob * DELTA_)/(1 + prob*(DELTA_ - 1)); long ret = zipf_.inverseCumulativeProbability(prime); return ret; } }