source: DCWoRMS/branches/coolemall/src/experiments/e2dc2015/LoadGenerator.java @ 1591

Revision 1591, 4.6 KB checked in by wojtekp, 8 years ago (diff)
  • Property svn:mime-type set to text/plain
Line 
1package experiments.e2dc2015;
2
3import java.util.ArrayList;
4import java.util.Collections;
5import java.util.LinkedList;
6import java.util.Random;
7
8import org.apache.commons.math3.distribution.EnumeratedIntegerDistribution;
9
10import schedframe.resources.computing.profiles.load.ResourceLoadCalendar;
11import schedframe.resources.computing.profiles.load.TimestampUtilization;
12
13
14public class LoadGenerator {
15
16        //private static int[] numsToGenerate = new int[] { 0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100};
17        //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};
18        private static int[] discreteProbabilitiesInt = new int[] {30, 32, 35, 40, 45, 50, 55, 60, 70, 80, 100};
19        private static int[] discreteProbabilitiesIntNew = new int[] {10, 12, 15, 20, 25, 30, 35, 40, 50, 75, 100};
20
21       
22        private int startTime;
23        private int endTime;
24        private int nrOfPeriods;
25        private static Random randRange = new Random(99);
26        private static Random randLoad = new Random(47);
27        //private EnumeratedIntegerDistribution distribution;
28       
29        public LoadGenerator(int startTime, int endTime, int nrOfPeriods) {
30                super();
31                this.startTime = startTime;
32                this.endTime = endTime;
33                this.nrOfPeriods = nrOfPeriods;
34                //this.randRange = new Random(99);
35                //this.randLoad = new Random(47);
36                //this.distribution =  new EnumeratedIntegerDistribution(numsToGenerate, discreteProbabilities);
37        }
38       
39        public ResourceLoadCalendar createLaodCalendar(){
40
41                ResourceLoadCalendar calendar = new ResourceLoadCalendar();
42                LinkedList<TimestampUtilization> loadDistribution = new LinkedList<TimestampUtilization>();
43               
44                int prevMinTime = this.startTime;
45                int[] timeSamples = generateTimeSamples(nrOfPeriods);
46                int[] loadSamples = generateLoadSamples(nrOfPeriods);
47                       
48                for(int i = 0; i < nrOfPeriods; i++){
49                        if(endTime-prevMinTime <=0)
50                                continue;
51                        else {
52                                int currMinTime = timeSamples[i];
53                                int load = loadSamples[i];
54                                TimestampUtilization tu = new TimestampUtilization(prevMinTime, currMinTime , load);
55                                loadDistribution.add(tu);
56                                prevMinTime = currMinTime;
57                        }
58                }
59                if(prevMinTime < endTime){
60                        TimestampUtilization tu = new TimestampUtilization(prevMinTime, endTime ,0);
61                        loadDistribution.add(tu);
62                }
63                calendar.setLoadDistribution(loadDistribution);
64                System.out.println("**********");
65                 for(TimestampUtilization tu: calendar.getLoadDistribution()){
66                         System.out.println(tu.getStartTime() + ": " + tu.getEndTime() + "; " + tu.getUtlization());
67                 }
68                return calendar;
69               
70
71        }
72       
73        private int[] generateTimeSamples(int nrOfPeriods) {
74                int [] samples =  new int [nrOfPeriods];
75                ArrayList samplesList = new ArrayList(nrOfPeriods);
76                for(int i = 0; i < nrOfPeriods; i++){
77                        int val = randRange.nextInt(endTime);
78                        samplesList.add(val);
79                }
80                Collections.sort(samplesList);
81                for(int i = 0; i < nrOfPeriods; i++){
82                        samples[i]=(int) samplesList.get(i);
83                }
84                return samples;
85        }
86
87        private int[] generateLoadSamples(int  nrOfPeriods){
88                int [] samples =  new int [nrOfPeriods];
89                //samples = distribution.sample( nrOfPeriods);
90                for(int i = 0; i < nrOfPeriods; i++){
91                        int val = randLoad.nextInt(100);
92                        if(val >= 0 && val < discreteProbabilitiesInt[0]){
93                                samples[i] = 0;
94                        } else if (val >= discreteProbabilitiesInt[0] && val < discreteProbabilitiesInt[1]){
95                                samples[i] = 10;
96                        } else if (val >= discreteProbabilitiesInt[1] && val < discreteProbabilitiesInt[2]){
97                                samples[i] = 20;
98                        } else if (val >= discreteProbabilitiesInt[2] && val < discreteProbabilitiesInt[3]){
99                                samples[i] = 30;
100                        } else if (val >= discreteProbabilitiesInt[3] && val < discreteProbabilitiesInt[4]){
101                                samples[i] = 40;
102                        } else if (val >= discreteProbabilitiesInt[4] && val < discreteProbabilitiesInt[5]){
103                                samples[i] = 50;
104                        } else if (val >= discreteProbabilitiesInt[5] && val < discreteProbabilitiesInt[6]){
105                                samples[i] = 60;
106                        } else if (val >= discreteProbabilitiesInt[6] && val < discreteProbabilitiesInt[7]){
107                                samples[i] = 70;
108                        } else if (val >= discreteProbabilitiesInt[7] && val < discreteProbabilitiesInt[8]){
109                                samples[i] = 80;
110                        } else if (val >= discreteProbabilitiesInt[8] && val < discreteProbabilitiesInt[9]){
111                                samples[i] = 90;
112                        } else if (val >= discreteProbabilitiesInt[9] && val < discreteProbabilitiesInt[10]){
113                                samples[i] = 100;
114                        }
115                }
116
117                return samples;
118        }
119        public static void main(String [] args){
120                LoadGenerator lg = new LoadGenerator(0, 500, 5);
121                for(int i =0; i< 10; i++){
122                        System.out.println("**********");
123                         ResourceLoadCalendar c = lg.createLaodCalendar();
124                         for(TimestampUtilization tu: c.getLoadDistribution()){
125                                 System.out.println(tu.getStartTime() + ": " + tu.getEndTime() + "; " + tu.getUtlization());
126                         }
127                }
128
129        }
130}
Note: See TracBrowser for help on using the repository browser.