예제 #1
0
파일: Form1.cs 프로젝트: maksudin/Kursach
 private void setupVars(CmoModel cmo)
 {
     cmo.Tzmax = 0.3;
     cmo.Tzmin = 0.6;
     cmo.Tsmax = 6.0;
     cmo.Tsmin = 1.0;
 }
예제 #2
0
파일: Form1.cs 프로젝트: maksudin/Kursach
        private void button1_Click(object sender, EventArgs e)
        {
            richTextBox1.Clear();
            double[] servers = { 0, 0, 0 };
            double   time = 0, task_interval = 0, task_finish_time = 0;
            int      tasks_denied = 0, tasks_finished = 0, tasks = 0;
            double   time_finish_sum = 0;
            bool     servers_full;

            CmoModel cmo = new CmoModel();

            setupVars(cmo);

            Random r = new Random();

            while (time <= max_time) // поменять на 3600
            {
                servers_full  = true;
                task_interval = r.NextDouble() * (cmo.Tzmax - cmo.Tzmin) + cmo.Tzmin;             // промежуток прихода задачи
                Console.WriteLine(task_interval);
                time += task_interval;
                tasks++;                                           // всего задач


                for (int i = 0; i < 3; i++)
                {
                    servers[i] -= task_interval;
                }

                for (int i = 0; i < 3; i++)
                {
                    if (servers[i] <= 0)
                    {
                        task_finish_time = r.NextDouble() * (cmo.Tsmax - cmo.Tsmin) + cmo.Tsmin; // время обработки задачи
                        servers[i]       = task_finish_time;
                        tasks_finished++;                                                        // обработанные задачи
                        servers_full     = false;
                        time_finish_sum += task_finish_time;
                        break;
                    }
                }

                if (servers_full == true)
                {
                    tasks_denied++;                                     // необработанные задачи
                }
            }

            cmo.l    = tasks / max_time;
            cmo.Tobr = time_finish_sum / tasks;                         // среднее время обработки
            cmo.m    = 1 / cmo.Tobr;                                    // интенсивность потока обслуживания
            double P = cmo.l / cmo.m;                                   // Интенсивность загрузки = лямбда(2) / M

            cmo.p0       = Math.Pow((1 + P + (Math.Pow(P, 2) / 2) + (Math.Pow(P, 3) / 6)), -1);
            cmo.p1       = P * cmo.p0;
            cmo.p2       = Math.Pow(P, 2) / 2 * cmo.p0;
            cmo.p3       = Math.Pow(P, 3) / 6 * cmo.p0;
            cmo.p_denied = cmo.p3;
            cmo.q        = 1 - cmo.p_denied;
            cmo.s        = cmo.l * cmo.q;
            cmo.k        = cmo.s / cmo.m;


            textBox1.Clear();
            textBox1.AppendText("" + tasks);
            textBox3.Clear();
            textBox3.AppendText("" + tasks_finished);
            textBox2.Clear();
            textBox2.AppendText("" + tasks_denied);


            richTextBox1.AppendText(String.Format("P0={0:0.0000}\n", cmo.p0));
            richTextBox1.AppendText(String.Format("P1={0:0.0000}\n", cmo.p1));
            richTextBox1.AppendText(String.Format("P2={0:0.0000}\n", cmo.p2));
            richTextBox1.AppendText(String.Format("P3={0:0.0000}\n", cmo.p3));
            richTextBox1.AppendText(String.Format("Q={0:0.0000}\n", cmo.q));
            richTextBox1.AppendText(String.Format("S={0:0.0000}" + " задач/сек\n", cmo.s));
            richTextBox1.AppendText(String.Format("Pотк={0:0.0000}\n", cmo.p_denied));
            richTextBox1.AppendText(String.Format("K={0:0.0000}\n ", cmo.k));
        }
예제 #3
0
파일: Form1.cs 프로젝트: maksudin/Kursach
        private void button2_Click(object sender, EventArgs e)
        {
            richTextBox1.Clear();
            double[] servers = { 0, 0, 0 };
            double   time = 0, task_interval = 0, task_finish_time = 0;
            int      tasks_denied = 0, tasks_finished = 0, tasks = 0;
            double   time_finish_sum = 0, u = 0, v = 0;
            bool     servers_full;

            CmoModel cmoe = new CmoModel();

            Random r = new Random();

            while (time <= max_time) // поменять на 3600
            {
                servers_full  = true;
                u             = r.NextDouble();
                task_interval = Math.Log10(1 - u) / (-2);          // промежуток прихода задачи
                time         += task_interval;
                tasks++;                                           // всего задач

                for (int i = 0; i < 3; i++)
                {
                    servers[i] -= task_interval;
                }

                for (int i = 0; i < 3; i++)
                {
                    if (servers[i] <= 0)
                    {
                        v = r.NextDouble();                                         // время обработки задачи
                        task_finish_time = Math.Log10(1 - v) / (-3) * 3;            // домнажаем ещё на 3 чтобы распределение было от 0 до 4
                        servers[i]       = task_finish_time;
                        tasks_finished++;                                           // обработанные задачи
                        servers_full     = false;
                        time_finish_sum += task_finish_time;
                        break;
                    }
                }

                if (servers_full == true)
                {
                    tasks_denied++;                                     // необработанные задачи
                }
            }

            cmoe.l    = tasks / max_time;
            cmoe.Tobr = time_finish_sum / tasks;                         // среднее время обработки
            cmoe.m    = 1 / cmoe.Tobr;                                   // интенсивность потока обслуживания
            double P = cmoe.l / cmoe.m;                                  // Интенсивность загрузки = лямбда(2) / M

            cmoe.p0       = Math.Pow((1 + P + (Math.Pow(P, 2) / 2) + (Math.Pow(P, 3) / 6)), -1);
            cmoe.p1       = P * cmoe.p0;
            cmoe.p2       = Math.Pow(P, 2) / 2 * cmoe.p0;
            cmoe.p3       = Math.Pow(P, 3) / 6 * cmoe.p0;
            cmoe.p_denied = cmoe.p3;
            cmoe.q        = 1 - cmoe.p_denied;
            cmoe.s        = cmoe.l * cmoe.q;
            cmoe.k        = cmoe.s / cmoe.m;

            textBox1.Clear();
            textBox1.AppendText("" + tasks);
            textBox3.Clear();
            textBox3.AppendText("" + tasks_finished);
            textBox2.Clear();
            textBox2.AppendText("" + tasks_denied);


            richTextBox1.AppendText(String.Format("P0={0:0.0000}\n", cmoe.p0));
            richTextBox1.AppendText(String.Format("P1={0:0.0000}\n", cmoe.p1));
            richTextBox1.AppendText(String.Format("P2={0:0.0000}\n", cmoe.p2));
            richTextBox1.AppendText(String.Format("P3={0:0.0000}\n", cmoe.p3));
            richTextBox1.AppendText(String.Format("Q={0:0.0000}\n", cmoe.q));
            richTextBox1.AppendText(String.Format("S={0:0.0000}" + " задач/сек\n", cmoe.s));
            richTextBox1.AppendText(String.Format("Pотк={0:0.0000}\n", cmoe.p_denied));
            richTextBox1.AppendText(String.Format("K={0:0.0000}\n ", cmoe.k));
        }