use of de.hpi.bpt.scylla.model.configuration.distribution.Distribution in project scylla by bptlab.
the class SimulationConfigurationParser method getDistribution.
public static Distribution getDistribution(Element element, Namespace simNamespace, String fieldType) throws ScyllaValidationException {
Distribution distribution;
if (element.getChild("arbitraryFiniteProbabilityDistribution", simNamespace) != null && fieldType.equals("string")) {
Element el = element.getChild("arbitraryFiniteProbabilityDistribution", simNamespace);
// changed name here but now in the whole project
EmpiricalStringDistribution dist = new EmpiricalStringDistribution();
List<Element> entries = el.getChildren("entry", simNamespace);
if (entries.isEmpty()) {
throw new ScyllaValidationException("You have to specify pairs of a vaule and a frequency for arbitraryFiniteProbabilityDistribution at " + getTaskOfDistribution(element) + ". Check spelling!");
}
double sum = 0;
try {
for (Element entry : entries) {
// normalize frequency to 1.0
sum += Double.valueOf(entry.getAttributeValue("frequency"));
}
for (Element entry : entries) {
dist.addEntry(entry.getAttributeValue("value"), Double.valueOf(entry.getAttributeValue("frequency")) / sum);
}
} catch (NullPointerException e) {
throw new ScyllaValidationException("You have to specify pairs of a vaule and a frequency for arbitraryFiniteProbabilityDistribution at " + getTaskOfDistribution(element) + ". Check spelling!");
}
distribution = dist;
} else if (element.getChild("arbitraryFiniteProbabilityDistribution", simNamespace) != null) {
Element el = element.getChild("arbitraryFiniteProbabilityDistribution", simNamespace);
// changed name here but now in the whole project
EmpiricalDistribution dist = new EmpiricalDistribution();
List<Element> entries = el.getChildren("entry", simNamespace);
if (entries.isEmpty()) {
throw new ScyllaValidationException("You have to specify pairs of a vaule and a frequency for arbitraryFiniteProbabilityDistribution at " + getTaskOfDistribution(element) + ". Check spelling!");
}
double sum = 0;
try {
for (Element entry : entries) {
// normalize frequency to 1.0
sum += Double.valueOf(entry.getAttributeValue("frequency"));
}
for (Element entry : entries) {
dist.addEntry(Double.valueOf(entry.getAttributeValue("value")), Double.valueOf(entry.getAttributeValue("frequency")) / sum);
}
} catch (NullPointerException e) {
throw new ScyllaValidationException("You have to specify pairs of a vaule and a frequency for arbitraryFiniteProbabilityDistribution at " + getTaskOfDistribution(element) + ". Check spelling!");
}
distribution = dist;
} else if (element.getChild("binomialDistribution", simNamespace) != null) {
Element el = element.getChild("binomialDistribution", simNamespace);
try {
double probability = Double.valueOf(el.getChildText("probability", simNamespace));
int amount = Integer.valueOf(el.getChildText("amount", simNamespace));
distribution = new BinomialDistribution(probability, amount);
} catch (NullPointerException e) {
throw new ScyllaValidationException("You have to specify a probability and an amount for binomialDistribution at " + getTaskOfDistribution(element) + ". Check spelling!");
}
} else if (element.getChild("constantDistribution", simNamespace) != null) {
Element el = element.getChild("constantDistribution", simNamespace);
try {
double constantValue = Double.valueOf(el.getChildText("constantValue", simNamespace));
distribution = new ConstantDistribution(constantValue);
} catch (NullPointerException e) {
throw new ScyllaValidationException("You have to specify a constantValue for constantDistribution at " + getTaskOfDistribution(element) + ". Check spelling!");
}
} else if (element.getChild("erlangDistribution", simNamespace) != null) {
Element el = element.getChild("erlangDistribution", simNamespace);
try {
long order = Long.valueOf(el.getChildText("order", simNamespace));
double mean = Double.valueOf(el.getChildText("mean", simNamespace));
distribution = new ErlangDistribution(order, mean);
} catch (NullPointerException e) {
throw new ScyllaValidationException("You have to specify a order and a mean for erlangDistribution at " + getTaskOfDistribution(element) + ". Check spelling!");
}
} else if (element.getChild("exponentialDistribution", simNamespace) != null) {
Element el = element.getChild("exponentialDistribution", simNamespace);
try {
double mean = Double.valueOf(el.getChildText("mean", simNamespace));
distribution = new ExponentialDistribution(mean);
} catch (NullPointerException e) {
throw new ScyllaValidationException("You have to specify a mean for exponentialDistribution at " + getTaskOfDistribution(element) + ". Check spelling!");
}
} else if (element.getChild("triangularDistribution", simNamespace) != null) {
Element el = element.getChild("triangularDistribution", simNamespace);
try {
double lower = Double.valueOf(el.getChildText("lower", simNamespace));
double upper = Double.valueOf(el.getChildText("upper", simNamespace));
double peak = Double.valueOf(el.getChildText("peak", simNamespace));
distribution = new TriangularDistribution(lower, upper, peak);
} catch (NullPointerException e) {
throw new ScyllaValidationException("You have to specify a lower, a upper and a peak for triangularDistribution at" + getTaskOfDistribution(element) + ". Check spelling!");
}
} else if (element.getChild("normalDistribution", simNamespace) != null) {
Element el = element.getChild("normalDistribution", simNamespace);
try {
double mean = Double.valueOf(el.getChildText("mean", simNamespace));
double standardDeviation = Double.valueOf(el.getChildText("standardDeviation", simNamespace));
distribution = new NormalDistribution(mean, standardDeviation);
} catch (NullPointerException e) {
throw new ScyllaValidationException("You have to specify a mean and a standardDeviation for normalDistribution at " + getTaskOfDistribution(element) + ". Check spelling!");
}
} else if (element.getChild("poissonDistribution", simNamespace) != null) {
Element el = element.getChild("poissonDistribution", simNamespace);
try {
double mean = Double.valueOf(el.getChildText("mean", simNamespace));
distribution = new PoissonDistribution(mean);
} catch (NullPointerException e) {
throw new ScyllaValidationException("You have to specify a mean for poissonDistribution at " + getTaskOfDistribution(element) + ". Check spelling!");
}
} else if (element.getChild("uniformDistribution", simNamespace) != null) {
Element el = element.getChild("uniformDistribution", simNamespace);
try {
double lower = Double.valueOf(el.getChildText("lower", simNamespace));
double upper = Double.valueOf(el.getChildText("upper", simNamespace));
distribution = new UniformDistribution(lower, upper);
} catch (NullPointerException e) {
throw new ScyllaValidationException("You have to specify a lower and an upper for uniformDistribution at " + getTaskOfDistribution(element) + ". Check spelling!");
}
} else {
throw new ScyllaValidationException("Distribution definition at " + getTaskOfDistribution(element) + " not found or not supported. Check spelling!");
}
return distribution;
}
Aggregations