Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /**
- * Donut Shop Project.
- *
- * Alex Meyer
- *10/29/2019
- *
- */
- import java.util.Random;
- import java.util.*;
- public class Project1
- {
- private int numServers = 8;
- private int maxServTime = 3;
- private double CustArrivPerMin = .25;
- private int seed = 97;
- private int timeTick=0;
- private Customer servers[];
- private int custInService = 0;
- private int custCompletedService = 0;
- private int enteringCust=0;
- private int minWaitTime = 0;
- private int maxWaitTime = 0;
- private int totalWaitTime = 0;
- private double aveWaitTime = 0;
- private List<Customer> waitList = new ArrayList<>();
- Random r = new Random(seed);
- private int getPoissonRandom(double mean) {
- //Random r = new Random();
- double L = Math.exp(-mean);
- int k = 0;
- double p = 1.0;
- do {
- p = p * r.nextDouble();
- k++;
- } while (p > L);
- return k - 1;
- }
- public int getRandomIntegetBetweenOneAndMax(int max){
- //int x = (int)(Math.random()*((max-min)+1))+min;
- int x = r.nextInt(max)+1;
- return x;
- }
- // Source: https://dzone.com/articles/random-number-generation-in-java
- public void releaseCust(){
- custCompletedService=0;
- for(int i = 0; i < servers.length; i++){
- if(servers[i]!=null){
- if(servers[i].requiredServeTime==0){
- servers[i]=null;
- custCompletedService++;
- }
- else{
- servers[i].requiredServeTime--;
- }
- }
- }
- }
- public void incrementWaitTime(){
- for(int i=0; i<waitList.size(); i++){
- waitList.get(i).waitTime++;
- }
- }
- public void doingStats(){
- totalWaitTime=0;
- aveWaitTime=0;
- maxWaitTime=0;
- if(waitList.size()==0){
- totalWaitTime=0;
- aveWaitTime=0;
- minWaitTime=0;
- maxWaitTime=0;
- }
- else{
- minWaitTime=waitList.get(0).waitTime;
- for(int i=0; i<waitList.size(); i++){
- totalWaitTime+=waitList.get(i).waitTime;
- aveWaitTime=(double)totalWaitTime/waitList.size();
- if(waitList.get(i).waitTime<minWaitTime){
- minWaitTime=waitList.get(i).waitTime;
- }
- if(waitList.get(i).waitTime>maxWaitTime){
- maxWaitTime=waitList.get(i).waitTime;
- }
- }
- }
- }
- public void newCustArriv(){
- enteringCust = getPoissonRandom(CustArrivPerMin);
- for(int i=0; i<enteringCust; i++){
- Customer c = new Customer(getRandomIntegetBetweenOneAndMax(maxServTime));
- waitList.add(c);
- }
- }
- public void assignCustToServer(){
- custInService=0;
- for(int i=0; i < servers.length; i++){
- if(servers[i]==null){
- if(waitList.size()>0){
- servers[i]=waitList.remove(0);
- custInService++;
- }
- }
- else{
- custInService++;
- }
- }
- }
- public void printStats(){
- System.out.println("Tick #: " + timeTick);
- System.out.println(" Entering Customers: " + enteringCust);
- System.out.println(" Customers in service: " + custInService);
- System.out.println(" Customers with completed service: " + custCompletedService);
- System.out.println(" # Customers in queue: " + waitList.size());
- System.out.println(" Total wait time: " + totalWaitTime);
- System.out.println(" Average wait time: " + aveWaitTime);
- System.out.println(" Minimun wait time: " + minWaitTime);
- System.out.println(" Maximun wait time: " + maxWaitTime);
- }
- public void execute() {
- System.out.println("Servers present: " + numServers);
- System.out.println("Service requirement: " + maxServTime);
- System.out.println("Customer arrivals per minute: " + CustArrivPerMin);
- servers = new Customer[numServers];
- for(timeTick = 0; timeTick < 20; timeTick++){
- releaseCust();//
- incrementWaitTime();//
- newCustArriv();//
- assignCustToServer();//
- doingStats();
- printStats();
- }
- }
- public static void main(String args[]){
- Project1 p1 = new Project1();
- p1.execute();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement