Построение и реализация моделирующих алгоритмов 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;
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д