Ejemplo n.º 1
0
        public virtual ITourWrapper CreateSubtour(int originAddressType, int originParcelId, int originZoneKey, int destinationPurpose)
        {
            TotalSubtours++;

            var model = _tourCreator.CreateModel();

            model.Id                       = PersonDayId * 10 + PersonDay.GetNextTourSequence();
            model.PersonId                 = PersonId;
            model.PersonDayId              = PersonDayId;
            model.HouseholdId              = HouseholdId;
            model.PersonSequence           = PersonSequence;
            model.Day                      = Day;
            model.Sequence                 = PersonDay.GetCurrentTourSequence();
            model.OriginAddressType        = originAddressType;
            model.OriginParcelId           = originParcelId;
            model.OriginZoneKey            = originZoneKey;
            model.DestinationPurpose       = destinationPurpose;
            model.OriginDepartureTime      = 180;
            model.DestinationArrivalTime   = 180;
            model.DestinationDepartureTime = 180;
            model.OriginArrivalTime        = 180;
            model.PathType                 = 1;
            model.ExpansionFactor          = Household.ExpansionFactor;

            return(_tourCreator.CreateWrapper(model, this, destinationPurpose, false));
        }
Ejemplo n.º 2
0
 public virtual void SetWorkBasedIsSimulated()
 {
     PersonDay.IncrementSimulatedStops(DestinationPurpose);
 }
Ejemplo n.º 3
0
        private void SetValueOfTimeCoefficients(int purpose, bool suppressRandomVOT)
        {
            var randomVot = !Global.Configuration.IsInEstimationMode && Global.Configuration.UseRandomVotDistribution && !suppressRandomVOT;

            var income =
                Household.Income < 0
                    ? Global.Configuration.Coefficients_BaseCostCoefficientIncomeLevel
                    : Household.Income;                                                                                                                                                                                                             // missing converted to 30K

            var incomeMultiple = Math.Min(Math.Max(income / Global.Configuration.Coefficients_BaseCostCoefficientIncomeLevel, Global.Coefficients_CostCoefficientIncomeMultipleMinimum), Global.Coefficients_CostCoefficientIncomeMultipleMaximum); // ranges for extreme values

            var incomePower =
                purpose == Global.Settings.Purposes.Work
                    ? Global.Configuration.Coefficients_CostCoefficientIncomePower_Work
                    : Global.Configuration.Coefficients_CostCoefficientIncomePower_Other;

            var costCoefficient = Global.Coefficients_BaseCostCoefficientPerMonetaryUnit / Math.Pow(incomeMultiple, incomePower);

            CostCoefficient = costCoefficient;

            const double minimumTimeCoef = 0.001;
            const double maximumTimeCoef = 1.000;

            var mean =
                purpose == Global.Settings.Purposes.Work
                    ? Global.Configuration.Coefficients_MeanTimeCoefficient_Work
                    : Global.Configuration.Coefficients_MeanTimeCoefficient_Other;

            double timeCoefficient;

            if (randomVot)
            {
                if (Global.Configuration.ShouldSynchronizeRandomSeed && PersonDay != null)
                {
                    PersonDay.ResetRandom(10 + Sequence - 1);
                }

                var coefficient =
                    purpose == Global.Settings.Purposes.Work
                        ? Global.Configuration.Coefficients_StdDeviationTimeCoefficient_Work
                        : Global.Configuration.Coefficients_StdDeviationTimeCoefficient_Other;

                var sDev = Math.Abs(mean * coefficient);

                timeCoefficient = -1.0 * Math.Min(maximumTimeCoef, Math.Max(minimumTimeCoef, Household.RandomUtility.LogNormal(-1.0 * mean, sDev))); // converted to positive and back to negative

                if (timeCoefficient.AlmostEquals(0))
                {
                    throw new InvalidTimeCoefficientException(string.Format("The time coefficient is invalid where randomVot is true for mean: {0}, sDev: {1}.", mean, sDev));
                }
            }
            else
            {
                timeCoefficient = mean;

                if (timeCoefficient.AlmostEquals(0))
                {
                    throw new InvalidTimeCoefficientException(string.Format("The time coefficient is invalid where randomVot is false for mean: {0}.", mean));
                }
            }

            TimeCoefficient = timeCoefficient;

            //            if (randomVot) {
            //                var vot = (60 * timeCoefficient) / costCoefficient;
            //                Global.PrintFile.WriteLine("Value of time is {0}",vot);
            //            }
        }
Ejemplo n.º 4
0
 public virtual void SetHomeBasedIsSimulated()
 {
     PersonDay.IncrementSimulatedTours(DestinationPurpose);
 }
Ejemplo n.º 5
0
        public void TestPersonDay()
        {
            int    id                    = 1;
            int    personId              = 2;
            int    householdDayId        = 3;
            int    householdId           = 4;
            int    personSequence        = 5;
            int    day                   = 6;
            int    dayBeginsAtHome       = 7;
            int    dayEndsAtHome         = 8;
            int    homeBasedTours        = 9;
            int    workBasedTours        = 10;
            int    usualWorkplaceTours   = 11;
            int    workTours             = 12;
            int    schoolTours           = 13;
            int    escortTours           = 14;
            int    personalBusinessTours = 15;
            int    shoppingTours         = 16;
            int    mealTours             = 17;
            int    socialTours           = 18;
            int    recreationTours       = 19;
            int    medicalTours          = 20;
            int    workStops             = 21;
            int    schoolStops           = 22;
            int    escortStops           = 23;
            int    personalBusinessStops = 24;
            int    shoppingStops         = 25;
            int    mealStops             = 26;
            int    socialStops           = 27;
            int    recreationStops       = 28;
            int    medicalStops          = 29;
            int    workAtHomeDuration    = 30;
            double expansionFactor       = 30.01;

            PersonDay personDay = new PersonDay
            {
                Id                    = id,
                PersonId              = personId,
                HouseholdDayId        = householdDayId,
                HouseholdId           = householdId,
                PersonSequence        = personSequence,
                Day                   = day,
                DayBeginsAtHome       = dayBeginsAtHome,
                DayEndsAtHome         = dayEndsAtHome,
                HomeBasedTours        = homeBasedTours,
                WorkBasedTours        = workBasedTours,
                UsualWorkplaceTours   = usualWorkplaceTours,
                WorkTours             = workTours,
                SchoolTours           = schoolTours,
                EscortTours           = escortTours,
                PersonalBusinessTours = personalBusinessTours,
                ShoppingTours         = shoppingTours,
                MealTours             = mealTours,
                SocialTours           = socialTours,
                RecreationTours       = recreationTours,
                MedicalTours          = medicalTours,
                WorkStops             = workStops,
                SchoolStops           = schoolStops,
                EscortStops           = escortStops,
                PersonalBusinessStops = personalBusinessStops,
                ShoppingStops         = shoppingStops,
                MealStops             = mealStops,
                SocialStops           = socialStops,
                RecreationStops       = recreationStops,
                MedicalStops          = medicalStops,
                WorkAtHomeDuration    = workAtHomeDuration,
                ExpansionFactor       = expansionFactor,
            };

            Assert.Equal(id, personDay.Id);
            Assert.Equal(personId, personDay.PersonId);
            Assert.Equal(householdDayId, personDay.HouseholdDayId);
            Assert.Equal(householdId, personDay.HouseholdId);
            Assert.Equal(personSequence, personDay.PersonSequence);
            Assert.Equal(day, personDay.Day);
            Assert.Equal(dayBeginsAtHome, personDay.DayBeginsAtHome);
            Assert.Equal(dayEndsAtHome, personDay.DayEndsAtHome);
            Assert.Equal(homeBasedTours, personDay.HomeBasedTours);
            Assert.Equal(workBasedTours, personDay.WorkBasedTours);
            Assert.Equal(usualWorkplaceTours, personDay.UsualWorkplaceTours);
            Assert.Equal(workTours, personDay.WorkTours);
            Assert.Equal(schoolTours, personDay.SchoolTours);
            Assert.Equal(escortTours, personDay.EscortTours);
            Assert.Equal(personalBusinessTours, personDay.PersonalBusinessTours);
            Assert.Equal(shoppingTours, personDay.ShoppingTours);
            Assert.Equal(mealTours, personDay.MealTours);
            Assert.Equal(socialTours, personDay.SocialTours);
            Assert.Equal(recreationTours, personDay.RecreationTours);
            Assert.Equal(medicalTours, personDay.MedicalTours);
            Assert.Equal(workStops, personDay.WorkStops);
            Assert.Equal(schoolStops, personDay.SchoolStops);
            Assert.Equal(escortStops, personDay.EscortStops);
            Assert.Equal(personalBusinessStops, personDay.PersonalBusinessStops);
            Assert.Equal(shoppingStops, personDay.ShoppingStops);
            Assert.Equal(mealStops, personDay.MealStops);
            Assert.Equal(socialStops, personDay.SocialStops);
            Assert.Equal(recreationStops, personDay.RecreationStops);
            Assert.Equal(medicalStops, personDay.MedicalStops);
            Assert.Equal(workAtHomeDuration, personDay.WorkAtHomeDuration);
            Assert.Equal(expansionFactor, personDay.ExpansionFactor);
        }