intermediate/SingleQueue2009

From ggc

Jump to: navigation, search

001 package intermediate;
002 //start auto-imports
003 import java.sql.*;
004 //end auto-imports
005 //start auto-imports
006 import java.awt.event.*;
007 import java.util.*;
008 //end auto-imports
009 
010 
011 /**
012  * All about my application.
013  @author Jam Jenkins
014  */
015 public class SingleQueue2009
016 {
017   private Queue<Customer2009> queue;
018   private ArrayList<Customer2009> doneCustomers;
019   private long interarrivalRate;
020   private long serviceTime;
021   private long endSimulationTime;
022   private long totalTime;
023 
024   public SingleQueue2009()
025   {
026     interarrivalRate=300;
027     serviceTime=150;
028     queue=new LinkedList<Customer2009>();
029     doneCustomers=new ArrayList<Customer2009>();
030   }
031 
032   public void simulate(long duration)
033   {
034     totalTime=duration;
035     endSimulationTime=System.currentTimeMillis()+duration;
036     javax.swing.Timer enterQueue=new javax.swing.Timer(0new Act());
037     enterQueue.start();
038     //do for duration:
039     //make a customer enter the queue on average every so many seconds
040     //so long as someone is in the queue, the cashier provides service
041     //when the cashier finishes one customer, they start the next
042   }
043 
044   public int getDurationBetweenCustomers()
045   {
046     return (int)(2*Math.random()*interarrivalRate);
047   }
048 
049   public int getDurationOfService()
050   {
051     return (int)(2*Math.random()*serviceTime);
052   }
053 
054   public class Act implements ActionListener
055   {
056     public void actionPerformed(ActionEvent e)
057     {
058       if(System.currentTimeMillis()>=endSimulationTime)
059       {
060         ((javax.swing.Timer)e.getSource()).stop();
061         System.out.println("done");
062         return;
063       }
064       Customer2009 customer=new Customer2009();
065       customer.joinQueue();
066       queue.offer(customer);
067       int between=getDurationBetweenCustomers();
068       ((javax.swing.Timer)e.getSource()).setDelay(between);
069       //System.out.println("Time elapsed: "+between+" Customer entering queue at time "+
070       //                   System.currentTimeMillis());
071       //System.out.println("Queue size: "+queue.size());
072       if(queue.size()==1)
073       {
074         customer.startService();
075         javax.swing.Timer server=new javax.swing.Timer(getDurationOfService()new Serve());
076         server.start();
077       }
078     }
079   }
080 
081   public class Serve implements ActionListener
082   {
083     public void actionPerformed(ActionEvent e)
084     {
085       if(System.currentTimeMillis()>=endSimulationTime)
086       {
087         ((javax.swing.Timer)e.getSource()).stop();
088         System.out.println("done");
089         return;
090       }
091       //System.out.println("Customer leaves queue");
092       Customer2009 customer=queue.remove();
093       customer.finishService();
094       System.out.println("adding to done");
095       doneCustomers.add(customer);
096       //System.out.println("Queue size: "+queue.size());
097       if(queue.size()>0)
098       {
099         //System.out.println("Customer starts service");
100         queue.peek().startService();
101         int between=getDurationOfService();
102         ((javax.swing.Timer)e.getSource()).setDelay(between);
103         //System.out.println("Queue size: "+queue.size());
104       }
105       else
106       {
107         ((javax.swing.Timer)e.getSource()).stop();
108 
109       }
110       System.out.println("Average wait time: "+getAverageWaitTime());
111       System.out.println("Server utility : "+getServerUtility());
112     }
113   }
114 
115   public double getAverageWaitTime()
116   {
117     double sum=0;
118     for(Customer2009 c: doneCustomers)
119     {
120       sum+=c.getWaitTime();
121     }
122     return sum/doneCustomers.size();
123   }
124 
125   public double getServerUtility()
126   {
127     double sum=0;
128     for(Customer2009 c: doneCustomers)
129     {
130       sum+=c.getServiceTime();
131     }
132     return sum/totalTime;
133   }
134 
135   public static void main(String[] args)
136   {
137     SingleQueue2009 sim=new SingleQueue2009();
138     sim.simulate(40000);
139   }
140 }


Download/View intermediate/SingleQueue2009.java





Views
Personal tools
Add to 
del.icio.usAdd to 
diggAdd to 
FacebookAdd to 
favoritesAdd to 
GoogleAdd to 
MySpaceAdd to 
PrintAdd to 
SlashdotAdd to 
StumbleUponAdd to 
Twitter