next up previous contents index
Next: Client-Server System Up: Practice in DEVS# Previous: Utilization in DEVS#   Contents   Index


Average Queue Length in DEVS#

The class Buffer in DEVSsharp/ModelBase/Buffer.cs shows how to collect the average queue length. The default implementation of Get_Statistics_s() at Atomic is to return Get_s(). However, Buffer overrides the Get_Statistics_s() such that it returns the number of jobs waiting in a buffer m_Jobs as follows.

    public override string Get_Statistics_s()
    {   // length Only
        return string.Format("{0}", m_Jobs.Count);
    }

The class Buffer inherits Atomic::when_receive_cs() shown in the previous section. But it overrides GetPerformance() function as follows.

    public override Dictionary<string, double> GetPerformance()
    {
        Dictionary<string, double> statistics = new Dictionary<string,double>();
        if(CollectStatisticsFlag()==true) {
            double E_i=0; // expectation of queueing line length
            foreach(string key in m_statistics.Keys)
            {
                double probability = m_statistics[key]/TimeCurrent;// P(i)

                if(probability < 0.0 || probability > 1.0) {
                    throw new Exception("Invalid Probability!");
                }
                else{
                    int i = System.Convert.ToInt32(key);
                    E_i += probability * i;// E(i)=\Sum_{i} i*P(i)
                }
            }
            statistics.Add("Average Q length: ", E_i);
        }
        return statistics;
    }
It makes $ P(C$ =i) using m_statistics[i]. Then it makes $ E(C)$ by summing over i*$ P$ (i) for all i as defined in Equation (4.7).

The rest other functions defined in Buffer class will be examined in the next section.



MHHwang 2007-05-08