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;
}
}