示例#1
0
        /// <summary>
        /// Создает экземпляр класса NetworkModel по описанию сети обслуживания
        /// </summary>
        /// <returns>The network model.</returns>
        /// <param name="Description">Описание сети обслуживания</param>
        public static NetworkModel CreateNetworkModel(DescriptionOFJQN Description, Random rand)
        {
            InfoNode Info = new InfoNode();

            Info.SetCurentTime(0);

            var Nodes = new Node[Description.Theta.Dimention];

            //Источник требований
            Nodes[0] = new SourceNode(0, rand, new ExponentialVariable(rand, Description.Lambda0), Nodes, Info, Description.Theta.RoutingRow(0, 0));
            //Базовые системы
            for (int i = 0; i < Description.S.Length; i++)
            {
                Nodes[Description.S[i]] = new ServiceNode(Description.S[i], rand, new RandomVariables.ExponentialVariable(rand, Description.mu[i]),
                                                          new QueueFCFS(), Description.kappa[i], Nodes, Info, Description.Theta.RoutingMatrixForNode(Description.S[i]));
            }
            //Дивайдеры
            for (int k = 0; k < Description.F.Length; k++)
            {
                Nodes[Description.F[k]] = new ForkNode(Description.F[k], k + 1, rand, Nodes, Info, Description.Theta.RoutingRow(Description.F[k], k + 1));
            }
            //Интеграторы
            for (int k = 0; k < Description.J.Length; k++)
            {
                Nodes[Description.J[k]] = new JoinNode(Description.J[k], rand, Nodes, Info, Description.Theta.RoutingMatrixForNode(Description.J[k]));
            }



            return(new NetworkModel(Nodes, Info, rand));
        }
示例#2
0
        /// <summary>
        /// Создание и инициализация интератора
        /// </summary>
        /// <param name="ID"></param>
        /// <param name="r"></param>
        /// <param name="RouteMatrixForNode">Элемент матрицы i,j задает вероятность для i-фрагмента поступить в j узел</param>
        public JoinNode(int ID, Random r, Node[] Nodes, InfoNode Info, double[,] RouteMatrixForNode)
        {
            this.ID    = ID;
            this.r     = r;
            this.Nodes = Nodes;
            this.Info  = Info;
            this.RouteMatrixForNode = RouteMatrixForNode;
            this.NextEventTime      = double.PositiveInfinity;

            InBuffer = new List <Fragment>();
        }
示例#3
0
        /// <summary>
        /// Создание дивайдера
        /// </summary>
        /// <param name="ID">Идентификатор системы</param>
        /// <param name="ForkNodeID">Идентификатор дивайдера</param>
        /// <param name="r">Генератор случайных чисел</param>
        /// <param name="Nodes">Узлы для обмена фрагментами</param>
        /// <param name="Info">Информационный узел</param>
        /// <param name="RouteRow">Строка для маршрутизации. Элемент строки строки с номером i задает число фрагментов, которые поступят в
        /// систему Nodes[i]/// </param>
        public ForkNode(int ID, int ForkNodeID, Random r, Node[] Nodes, InfoNode Info, double[] RouteRow)
        {
            //Передача параметров
            this.ID         = ID;
            this.ForkNodeID = ForkNodeID;
            this.r          = r;
            this.Nodes      = Nodes;
            this.Info       = Info;
            this.RouteRow   = RouteRow;

            //Обнуление числа поступивших фрагментов
            this.NumberOfArrivedDemads = 0;

            //Число фрагметов, получаемых при делении
            this.ForkDegree = (int)RouteRow.Sum();
            NextEventTime   = double.PositiveInfinity;
        }
示例#4
0
        /// <summary>
        /// Инициализация источника требований
        /// </summary>
        /// <param name="r">Интервалы между поступлениями требований</param>
        /// <param name="RouteRow">Строка для маршрутизации требований</param>
        /// <param name="ID">Идентификатор узла</param>
        public SourceNode(int ID, Random r, RandomVariable ArrivalInterval, Node[] Nodes, InfoNode Info, double[] RouteRow)
        {
            //Передача параметров
            this.ID = ID;
            this.r  = r;
            this.ArrivalInterval = ArrivalInterval;
            this.Nodes           = Nodes;
            this.Info            = Info;
            this.r        = r;
            this.RouteRow = RouteRow;

            //Первое поступление происходит в нулевой момент времени
            this.NextEventTime = 0;
            FragmentCounter    = 0;
            //Для сбора статистики
            ResponseTimes = new List <double>();
        }
示例#5
0
        /// <summary>
        /// Базовая система
        /// </summary>
        /// <param name="r">Генратор случайных чисел</param>
        /// <param name="InBuffer">Буффер для фргаментов</param>
        /// <param name="kappa">Число однотипных обслуживающих приборов</param>
        /// <param name="ServiceTime">Случайная величина - длительность обслуживания фрагмента прибором</param>
        /// <param name="RouteMatrix">Матрица маршрутная
        /// Элемент i,j задает вероятность для i фрагмента попасть в j узел</param>
        /// <param name="Nodes">Узлы</param>
        /// <param name="Info">Информационный узел</param>
        public ServiceNode(int ID, Random r, RandomVariable ServiceTime, Buffer InBuffer, int kappa, Node[] Nodes, InfoNode Info, double[,] RouteMatrix)
        {
            //Копирование параметров
            this.ID          = ID;
            this.r           = r;
            this.ServiceTime = ServiceTime;
            this.RouteMatrix = RouteMatrix;
            this.Nodes       = Nodes;
            this.Info        = Info;
            this.InBuffer    = InBuffer;
            this.Kappa       = kappa;

            //Время активизации узла
            this.NextEventTime = Double.PositiveInfinity;

            //Создаем список фаргментов на приборах
            ListOfFragments = new SortedDictionary <Label, Fragment>();
            //Число поступивших фрагментов
            NumberOfArrivedDemads = 0;



            //Для статистики
            this.StateProbabilities        = new double[MaxNumber];
            this.ArrivalStateProbabilities = new double[MaxNumber];
            this.PredEventTime             = 0;
        }
示例#6
0
 public NetworkModel(Node[] Nodes, InfoNode Info, Random r)
 {
     this.Nodes = Nodes;
     this.Info  = Info;
     this.r     = r;
 }