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)); }
public virtual void SetWorkBasedIsSimulated() { PersonDay.IncrementSimulatedStops(DestinationPurpose); }
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); // } }
public virtual void SetHomeBasedIsSimulated() { PersonDay.IncrementSimulatedTours(DestinationPurpose); }
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); }