Advertisement
AlexDanny

Project1 Class Code

Dec 12th, 2019
102
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.53 KB | None | 0 0
  1. /**
  2. * Donut Shop Project.
  3. *
  4. * Alex Meyer
  5. *10/29/2019
  6. *
  7. */
  8.  
  9. import java.util.Random;
  10. import java.util.*;
  11.  
  12. public class Project1
  13. {
  14. private int numServers = 8;
  15. private int maxServTime = 3;
  16. private double CustArrivPerMin = .25;
  17. private int seed = 97;
  18. private int timeTick=0;
  19. private Customer servers[];
  20. private int custInService = 0;
  21. private int custCompletedService = 0;
  22. private int enteringCust=0;
  23. private int minWaitTime = 0;
  24. private int maxWaitTime = 0;
  25. private int totalWaitTime = 0;
  26. private double aveWaitTime = 0;
  27. private List<Customer> waitList = new ArrayList<>();
  28. Random r = new Random(seed);
  29.  
  30. private int getPoissonRandom(double mean) {
  31. //Random r = new Random();
  32. double L = Math.exp(-mean);
  33. int k = 0;
  34. double p = 1.0;
  35. do {
  36. p = p * r.nextDouble();
  37. k++;
  38. } while (p > L);
  39. return k - 1;
  40. }
  41.  
  42. public int getRandomIntegetBetweenOneAndMax(int max){
  43. //int x = (int)(Math.random()*((max-min)+1))+min;
  44. int x = r.nextInt(max)+1;
  45. return x;
  46. }
  47. // Source: https://dzone.com/articles/random-number-generation-in-java
  48.  
  49. public void releaseCust(){
  50.  
  51. custCompletedService=0;
  52. for(int i = 0; i < servers.length; i++){
  53. if(servers[i]!=null){
  54.  
  55. if(servers[i].requiredServeTime==0){
  56. servers[i]=null;
  57. custCompletedService++;
  58. }
  59. else{
  60. servers[i].requiredServeTime--;
  61. }
  62. }
  63. }
  64. }
  65.  
  66. public void incrementWaitTime(){
  67. for(int i=0; i<waitList.size(); i++){
  68. waitList.get(i).waitTime++;
  69. }
  70. }
  71.  
  72. public void doingStats(){
  73. totalWaitTime=0;
  74. aveWaitTime=0;
  75. maxWaitTime=0;
  76. if(waitList.size()==0){
  77. totalWaitTime=0;
  78. aveWaitTime=0;
  79. minWaitTime=0;
  80. maxWaitTime=0;
  81. }
  82. else{
  83. minWaitTime=waitList.get(0).waitTime;
  84. for(int i=0; i<waitList.size(); i++){
  85.  
  86. totalWaitTime+=waitList.get(i).waitTime;
  87. aveWaitTime=(double)totalWaitTime/waitList.size();
  88. if(waitList.get(i).waitTime<minWaitTime){
  89. minWaitTime=waitList.get(i).waitTime;
  90. }
  91. if(waitList.get(i).waitTime>maxWaitTime){
  92. maxWaitTime=waitList.get(i).waitTime;
  93. }
  94. }
  95. }
  96.  
  97. }
  98.  
  99. public void newCustArriv(){
  100. enteringCust = getPoissonRandom(CustArrivPerMin);
  101. for(int i=0; i<enteringCust; i++){
  102. Customer c = new Customer(getRandomIntegetBetweenOneAndMax(maxServTime));
  103. waitList.add(c);
  104. }
  105. }
  106.  
  107. public void assignCustToServer(){
  108. custInService=0;
  109. for(int i=0; i < servers.length; i++){
  110. if(servers[i]==null){
  111. if(waitList.size()>0){
  112. servers[i]=waitList.remove(0);
  113.  
  114.  
  115. custInService++;
  116. }
  117. }
  118. else{
  119. custInService++;
  120. }
  121. }
  122. }
  123.  
  124. public void printStats(){
  125. System.out.println("Tick #: " + timeTick);
  126. System.out.println(" Entering Customers: " + enteringCust);
  127. System.out.println(" Customers in service: " + custInService);
  128. System.out.println(" Customers with completed service: " + custCompletedService);
  129. System.out.println(" # Customers in queue: " + waitList.size());
  130. System.out.println(" Total wait time: " + totalWaitTime);
  131. System.out.println(" Average wait time: " + aveWaitTime);
  132. System.out.println(" Minimun wait time: " + minWaitTime);
  133. System.out.println(" Maximun wait time: " + maxWaitTime);
  134. }
  135.  
  136. public void execute() {
  137. System.out.println("Servers present: " + numServers);
  138. System.out.println("Service requirement: " + maxServTime);
  139. System.out.println("Customer arrivals per minute: " + CustArrivPerMin);
  140. servers = new Customer[numServers];
  141. for(timeTick = 0; timeTick < 20; timeTick++){
  142. releaseCust();//
  143. incrementWaitTime();//
  144. newCustArriv();//
  145. assignCustToServer();//
  146. doingStats();
  147. printStats();
  148.  
  149. }
  150. }
  151.  
  152. public static void main(String args[]){
  153. Project1 p1 = new Project1();
  154. p1.execute();
  155. }
  156. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement