/// <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)); }
/// <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>(); }
/// <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; }
/// <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>(); }
/// <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; }
public NetworkModel(Node[] Nodes, InfoNode Info, Random r) { this.Nodes = Nodes; this.Info = Info; this.r = r; }