Ejemplo n.º 1
0
        SimProcedure GenerateSimGraph(StartSimulationViewModel model)
        {
            SimProcedures = GetSimProcedures(model.Procedures);
            SimResources  = GetSimResources(model.Resources);

            CreateProceduresLinks(model.ProcLinks);
            CreateResourcesLinks(model.ProcResLinks);
            UpdateProceduresResParams();

            var startProcedure = SimProcedures.SingleOrDefault(x => x.ProcedureKey == model.StartProcKey);

            return(startProcedure);
        }
Ejemplo n.º 2
0
        void Simulate()
        {
            var isFinished = false;

            while (!isFinished)
            {
                StartProcedure.UpdateState(CurrentTime, Step);

                isFinished = SimProcedures.All(x => x.Status == ProcedureStatus.Finished);

                if (!isFinished)
                {
                    CurrentTime += Step;
                }
            }
        }
Ejemplo n.º 3
0
        SimulationHistory GetSimHistory()
        {
            var history = new SimulationHistory
            {
                Duration    = CurrentTime,
                WaitingTime = SimProcedures.Sum(x => x.WaitingTime),
                TotalCost   = SimResources.Sum(x => x.Resource.Price),
                Complexity  = Complexity,
                Step        = Step,
                DateTime    = DateTime.Now,
                Resources   = SimResources.Select(x => new ResourceHistory
                {
                    ResourceName = x.Resource.ResourceName,
                    ResourceId   = x.Resource.ResourceId,
                    Cost         = x.Resource.Price,
                    UseTime      = x.ActiveTime.Sum(t => t.Item2 - t.Item1),
                    Downtime     = CurrentTime - x.ActiveTime.Sum(t => t.Item2 - t.Item1),
                    UseHistory   = x.ActiveTime.Select(t => new ResourceUseHistory
                    {
                        StartTime = t.Item1,
                        EndTime   = t.Item2
                    }).ToList(),
                }).ToList(),
                Procedures = SimProcedures.Select(x => new ProcedureHistory
                {
                    ProcedureName  = x.Procedure.Name,
                    ProcedureAlias = x.Procedure.Alias,
                    StartTime      = x.StartTime,
                    EndTime        = x.EndTime,
                    WaitingTime    = x.WaitingTime,
                    RandomEvents   = x.SimRandomEvents.Where(e => e.IsHappened).Select(e => new RandomEventHistory
                    {
                        EventName  = e.Event.EventName,
                        EventAlias = e.Event.EventAlias,
                        StartTime  = e.TimeStart,
                        EndTime    = e.TimeEnd
                    }).ToList()
                }).ToList()
            };

            return(history);
        }