Example #1
0
        /// <inheritdoc />
        public async Task <OutputDataModel> ProcessAsync(InputDataModel input, InsightsModel graphModel)
        {
            return(await Task.Run(
                       () =>
            {
                var outputDataModel = new OutputDataModel();

                var intersWithIncomStreets = input.Streets.Values
                                             .Select(street => (street.EndIntersection, street.Name))
                                             .GroupBy(tuple => tuple.EndIntersection, tuple => tuple.Name)
                                             .ToList();

                outputDataModel.Intersections = intersWithIncomStreets
                                                .Select(
                    grouping => new IntersectionOptions
                {
                    Id = grouping.Key,
                    IncomingStreets = grouping
                                      .Select(
                        s => new StreetOptions
                    {
                        GreenLightDuration = RandomDuration,
                        StreetName = s
                    })
                                      .ToList()
                })
                                                .ToDictionary(options => options.Id, options => options);

                return outputDataModel;
            }));
        }
Example #2
0
        static async Task Main(string[] args)
        {
            Console.WriteLine("Program started...\n");

            foreach (var inputFile in InputFiles)
            {
                var inputModel = await InputHelper.InitAsync(inputFile);

                var insightsModel = new InsightsModel(inputModel);
                var outputTasks   = AllProcessors
                                    .Select(async processor => await processor.ProcessAsync(inputModel, insightsModel))
                                    .ToList();

                await Task.WhenAll(outputTasks);

                var outputs = outputTasks.Select(task => task.Result).ToList();

                IAggregator aggregator = new FirstPrevailsAndApplyAverageAggregator();

                var finalOutput = await aggregator.AggregateAsync(outputs);

                IOptimizer optimizer = new IntersectionsWithoutTrafficOptimizer();

                //await optimizer.OptimizeAsync(inputModel, insightsModel, finalOutput);

                await OutputHelper.PrintAsync($"{inputFile}.out", finalOutput);

                Console.WriteLine("\nProgram finished!");
            }
        }
Example #3
0
        /// <inheritdoc />
        public async Task OptimizeAsync(InputDataModel inputModel,
                                        InsightsModel insightsModel,
                                        OutputDataModel outputModel)
        {
            await Task.Run(
                () =>
            {
                outputModel.Intersections.Values
                .ToList()
                .ForEach(
                    intersectionOptions =>
                    intersectionOptions.IncomingStreets = intersectionOptions.IncomingStreets
                                                          .Where(
                        street => insightsModel.TotalCarsPassByStreet.TryGetValue(street.StreetName, out var totalCars) &&
                        totalCars > 0)
                                                          .ToList());

                outputModel.Intersections = outputModel.Intersections
                                            .Where(pair => pair.Value.IncomingStreets.Any())
                                            .ToDictionary(pair => pair.Key, pair => pair.Value);
            });
        }