Построение и реализация моделирующих алгоритмов q-схем. Метод “ΔT” - C#

Узнай цену своей работы

Формулировка задачи:

Здравствуйте! мне нужна помощь в реализации медота дельта на С# для схемы которая представлена на рисунке, форму уже создал, помощь нужна в том чтобы написать код к ней.WindowsFormsApplication11.rar

Решение задачи: «Построение и реализация моделирующих алгоритмов q-схем. Метод “ΔT”»

textual
Листинг программы
    /// <summary>
    /// Генерирует  сигналы через случайные промежутки вермени
    /// </summary>
    public abstract class Generator
    {
        protected static Random rnd = new Random(1);
 
        //время следующего сигнала
        protected double nextSignalTime;
 
        /// <summary>
        /// Проверить, наступило ли время сигнала, и если да, то сгенерировать следующий сигнал
        /// </summary>
        public virtual bool CheckAndGenerate(double currentTime)
        {
            if (nextSignalTime <= currentTime)
            {
                GenerateNextSignalTime(currentTime);
                return true;
            }
 
            return false;
        }
 
        /// <summary>
        /// Генерация след сигнала
        /// </summary>
        protected abstract void GenerateNextSignalTime(double currentTime);
    }
 
    /// <summary>
    /// Генератор сигнала с равномерным распределением
    /// </summary>
    public class LinearGenerator : Generator
    {
        double min;
        double max;
 
        public LinearGenerator( double min, double max)
        {
            this.min = min;
            this.max = max;
        }
 
        protected override void GenerateNextSignalTime(double currentTime)
        {
            var t = min + rnd.NextDouble() * (max - min);
            nextSignalTime = currentTime + t;
        }
    }
 
    /// <summary>
    /// Генератор сигнала с экспоненциальным распределением
    /// </summary>
    public class ExponentialGenerator : Generator
    {
        double mean;
 
        public ExponentialGenerator(double mean)
        {
            this.mean = mean;
        }
 
        protected override void GenerateNextSignalTime(double currentTime)
        {
            var t = -mean * Math.Log(rnd.NextDouble());
            nextSignalTime = currentTime + t;
        }
    }
 
 
    /// <summary>
    /// Канал обслуживания с накопителем
    /// (равномерное распределение времени обслуживания)
    /// </summary>
    class ServiceChannel : LinearGenerator
    {
        /// <summary>
        /// Текущая длина очереди
        /// </summary>
        public int QueueLength { get; private set;}
 
        public ServiceChannel(double min, double max) : base(min, max)
        {
        }
 
        /// <summary>
        /// Добавление заявки в очередь
        /// </summary>
        public void AddRequest(double currentTime)
        {
            if(QueueLength == 0)
                GenerateNextSignalTime(currentTime);
 
            QueueLength++;
        }
 
        /// <summary>
        /// Обрабатываем заявки
        /// </summary>
        public override bool CheckAndGenerate(double currentTime)
        {
            if (QueueLength <= 0)
                return false;//нет заявок в очереди
 
            if (nextSignalTime <= currentTime)
            {
                GenerateNextSignalTime(currentTime);
                QueueLength--;//обрабатываем заявку
                return true;
            }
 
            return false;
        }
    }
 
    /// <summary>
    /// Решатель
    /// </summary>
    class Solver
    {
        public Generator G1;
        public Generator G2;
        public ServiceChannel U1;
        public ServiceChannel U2;
 
        private double time = 0;
 
        public Solver(Generator G1, Generator G2, ServiceChannel U1, ServiceChannel U2)
        {
            this.G1 = G1;
            this.G2 = G2;
            this.U1 = U1;
            this.U2 = U2;
        }
 
        public void Run(double dt)
        {
            if (G1.CheckAndGenerate(time))
                U1.AddRequest(time);
 
            if (U1.CheckAndGenerate(time))
                U2.AddRequest(time);
 
            if (G2.CheckAndGenerate(time))
                U2.AddRequest(time);
 
            U2.CheckAndGenerate(time);
 
            time += dt;
        }
    }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 4.222 из 5
Похожие ответы