Пример #1
0
 public TJoinIN(TSystEntry aEntry, TSMO aSmoExit)
 {
     Entry     = aEntry;
     ExitSmo   = aSmoExit;
     State     = true;
     NumUnServ = 0;
 }
Пример #2
0
        private void button1_Click(object sender, EventArgs e)
        {
            List <TSMO>   smo = new List <TSMO>();
            int           NumSMO;
            double        tmin;
            TSystEntry    systEntry;
            List <TJoin>  join = new List <TJoin>();
            TJoinIN       joinIn;
            TJoinOUT      joinOut;
            double        prob;
            int           _event, i;
            List <double> AverQue     = new List <double>();
            List <double> AverDevices = new List <double>();

            NumSMO = 3; //кількість СМО
            prob   = 0;
            for (i = 0; i <= NumSMO - 1; i++)
            {
                AverQue.Add(0);
                AverDevices.Add(0);
            }
            //структура мережі масового обслуговування
            systEntry = new TSystEntry(1.0 / 0.2);             //створення вхідного потоку вимог
            smo.Add(new TSMO(1, 1, GetTimeMod(), 3));          //створення СМО1
            joinIn = new TJoinIN(systEntry, smo[0]);           // створення маршруту до СМО1
            smo.Add(new TSMO(1, 5, GetTimeMod(), 1.0 / 0.25)); //створення СМО2
            join.Add(new TJoin(smo[0], smo[1]));               //створення маршруту від СМО1 до СМО2
            smo.Add(new TSMO(1, 1, GetTimeMod(), 5));          //створення СМО3
            join.Add(new TJoin(smo[1], smo[2]));               //створення маршруту від СМО2 до СМО3
            joinOut = new TJoinOUT(smo[NumSMO - 1]);           //створення маршруту на вихідсистеми
            t       = 0;                                       // початкове значення модельного часу
            Random a = new Random();

            while (t < GetTimeMod())
            {
                tmin   = systEntry.GetMinTime();
                _event = 0;
                for (i = 0; i <= NumSMO - 1; i++)
                {
                    if (smo[i].GetMinTime() < tmin)
                    {
                        tmin   = smo[i].GetMinTime();
                        _event = i + 1;
                    }
                }
                for (i = 0; i <= NumSMO - 1; i++)
                {
                    AverQue[i]     = AverQue[i] + ((tmin - t) / GetTimeMod()) * smo[i].GetStateQue();
                    AverDevices[i] = AverDevices[i] + ((tmin) / GetTimeMod()) * smo[i].GetAverLoadChannel();
                }
                t = tmin; //просування часу в момент найближчої події
                switch (_event)
                {
                case 0:
                {
                    systEntry.Arrival(GetTimeNow());
                    joinIn.send();
                    smo[0].Seize(GetTimeNow());
                }
                break;

                case 1:
                {
                    smo[0].Releize(smo[0].GetMinChannel(), GetTimeMod(), GetTimeNow());
                    join[0].send();
                    smo[1].Seize(GetTimeNow());
                }
                break;

                case 2:
                {
                    smo[1].Releize(smo[1].GetMinChannel(), GetTimeMod(), GetTimeNow());
                    join[1].send();
                    smo[2].Seize(GetTimeNow());
                }
                break;

                case 3:
                {
                    smo[2].Releize(smo[2].GetMinChannel(), GetTimeMod(), GetTimeNow());
                    joinOut.send();
                }
                break;
                }
            }
            prob = joinIn.GetNumUnServ();
            for (i = 0; i <= NumSMO - 2; i++)
            {
                prob = prob + join[i].GetNumUnServ();
            }
            prob = prob / systEntry.GetNumArrival();

            textBox2.Text  = GetTimeNow().ToString();
            textBox3.Text  = prob.ToString();
            textBox4.Text  = joinOut.GetNumUnServ().ToString();
            textBox5.Text  = systEntry.GetNumArrival().ToString();
            textBox6.Text  = AverQue[0].ToString();
            textBox7.Text  = AverDevices[0].ToString();
            textBox8.Text  = joinIn.GetNumUnServ().ToString();
            textBox9.Text  = AverQue[1].ToString();
            textBox10.Text = AverDevices[1].ToString();
            textBox11.Text = join[0].GetNumUnServ().ToString();
            textBox12.Text = AverQue[2].ToString();
            textBox13.Text = AverDevices[2].ToString();
            textBox14.Text = join[1].GetNumUnServ().ToString();
        }