public void Should_return_zero_iteration_step_in_iteration_result()
            {
                var smoData = new SmoData();

                var actionResult    = controller.InitPassengersFromSmo(smoData);
                var okResult        = actionResult as OkObjectResult;
                var iterationResult = okResult.Value as IterationResult;

                iterationResult.IterationStep.Should().Be(0);
            }
            public void Should_set_q_learning_algorithm_type_to_iteration_result_from_smo_data()
            {
                var smoData = new SmoData();

                var actionResult    = controller.InitPassengersFromSmo(smoData);
                var okResult        = actionResult as OkObjectResult;
                var iterationResult = okResult.Value as IterationResult;

                iterationResult.AlgorithmType.Should().Be(ChoiceTransportAlgorithmType.QLearning);
            }
 private void bindSmoDataList(Worksheet worksheet)
 {
     var usedRange = worksheet.UsedRange;
     foreach (Range excelRow in usedRange.Rows)
     {
         var smoCodeCell = (new StringValue(worksheet, excelRow.Row, 8));
         if (smoCodeCell.ValueAssigned)
         {
             var smoCode = smoCodeCell.Value;
             var smoData = new SmoData(worksheet, excelRow.Row, smoCode);
             smoDataList.Add(smoData);
         }
     }
 }
            public void Should_return_average_satisfaction_from_transport_system_satisfaction()
            {
                const int satisfaction = 1;
                var       smoData      = new SmoData();

                transportSystemSatisfaction.Evaluate(Arg.Any <PassengerDto[]>())
                .Returns(satisfaction);

                var actionResult    = controller.InitPassengersFromSmo(smoData);
                var okResult        = actionResult as OkObjectResult;
                var iterationResult = okResult.Value as IterationResult;

                iterationResult.AverageSatisfaction.Should().Be(satisfaction);
            }
            public void Should_create_passengers_from_factory()
            {
                var smoData = new SmoData
                {
                    Columns         = 2,
                    NeighboursCount = 3,
                    PassengersOnCar = 3,
                    SmoPassengers   = new SmoPassenger[3],
                };

                var _ = controller.InitPassengersFromSmo(smoData);

                passengersFactory.Received().CreateAllPassengersTogether(smoData, Arg.Any <TransportType[]>());
            }
Example #6
0
        private PassengerDto CreateRandomPassengerDto(
            SmoData smoData,
            int x,
            PassengerDto[] smoBusPassengers,
            double defaultSatisfaction,
            TransportType[] availableTransportTypes
            )
        {
            var type = TransportTypes.GetRandomTransportWithoutType(TransportType.Bus, randomizer, availableTransportTypes);

            return(new PassengerDto
            {
                Id = $"{(int) type}.{x}",
                Quality = 1 - (double)smoData.PassengersOnCar / (smoData.PassengersOnCar + smoBusPassengers.Length),
                TransportType = type,
                Satisfaction = defaultSatisfaction,
                FirstBusQuality = 0
            });
        }
            public void Should_set_neighbors_for_each_passengers_from_passenger_manager()
            {
                var smoData = new SmoData
                {
                    Columns         = 2,
                    NeighboursCount = 3,
                    PassengersOnCar = 4,
                    SmoPassengers   = new SmoPassenger[3]
                };
                var passengers = Enumerable
                                 .Range(0, 4)
                                 .Select(
                    x => new PassengerDto
                {
                    Id = x.ToString()
                })
                                 .ToArray();
                var defaultNeighbors = new List <string> {
                    "some neighbor id"
                };
                var neighborhood = Enumerable.Range(0, 4).ToDictionary(x => x.ToString(), x => defaultNeighbors);

                passengersFactory.CreateAllPassengersTogether(smoData, Arg.Any <TransportType[]>())
                .Returns(passengers);
                neighborsManager.GetEachPassengerNeighbors(smoData.NeighboursCount, smoData.Columns, passengers)
                .Returns(neighborhood);
                var expectedPassengers = Enumerable
                                         .Range(0, 4)
                                         .Select(
                    x => new PassengerDto
                {
                    Id         = x.ToString(),
                    Neighbours = defaultNeighbors.ToArray(),
                })
                                         .ToArray();

                var actionResult    = controller.InitPassengersFromSmo(smoData);
                var okResult        = actionResult as OkObjectResult;
                var iterationResult = okResult.Value as IterationResult;

                iterationResult.Passengers.ShouldBeEquivalentTo(expectedPassengers);
            }
Example #8
0
        public IActionResult InitPassengersFromSmo([FromBody] SmoData smoData)
        {
            var availableTransportTypes = new[] { TransportType.Bus, TransportType.Car };
            var allPassengers           = passengersFactory.CreateAllPassengersTogether(smoData, availableTransportTypes);
            var neighborhood            =
                neighborsManager.GetEachPassengerNeighbors(smoData.NeighboursCount, smoData.Columns, allPassengers);

            allPassengers.SetNeighborhood(neighborhood);

            var averageSatisfaction = transportSystemSatisfaction.Evaluate(allPassengers);

            return(Ok(
                       new IterationResult
            {
                Passengers = allPassengers,
                AverageSatisfaction = averageSatisfaction,
                AlgorithmType = ChoiceTransportAlgorithmType.QLearning,
                AvailableTransportTypes = availableTransportTypes
            }));
        }
Example #9
0
        public PassengerDto[] CreateAllPassengersTogether(SmoData smoData, TransportType[] availableTransportTypes)
        {
            var smoBusPassengers = smoData.SmoPassengers
                                   .Select(
                x => new PassengerDto
            {
                Id              = x.AgentId,
                Quality         = x.Quality,
                TransportType   = TransportType.Bus,
                Satisfaction    = DefaultSatisfaction,
                FirstBusQuality = x.Quality
            })
                                   .ToArray();
            var carPassengers = Enumerable.Range(0, smoData.PassengersOnCar)
                                .Select(x => CreateRandomPassengerDto(smoData, x, smoBusPassengers, DefaultSatisfaction, availableTransportTypes));

            var allPassengers = smoBusPassengers.Concat(carPassengers).ToArray();

            return(allPassengers);
        }