public void Init(SimulationHistory sim, int timeStep) { this.sim = sim; this.timeStep = timeStep; GetComponent <TooltipTarget>().entrySource = GetTooltipEntries; Layout(); Paint(); }
public void StartNewTimeline() { ActualSims.StartNewTimeline(); OtherTimelineHistories.Clear(); CurrentTimelineHistory = new SimulationHistory(ActualSims.CurrentSim); foreach (Simulation simulation in ActualSims.PreviousSims) { OtherTimelineHistories.Add(new SimulationHistory(simulation)); } SimChanged(); }
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); }
/// <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); }
public void UpdateSimulationHistory(ComponentBase source, SimulationHistory simulationHistory) { SimulationHistory = simulationHistory; NotifyStateChanged(source, nameof(SimulationHistory)); }
public async Task AddSimulationHistory(SimulationHistory history) { await _db.SimulationHistory.AddAsync(history); await _db.SaveChangesAsync(); }