public double Calc(Genome genome, GASettings settings) { try { var trucks = genome.Trucks; var totalMetros = trucks.Sum(t => t.Routes.Sum(r => r.Metros) + (t.DepotBack?.Metros ?? 0D)); var totalEsperaDepois = 0D; var totalEsperaAntes = 0D; var today = genome.Map.DataSaida; foreach (var truck in trucks) { var start = genome.Map.DataSaida; var finish = start; foreach (var route in truck.Routes.Concat(new[] { truck.DepotBack })) { if (route == null) { continue; } var date = finish.AddMinutes(route.Minutos); var from = CreateDateTime(today, route.Destino.Period.From); var to = CreateDateTime(today, route.Destino.Period.To); route.Descarga = route.Destino.Period.Descarga * 60; if (date > to) { date = date.AddDays(1); totalEsperaDepois += (date - to).TotalSeconds; date = new DateTime(date.Year, date.Month, date.Day, from.Hour, from.Minute, from.Second); route.Late = true; } if (date < from) { route.Espera = (from - date).TotalSeconds; totalEsperaAntes += route.Espera; date = date.Add(from - date); } route.DhSaida = finish; route.DhChegada = date; finish = date.AddMinutes(route.Destino.Period.Descarga); } } return(totalMetros + (totalEsperaDepois * settings.ArriveAfterPenalty) + (totalEsperaAntes * settings.ArriveBeforePenalty)); } catch (Exception ex) { throw; } }
int ProcessChunk = 1; // quantidade de requests simultaneos public GeneticAlgorithmFinder(IRouteService routeService, GASettings settings) { this.routeService = routeService; Mutate = MutateFactory.GetImplementation(settings.Mutation, settings); Crossover = CrossoverFactory.GetImplementation(settings.Crossover, settings, routeService); PopulationSize = settings.PopulationSize; GenerationLimit = settings.GenerationLimit; BestSolutionToPick = settings.BestSolutionToPick; ProcessChunk = settings.Throttle; Settings = settings; }
public static Genome Generator(Roteiro map, GASettings settings) => new Genome(map, settings);
public Genome(Roteiro map, GASettings settings) { Map = map; Settings = settings; Initialize(); }