package experiments.e2dc2015; import java.util.ArrayList; import java.util.Collections; import java.util.LinkedList; import java.util.Random; import org.apache.commons.math3.distribution.EnumeratedIntegerDistribution; import schedframe.resources.computing.profiles.load.ResourceLoadCalendar; import schedframe.resources.computing.profiles.load.TimestampUtilization; public class LoadGenerator { //private static int[] numsToGenerate = new int[] { 0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100}; //private static double[] discreteProbabilities = new double[] {0.3, 0.02, 0.03, 0.05, 0.05, 0.05, 0.05, 0.05, 0.1, 0.1, 0.2}; private static int[] discreteProbabilitiesInt = new int[] {30, 32, 35, 40, 45, 50, 55, 60, 70, 80, 100}; private static int[] discreteProbabilitiesIntNew = new int[] {10, 12, 15, 20, 25, 30, 35, 40, 50, 75, 100}; private int startTime; private int endTime; private int nrOfPeriods; private static Random randRange = new Random(99); private static Random randLoad = new Random(47); //private EnumeratedIntegerDistribution distribution; public LoadGenerator(int startTime, int endTime, int nrOfPeriods) { super(); this.startTime = startTime; this.endTime = endTime; this.nrOfPeriods = nrOfPeriods; //this.randRange = new Random(99); //this.randLoad = new Random(47); //this.distribution = new EnumeratedIntegerDistribution(numsToGenerate, discreteProbabilities); } public ResourceLoadCalendar createLaodCalendar(){ ResourceLoadCalendar calendar = new ResourceLoadCalendar(); LinkedList loadDistribution = new LinkedList(); int prevMinTime = this.startTime; int[] timeSamples = generateTimeSamples(nrOfPeriods); int[] loadSamples = generateLoadSamples(nrOfPeriods); for(int i = 0; i < nrOfPeriods; i++){ if(endTime-prevMinTime <=0) continue; else { int currMinTime = timeSamples[i]; int load = loadSamples[i]; TimestampUtilization tu = new TimestampUtilization(prevMinTime, currMinTime , load); loadDistribution.add(tu); prevMinTime = currMinTime; } } if(prevMinTime < endTime){ TimestampUtilization tu = new TimestampUtilization(prevMinTime, endTime ,0); loadDistribution.add(tu); } calendar.setLoadDistribution(loadDistribution); System.out.println("**********"); for(TimestampUtilization tu: calendar.getLoadDistribution()){ System.out.println(tu.getStartTime() + ": " + tu.getEndTime() + "; " + tu.getUtlization()); } return calendar; } private int[] generateTimeSamples(int nrOfPeriods) { int [] samples = new int [nrOfPeriods]; ArrayList samplesList = new ArrayList(nrOfPeriods); for(int i = 0; i < nrOfPeriods; i++){ int val = randRange.nextInt(endTime); samplesList.add(val); } Collections.sort(samplesList); for(int i = 0; i < nrOfPeriods; i++){ samples[i]=(int) samplesList.get(i); } return samples; } private int[] generateLoadSamples(int nrOfPeriods){ int [] samples = new int [nrOfPeriods]; //samples = distribution.sample( nrOfPeriods); for(int i = 0; i < nrOfPeriods; i++){ int val = randLoad.nextInt(100); if(val >= 0 && val < discreteProbabilitiesInt[0]){ samples[i] = 0; } else if (val >= discreteProbabilitiesInt[0] && val < discreteProbabilitiesInt[1]){ samples[i] = 10; } else if (val >= discreteProbabilitiesInt[1] && val < discreteProbabilitiesInt[2]){ samples[i] = 20; } else if (val >= discreteProbabilitiesInt[2] && val < discreteProbabilitiesInt[3]){ samples[i] = 30; } else if (val >= discreteProbabilitiesInt[3] && val < discreteProbabilitiesInt[4]){ samples[i] = 40; } else if (val >= discreteProbabilitiesInt[4] && val < discreteProbabilitiesInt[5]){ samples[i] = 50; } else if (val >= discreteProbabilitiesInt[5] && val < discreteProbabilitiesInt[6]){ samples[i] = 60; } else if (val >= discreteProbabilitiesInt[6] && val < discreteProbabilitiesInt[7]){ samples[i] = 70; } else if (val >= discreteProbabilitiesInt[7] && val < discreteProbabilitiesInt[8]){ samples[i] = 80; } else if (val >= discreteProbabilitiesInt[8] && val < discreteProbabilitiesInt[9]){ samples[i] = 90; } else if (val >= discreteProbabilitiesInt[9] && val < discreteProbabilitiesInt[10]){ samples[i] = 100; } } return samples; } public static void main(String [] args){ LoadGenerator lg = new LoadGenerator(0, 500, 5); for(int i =0; i< 10; i++){ System.out.println("**********"); ResourceLoadCalendar c = lg.createLaodCalendar(); for(TimestampUtilization tu: c.getLoadDistribution()){ System.out.println(tu.getStartTime() + ": " + tu.getEndTime() + "; " + tu.getUtlization()); } } } }