Ejemplo n.º 1
0
 private void DoAnalisis()
 {
     if (_analisisStepCounter < _analisisViewModel.StepBetweenAnalisisCount)
     {
         _analisisStepCounter++;
         return;
     }
     _analisisStepCounter -= _analisisViewModel.StepBetweenAnalisisCount;
     if (_scenarioConfig.AverangeQueueLenght)
     {
         double value = (from service in ServicesList where service is QueueService select(service as QueueService).AverangeQueueLenght).Average();
         _analisisViewModel.AddPoint(AnalisisConstants.AVERANGE_QUEUE_LENGHT, null, currentTime.TotalSeconds, value);
     }
     //Расчет входящего и исходящего трафика
     if (_scenarioConfig.AgentInputOutput || _scenarioConfig.AgentInputOutputByGroup)
     {
         _analisis.AddAgentInputOutput(currentTime, _addCount, _removeCount);
         _analisisViewModel.AddPoint(AnalisisConstants.AGENT_INPUT_OUTPUT_NAME, "Input", currentTime.TotalSeconds, _addCount);
         _analisisViewModel.AddPoint(AnalisisConstants.AGENT_INPUT_OUTPUT_NAME, "Output", currentTime.TotalSeconds, -_removeCount);
         _addCount    = 0;
         _removeCount = 0;
     }
     //Расчет плотности
     if (_scenarioConfig.SpectralDensity)
     {
         byte[,] mas = map.GetMap();
         for (int i = 0; i < mas.GetLength(0); i++)
         {
             for (int j = 0; j < mas.GetLength(1); j++)
             {
                 if ((mas[i, j] & 0x40) == 0x40)
                 {
                     _analisis.PassengerDensity[i, j] += 1;
                 }
             }
         }
     }
     //Расчет количества агентов
     if (_scenarioConfig.AgentCountOnMap)
     {
         _analisisViewModel.AddPoint(AnalisisConstants.AGENT_COUNT_ON_MAP_NAME, null, currentTime.TotalSeconds, agentsList.Count);
         _analisis.AddAgentsCount(currentTime, agentsList.Count);
     }
     //Расчет количества агентов по группам
     if (_scenarioConfig.AgentCountOnMapByGroup)
     {
         List <int> grouper = new List <int>();
         foreach (var group in agentGroups)
         {
             int count = agentsList.Count(ag => ag.Group == group.ID);
             _analisisViewModel.AddPoint(AnalisisConstants.AGENT_COUNT_ON_MAP_BY_GROUP_NAME, group.Name, currentTime.TotalSeconds, count);
             grouper.Add(count);
         }
         foreach (var service in ServicesList)
         {
             if (service is StopService)
             {
                 int count = agentsList.Count(ag => ag.Group == (service as StopService).PassengersGroup.ID);
                 _analisisViewModel.AddPoint(AnalisisConstants.AGENT_COUNT_ON_MAP_BY_GROUP_NAME, (service as StopService).PassengersGroup.Name, currentTime.TotalSeconds, count);
                 grouper.Add(count);
             }
         }
         _analisis.AddAgentsCountByGroup(currentTime, grouper.ToArray());
     }
     _analisisViewModel.AnalisisComplit();
 }