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;
/**
* Created by aprat on 26/02/15.
*/
public class AltmannDistribution extends CumulativeBasedDegreeDistribution {
private int POPULATION_ = 10000;
private double normalization_factor_ = 0.0;
private double ALPHA_ = 0.4577;
private double BETA_ = 0.0162;
public ArrayList<CumulativeEntry> cumulativeProbability( Configuration conf ) {
//throw new UnsupportedOperationException("Distribution not implemented");
ALPHA_ = conf.getDouble("ldbc.snb.datagen.generator.distribution.AltmannDistribution.alpha",ALPHA_);
BETA_ = conf.getDouble("ldbc.snb.datagen.generator.distribution.AltmannDistribution.beta",BETA_);
POPULATION_ = DatagenParams.numPersons;
for( int i = 1; i <= POPULATION_; ++i ) {
normalization_factor_+= Math.pow(i,-ALPHA_)*Math.exp(-BETA_*i);
}
ArrayList<CumulativeEntry> cumulative = new ArrayList<CumulativeEntry>();
for( int i = 1; i <= POPULATION_; ++i) {
double prob = Math.pow(i,-ALPHA_)*Math.exp(-BETA_*i) / normalization_factor_;
prob += cumulative.size() > 0 ? cumulative.get(i-2).prob_ : 0.0;
CumulativeEntry entry = new CumulativeEntry();
entry.prob_ = prob;
entry.value_ = i;
cumulative.add(entry);
}
return cumulative;
}
}