Пример #1
0
 public void Init(SimulationHistory sim, int timeStep)
 {
     this.sim      = sim;
     this.timeStep = timeStep;
     GetComponent <TooltipTarget>().entrySource = GetTooltipEntries;
     Layout();
     Paint();
 }
Пример #2
0
 public void StartNewTimeline()
 {
     ActualSims.StartNewTimeline();
     OtherTimelineHistories.Clear();
     CurrentTimelineHistory = new SimulationHistory(ActualSims.CurrentSim);
     foreach (Simulation simulation in ActualSims.PreviousSims)
     {
         OtherTimelineHistories.Add(new SimulationHistory(simulation));
     }
     SimChanged();
 }
Пример #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);
        }
Пример #4
0
        /// <summary>
        /// Generates list of vehicles and orders based on the simulation parameters
        /// </summary>
        /// <param name="parameters">simulation parameters</param>
        public Simulation(SimulationParameters parameters)
        {
            Parameters               = parameters;
            SimulationHistory        = new SimulationHistory(parameters);
            SecondsPerSimulationStep = 1d / Parameters.SimulationSpeed;

            var allBases   = Parameters.Graph.Vertices.Where(v => v.Info.Type == VertexType.Base || v.Info.Type == VertexType.Both).ToList();
            var allTargets = Parameters.Graph.Vertices.Where(v => v.Info.Type == VertexType.Target || v.Info.Type == VertexType.Both).ToList();

            // Equally split vehicles up to base stations
            var currentBaseIndex = 0;

            for (var i = 0; i < Parameters.NumberOfVehicles; i++)
            {
                if (currentBaseIndex == allBases.Count)
                {
                    currentBaseIndex = 0;
                }

                Vehicles.Add(new VehicleInstance(this, Parameters.VehicleTemplate, allBases[new Random(Parameters.RandomSeed + i).Next(allBases.Count)]));
                currentBaseIndex++;
            }

            // Generate random orders
            for (var i = 0; i < Parameters.NumberOfOrders; i++)
            {
                var start  = allBases[new Random((Parameters.RandomSeed + i) * 133742069).Next(allBases.Count)];
                var target = allTargets[new Random((Parameters.RandomSeed + i) * 420691337).Next(allTargets.Count)];

                // Avoid having the start and target be at the same vertex (can happen if there are vertices that are both a base station and target)
                if (start.Equals(target))
                {
                    target = allTargets.FirstOrDefault(t => !t.Equals(target));
                }

                // Multiplying the random seed + i with a large number because a change of only 1 per iteration produces very similar results when calculating random values
                OpenOrders.Add(new Order(start, target,
                                         new Random((Parameters.RandomSeed + i) * 133742069).NextDouble() *
                                         (Parameters.MinMaxPayload.Item2 - Parameters.MinMaxPayload.Item1) +
                                         Parameters.MinMaxPayload.Item1));
            }
        }
 public SimulationResultViewModel(SimulationHistory history)
 {
     Duration         = history.Duration;
     WaitingTime      = history.WaitingTime;
     TotalCost        = history.TotalCost;
     SimulationName   = history.SimulationName.Name;
     AuthorName       = history.AuthorName;
     Complexity       = history.Complexity;
     Step             = history.Step;
     DateTime         = history.DateTime;
     IsSuccess        = true;
     ProcedureResults = history.Procedures.Select(x => new ProcedureResultViewModel
     {
         ProcedureAlias = x.ProcedureAlias,
         StartTime      = x.StartTime,
         EndTime        = x.EndTime,
         Duration       = x.EndTime - x.StartTime,
         WaitingTime    = x.WaitingTime,
         RandomEvents   = x.RandomEvents.Select(e => new RandomEventResultViewModel
         {
             EventName = e.EventAlias,
             TimeStart = e.StartTime,
             TimeEnd   = e.EndTime,
             Duration  = e.EndTime - e.StartTime,
         }).ToList()
     }).ToList();
     ResourceResults = history.Resources.Select(x => new ResourceResultViewModel
     {
         ResourceName = x.ResourceName,
         Cost         = x.Cost,
         Downtime     = x.Downtime,
         UseTime      = x.UseTime,
         ActiveTime   = x.UseHistory.Select(t => new ActiveTimeItem
         {
             From = t.StartTime,
             To   = t.EndTime
         }).ToList(),
     }).ToList();
     RandomEventsDuration = ProcedureResults.SelectMany(x => x.RandomEvents).Sum(x => x.Duration);
 }
Пример #6
0
 public void UpdateSimulationHistory(ComponentBase source, SimulationHistory simulationHistory)
 {
     SimulationHistory = simulationHistory;
     NotifyStateChanged(source, nameof(SimulationHistory));
 }
Пример #7
0
        public async Task AddSimulationHistory(SimulationHistory history)
        {
            await _db.SimulationHistory.AddAsync(history);

            await _db.SaveChangesAsync();
        }