protected override void RegionSpecificCustomizations(ChoiceProbabilityCalculator.Alternative alternative, ITourWrapper tour, int pathType, int mode, IParcelWrapper destinationParcel) { int originInNJ = ((tour.OriginParcel.ZoneKey >= 18000 && tour.OriginParcel.ZoneKey < 50000) || (tour.OriginParcel.ZoneKey >= 53000 && tour.OriginParcel.ZoneKey < 58000)).ToFlag(); int destinInNJ = ((destinationParcel.ZoneKey >= 18000 && destinationParcel.ZoneKey < 50000) || (destinationParcel.ZoneKey >= 53000 && destinationParcel.ZoneKey < 58000)).ToFlag(); int coreCBDOrig = (tour.OriginParcel.HouseholdsBuffer1 + tour.OriginParcel.EmploymentTotalBuffer1 >= 20000).ToFlag(); int coreCBDDest = (destinationParcel.HouseholdsBuffer1 + destinationParcel.EmploymentTotalBuffer1 >= 20000).ToFlag(); if (mode == Global.Settings.Modes.ParkAndRide) { alternative.AddUtilityTerm(211, tour.OriginParcel.CBD_AreaType_Buffer1()); alternative.AddUtilityTerm(212, tour.OriginParcel.Urban_AreaType_Buffer1()); alternative.AddUtilityTerm(213, tour.OriginParcel.Suburban_AreaType_Buffer1()); alternative.AddUtilityTerm(214, tour.OriginParcel.AllRural_AreaType_Buffer1()); alternative.AddUtilityTerm(215, destinationParcel.CBD_AreaType_Buffer1()); alternative.AddUtilityTerm(216, destinationParcel.Urban_AreaType_Buffer1()); alternative.AddUtilityTerm(217, destinationParcel.Suburban_AreaType_Buffer1()); alternative.AddUtilityTerm(218, destinationParcel.AllRural_AreaType_Buffer1()); alternative.AddUtilityTerm(219, (tour.OriginParcel.DistanceToFerry > 0 && tour.OriginParcel.DistanceToFerry <= 0.5).ToFlag()); alternative.AddUtilityTerm(220, (destinationParcel.DistanceToFerry > 0 && destinationParcel.DistanceToFerry <= 0.5).ToFlag()); alternative.AddUtilityTerm(221, originInNJ); alternative.AddUtilityTerm(222, destinInNJ); alternative.AddUtilityTerm(223, destinInNJ * originInNJ); alternative.AddUtilityTerm(224, coreCBDOrig); alternative.AddUtilityTerm(225, coreCBDDest); // alternative.AddUtilityTerm(225, destinationParcel.PCA_DensityTerm_Buffer1()); // alternative.AddUtilityTerm(226, destinationParcel.PCA_WalkabilityTerm_Buffer1()); // alternative.AddUtilityTerm(227, destinationParcel.PCA_MixedUseTerm_Buffer1()); // alternative.AddUtilityTerm(228, destinationParcel.PCA_TransitAccessTerm_Buffer1()); } else if (mode == Global.Settings.Modes.Transit) { alternative.AddUtilityTerm(231, tour.OriginParcel.CBD_AreaType_Buffer1()); alternative.AddUtilityTerm(232, tour.OriginParcel.Urban_AreaType_Buffer1()); alternative.AddUtilityTerm(233, tour.OriginParcel.Suburban_AreaType_Buffer1()); alternative.AddUtilityTerm(234, tour.OriginParcel.AllRural_AreaType_Buffer1()); alternative.AddUtilityTerm(235, destinationParcel.CBD_AreaType_Buffer1()); alternative.AddUtilityTerm(236, destinationParcel.Urban_AreaType_Buffer1()); alternative.AddUtilityTerm(237, destinationParcel.Suburban_AreaType_Buffer1()); alternative.AddUtilityTerm(238, destinationParcel.AllRural_AreaType_Buffer1()); alternative.AddUtilityTerm(239, (tour.OriginParcel.DistanceToFerry > 0 && tour.OriginParcel.DistanceToFerry <= 0.5).ToFlag()); alternative.AddUtilityTerm(240, (destinationParcel.DistanceToFerry > 0 && destinationParcel.DistanceToFerry <= 0.5).ToFlag()); alternative.AddUtilityTerm(241, originInNJ); alternative.AddUtilityTerm(242, destinInNJ); alternative.AddUtilityTerm(243, destinInNJ * originInNJ); alternative.AddUtilityTerm(244, coreCBDOrig); alternative.AddUtilityTerm(245, coreCBDDest); // alternative.AddUtilityTerm(221, originParcel.PCA_DensityTerm_Buffer1()); // alternative.AddUtilityTerm(222, originParcel.PCA_WalkabilityTerm_Buffer1()); // alternative.AddUtilityTerm(223, originParcel.PCA_MixedUseTerm_Buffer1()); // alternative.AddUtilityTerm(224, originParcel.PCA_TransitAccessTerm_Buffer1()); // alternative.AddUtilityTerm(225, destinationParcel.PCA_DensityTerm_Buffer1()); // alternative.AddUtilityTerm(226, destinationParcel.PCA_WalkabilityTerm_Buffer1()); // alternative.AddUtilityTerm(227, destinationParcel.PCA_MixedUseTerm_Buffer1()); // alternative.AddUtilityTerm(228, destinationParcel.PCA_TransitAccessTerm_Buffer1()); } }
private void RunModel(ChoiceProbabilityCalculator choiceProbabilityCalculator, IPersonWrapper person, int sampleSize, IParcelWrapper choice = null, bool choseHome = false) { int segment = Global.ContainerDaySim.GetInstance <SamplingWeightsSettingsFactory>().SamplingWeightsSettings.GetTourDestinationSegment(Global.Settings.Purposes.School, Global.Settings.TourPriorities.UsualLocation, Global.Settings.Modes.Sov, person.PersonType); DestinationSampler destinationSampler = new DestinationSampler(choiceProbabilityCalculator, segment, sampleSize, choice, person.Household.ResidenceParcel); int destinationArrivalTime = ChoiceModelUtility.GetDestinationArrivalTime(Global.Settings.Models.SchoolTourModeModel); int destinationDepartureTime = ChoiceModelUtility.GetDestinationDepartureTime(Global.Settings.Models.SchoolTourModeModel); SchoolLocationUtilities schoolLocationUtilities = new SchoolLocationUtilities(person, sampleSize, destinationArrivalTime, destinationDepartureTime); destinationSampler.SampleTourDestinations(schoolLocationUtilities); // var alternative = choiceProbabilityCalculator.GetAlternative(countSampled, true); // JLB 20120403 added third call parameter to idenitfy whether this alt is chosen or not ChoiceProbabilityCalculator.Alternative alternative = choiceProbabilityCalculator.GetAlternative(sampleSize, true, choseHome); alternative.Choice = person.Household.ResidenceParcel; alternative.AddUtilityTerm(50, 1); alternative.AddUtilityTerm(51, (!person.IsStudentAge).ToFlag()); alternative.AddUtilityTerm(52, person.Household.Size); alternative.AddUtilityTerm(97, 1); //new dummy size variable for oddball alt alternative.AddUtilityTerm(98, 100); //old dummy size variable for oddball alt //make oddball alt unavailable and remove nesting for estimation of conditional MNL // alternative.Available = false; alternative.AddNestedAlternative(sampleSize + 3, 1, 99); }
protected override void RegionSpecificCustomizations(ChoiceProbabilityCalculator.Alternative alternative, IPersonWrapper _person, IParcelWrapper destinationParcel) { var homedist = _person.Household.ResidenceParcel.District; var zonedist = destinationParcel.District; //add any region-specific new terms in region-specific class, using coefficient numbers 91-97, 99,100 or other unused variable # //Global.PrintFile.WriteLine("Default PSRC_WorkLocationModel.RegionSpecificCustomizations called"); var homeSKitWorkTRP = homedist == 11 && (zonedist == 8 || zonedist == 10 || zonedist == 7) ? 1 : 0; var homeKitWorkTRP = homedist == 9 && (zonedist == 8 || zonedist == 10 || zonedist == 7) ? 1 : 0; var homeEastWorkCBD = homedist == 6 && zonedist == 4 ? 1 : 0; var homeKitWorkCBD = (homedist == 9 || homedist == 11) && (zonedist == 4) ? 1 : 0; var homeTacWorkKit = homedist == 8 && (zonedist == 9 || zonedist == 11) ? 1 : 0; var homeEvWorkEv = homedist == 2 && zonedist == 2 ? 1 : 0; var homeWSWorkEast = homedist == 5 && zonedist == 6 ? 1 : 0; var homeEastWorkEast = homedist == 6 && zonedist == 6 ? 1 : 0; var homeKitWorkNotKit = (homedist == 9 || homedist == 11) && zonedist != 9 && zonedist != 11 ? 1 : 0; var homeSTacWorkCBD = (homedist == 5 || homedist == 8) && zonedist == 9 ? 1 : 0; alternative.AddUtilityTerm(91, homeEastWorkEast); alternative.AddUtilityTerm(92, homeTacWorkKit); alternative.AddUtilityTerm(93, homeEvWorkEv); alternative.AddUtilityTerm(94, homeWSWorkEast); alternative.AddUtilityTerm(95, homeSKitWorkTRP); alternative.AddUtilityTerm(96, homeSTacWorkCBD); alternative.AddUtilityTerm(97, homeKitWorkTRP); alternative.AddUtilityTerm(49, homeKitWorkNotKit); alternative.AddUtilityTerm(99, homeEastWorkCBD); alternative.AddUtilityTerm(100, homeKitWorkCBD); }
public int Run(HouseholdDayWrapper householdDay, int nCallsForTour, int choice) { if (householdDay == null) { throw new ArgumentNullException("householdDay"); } householdDay.ResetRandom(935 + nCallsForTour); if (Global.Configuration.IsInEstimationMode) { if (Global.Configuration.EstimationModel != CHOICE_MODEL_NAME) { return(choice); } } ChoiceProbabilityCalculator choiceProbabilityCalculator = _helpers[ParallelUtility.threadLocalAssignedIndex.Value].GetChoiceProbabilityCalculator(((householdDay.Household.Id * 10 + householdDay.Day) * 397) ^ nCallsForTour); if (_helpers[ParallelUtility.threadLocalAssignedIndex.Value].ModelIsInEstimationMode) { RunModel(choiceProbabilityCalculator, householdDay, nCallsForTour, choice); choiceProbabilityCalculator.WriteObservation(); } else { RunModel(choiceProbabilityCalculator, householdDay, nCallsForTour); ChoiceProbabilityCalculator.Alternative chosenAlternative = choiceProbabilityCalculator.SimulateChoice(householdDay.Household.RandomUtility); choice = (int)chosenAlternative.Choice; } return(choice); }
private void RunModel(ChoiceProbabilityCalculator choiceProbabilityCalculator, IPersonWrapper person, int sampleSize, IParcelWrapper choice = null, bool choseHome = false) { int segment = Global.ContainerDaySim.GetInstance <SamplingWeightsSettingsFactory>().SamplingWeightsSettings.GetTourDestinationSegment(Global.Settings.Purposes.Work, Global.Settings.TourPriorities.HomeBasedTour, Global.Settings.Modes.Sov, person.PersonType); DestinationSampler destinationSampler = new DestinationSampler(choiceProbabilityCalculator, segment, sampleSize, choice, person.Household.ResidenceParcel); int destinationArrivalTime = ChoiceModelUtility.GetDestinationArrivalTime(Global.Settings.Models.WorkTourModeModel); int destinationDepartureTime = ChoiceModelUtility.GetDestinationDepartureTime(Global.Settings.Models.WorkTourModeModel); WorkLocationUtilities workLocationUtilites = new WorkLocationUtilities(this, person, sampleSize, destinationArrivalTime, destinationDepartureTime); destinationSampler.SampleTourDestinations(workLocationUtilites); //var alternative = choiceProbabilityCalculator.GetAlternative(countSampled, true); // JLB 20120329 added third call parameter to idenitfy whether this alt is chosen or not ChoiceProbabilityCalculator.Alternative alternative = choiceProbabilityCalculator.GetAlternative(sampleSize, true, choseHome); alternative.Choice = person.Household.ResidenceParcel; alternative.AddUtilityTerm(41, 1); alternative.AddUtilityTerm(42, person.IsPartTimeWorker.ToFlag()); alternative.AddUtilityTerm(43, person.IsStudentAge.ToFlag()); alternative.AddUtilityTerm(44, person.IsFemale.ToFlag()); alternative.AddUtilityTerm(90, 100); //make oddball alt unavailable and remove nesting for estimation of conditional MNL // alternative.Available = false; alternative.AddNestedAlternative(sampleSize + 3, 1, 98); }
private void RunModel(ChoiceProbabilityCalculator choiceProbabilityCalculator, IPersonWrapper person, int choice = Constants.DEFAULT_VALUE) { // 0 No paid parking at work ChoiceProbabilityCalculator.Alternative alternative = choiceProbabilityCalculator.GetAlternative(0, true, choice == 0); alternative.Choice = 0; alternative.AddUtilityTerm(1, 0.0); // 1 Paid parking at work alternative = choiceProbabilityCalculator.GetAlternative(1, true, choice == 1); alternative.Choice = 1; alternative.AddUtilityTerm(1, 1.0); alternative.AddUtilityTerm(2, person.IsPartTimeWorker.ToFlag()); alternative.AddUtilityTerm(3, person.IsNotFullOrPartTimeWorker.ToFlag()); alternative.AddUtilityTerm(4, Math.Max(1, person.Household.Income) / 1000.0); alternative.AddUtilityTerm(5, person.Household.HasMissingIncome.ToFlag()); alternative.AddUtilityTerm(6, Math.Log(person.UsualWorkParcel.EmploymentTotalBuffer1 + 1.0)); alternative.AddUtilityTerm(7, Math.Log((person.UsualWorkParcel.ParkingOffStreetPaidDailySpacesBuffer1 + 1.0) / (person.UsualWorkParcel.EmploymentTotalBuffer1 + 1.0))); alternative.AddUtilityTerm(8, person.UsualWorkParcel.ParkingOffStreetPaidDailyPriceBuffer1); alternative.AddUtilityTerm(9, person.UsualWorkParcel.EmploymentGovernmentBuffer1 / Math.Max(person.UsualWorkParcel.EmploymentTotalBuffer1, 1)); // alternative.AddUtility(10, person.UsualWorkParcel.EmploymentOfficeBuffer1 / Math.Max(person.UsualWorkParcel.EmploymentTotalBuffer1,1)); // alternative.AddUtility(11, (person.UsualWorkParcel.EmploymentRetailBuffer1 // +person.UsualWorkParcel.EmploymentFoodBuffer1) / Math.Max(person.UsualWorkParcel.EmploymentTotalBuffer1,1)); alternative.AddUtilityTerm(12, person.UsualWorkParcel.EmploymentEducationBuffer1 / Math.Max(person.UsualWorkParcel.EmploymentTotalBuffer1, 1)); // alternative.AddUtility(13, person.UsualWorkParcel.EmploymentIndustrialBuffer1 / Math.Max(person.UsualWorkParcel.EmploymentTotalBuffer1,1)); // alternative.AddUtility(14, person.UsualWorkParcel.EmploymentMedicalBuffer1 / Math.Max(person.UsualWorkParcel.EmploymentTotalBuffer1,1)); // alternative.AddUtility(15, person.UsualWorkParcel.EmploymentServiceBuffer1 / Math.Max(person.UsualWorkParcel.EmploymentTotalBuffer1,1)); }
protected override void RegionSpecificCustomizations(ChoiceProbabilityCalculator.Alternative alternative, IPersonWrapper _person, IParcelWrapper destinationParcel) { double intracounty = ImpedanceRoster.GetValue("intracounty", Global.Settings.Modes.Sov, Global.Settings.PathTypes.FullNetwork, Global.Settings.ValueOfTimes.DefaultVot, 1, _person.Household.ResidenceParcel, destinationParcel).Variable; alternative.AddUtilityTerm(45, intracounty); }
protected override void RegionSpecificOtherTourDistrictCoefficients(ChoiceProbabilityCalculator.Alternative alternative, ITourWrapper _tour, IParcelWrapper destinationParcel) { //add any region-specific new terms in region-specific class, using coefficient numbers 114-120, or other unused variable # //Global.PrintFile.WriteLine("JAX_OtherTourDestinationModel.RegionSpecificOtherTourDistrictCoefficients called"); double crossriver = ImpedanceRoster.GetValue("crossriver", Global.Settings.Modes.Sov, Global.Settings.PathTypes.FullNetwork, Global.Settings.ValueOfTimes.DefaultVot, 1, _tour.OriginParcel, destinationParcel).Variable; double intracounty = ImpedanceRoster.GetValue("intracounty", Global.Settings.Modes.Sov, Global.Settings.PathTypes.FullNetwork, Global.Settings.ValueOfTimes.DefaultVot, 1, _tour.OriginParcel, destinationParcel).Variable; if (_tour.DestinationPurpose == Global.Settings.Purposes.Escort) { alternative.AddUtilityTerm(114, crossriver); } else if (_tour.DestinationPurpose == Global.Settings.Purposes.PersonalBusiness || _tour.DestinationPurpose == Global.Settings.Purposes.Medical) { alternative.AddUtilityTerm(115, crossriver); alternative.AddUtilityTerm(119, intracounty); } else if (_tour.DestinationPurpose == Global.Settings.Purposes.Shopping) { alternative.AddUtilityTerm(116, crossriver); alternative.AddUtilityTerm(119, intracounty); } else if (_tour.DestinationPurpose == Global.Settings.Purposes.Meal) { alternative.AddUtilityTerm(117, crossriver); alternative.AddUtilityTerm(119, intracounty); } else if (_tour.DestinationPurpose == Global.Settings.Purposes.Social || _tour.DestinationPurpose == Global.Settings.Purposes.Recreation) { alternative.AddUtilityTerm(118, crossriver); alternative.AddUtilityTerm(119, intracounty); } }
protected override void RegionSpecificCustomizations(ChoiceProbabilityCalculator.Alternative alternative, ITourWrapper tour, int pathType, int mode, IParcelWrapper destinationParcel) { //Global.PrintFile.WriteLine("Default PSRC_SchoolTourModeModel.RegionSpecificCustomizations called"); if (mode == Global.Settings.Modes.Transit && pathType != Global.Settings.PathTypes.LightRail && pathType != Global.Settings.PathTypes.CommuterRail && pathType != Global.Settings.PathTypes.Ferry) { alternative.AddUtilityTerm(200 + tour.OriginParcel.District, 1); //district specific transit calibration constant alternative.AddUtilityTerm(300 + destinationParcel.District, 1); //district specific transit calibration constant } if (mode == Global.Settings.Modes.ParkAndRide) { alternative.AddUtilityTerm(250, pathType == 3 ? 1 : 0); alternative.AddUtilityTerm(251, pathType == 4 ? 1 : 0); alternative.AddUtilityTerm(252, pathType == 5 ? 1 : 0); alternative.AddUtilityTerm(253, pathType == 6 ? 1 : 0); alternative.AddUtilityTerm(254, pathType == 7 ? 1 : 0); } else if (mode == Global.Settings.Modes.Transit) { alternative.AddUtilityTerm(255, pathType == 3 ? 1 : 0); alternative.AddUtilityTerm(256, pathType == 4 ? 1 : 0); alternative.AddUtilityTerm(257, pathType == 5 ? 1 : 0); alternative.AddUtilityTerm(258, pathType == 6 ? 1 : 0); alternative.AddUtilityTerm(259, pathType == 7 ? 1 : 0); } }
private void RunModel(ChoiceProbabilityCalculator choiceProbabilityCalculator, HouseholdDayWrapper householdDay, int[][] pfptSchedule, int[] choice = null) { //var householdDay = (ActumHouseholdDayWrapper)tour.HouseholdDay; Framework.DomainModels.Wrappers.IHouseholdWrapper household = householdDay.Household; //Generate utility funtions for the alternatives bool[] available = new bool[TOTAL_ALTERNATIVES + 1]; bool[] chosen = new bool[TOTAL_ALTERNATIVES + 1]; for (int alt = 1; alt <= TOTAL_ALTERNATIVES; alt++) { available[alt] = false; chosen[alt] = false; // set availability based on household CHILDREN if ((household.HasChildren && pfptSchedule[alt][0] == 1) || (!household.HasChildren && pfptSchedule[alt][0] == 0)) { available[alt] = true; } ChoiceProbabilityCalculator.Alternative alternative = choiceProbabilityCalculator.GetAlternative(alt - 1, available[alt], chosen[alt]); alternative.Choice = pfptSchedule[alt]; // add utility terms for this alterative alternative.AddUtilityTerm(1, 1); // asc } }
public int Run(HouseholdDayWrapper householdDay, int jHTSimulated, int genChoice, int[] participants, int[] jHTChauffeurSequence) { if (householdDay == null) { throw new ArgumentNullException("householdDay"); } householdDay.ResetRandom(930 + jHTSimulated); IEnumerable <PersonDayWrapper> orderedPersonDays = householdDay.PersonDays.OrderBy(p => p.GetJointHalfTourParticipationPriority()).ToList().Cast <PersonDayWrapper>(); int chauffeurSequence = 0; int choice = 0; if (Global.Configuration.IsInEstimationMode) { chauffeurSequence = jHTChauffeurSequence[jHTSimulated]; int i = 0; foreach (PersonDayWrapper personDay in orderedPersonDays) { i++; if (personDay.Person.Sequence == chauffeurSequence && i <= 5) { choice = i; } } if (Global.Configuration.EstimationModel != CHOICE_MODEL_NAME || choice == 0) { return(choice); } } ChoiceProbabilityCalculator choiceProbabilityCalculator = _helpers[ParallelUtility.threadLocalAssignedIndex.Value].GetChoiceProbabilityCalculator(((householdDay.Household.Id * 10 + householdDay.Day) * 397) ^ jHTSimulated); if (_helpers[ParallelUtility.threadLocalAssignedIndex.Value].ModelIsInEstimationMode) { RunModel(choiceProbabilityCalculator, householdDay, jHTSimulated, genChoice, participants, choice); choiceProbabilityCalculator.WriteObservation(); return(choice); } else { RunModel(choiceProbabilityCalculator, householdDay, jHTSimulated, genChoice, participants); ChoiceProbabilityCalculator.Alternative chosenAlternative = choiceProbabilityCalculator.SimulateChoice(householdDay.Household.RandomUtility); int i = 0; foreach (PersonDayWrapper personDay in orderedPersonDays) { i++; if ((int)chosenAlternative.Choice == i) { choice = personDay.Person.Sequence; } } return(choice); } }
protected override void RegionSpecificCustomizations(ChoiceProbabilityCalculator.Alternative alternative, ITourWrapper tour, int pathType, int mode, IParcelWrapper destinationParcel) { //Global.PrintFile.WriteLine("Default PSRC_WorkTourModeModel.RegionSpecificCustomizations called"); if (mode == Global.Settings.Modes.Transit && pathType != Global.Settings.PathTypes.LightRail && pathType != Global.Settings.PathTypes.CommuterRail && pathType != Global.Settings.PathTypes.Ferry) { if (tour.OriginParcel.District < 60) { alternative.AddUtilityTerm(200 + tour.OriginParcel.District, 1);//district specific transit calibration constant } else { alternative.AddUtilityTerm(200 + 6, 1); } if (destinationParcel.District < 60) { alternative.AddUtilityTerm(300 + destinationParcel.District, 1);//district specific transit calibration constant } else { alternative.AddUtilityTerm(300 + 6, 1); } } }
protected override void RegionSpecificOtherTourDistrictCoefficients(ChoiceProbabilityCalculator.Alternative alternative, ITourWrapper _tour, IParcelWrapper destinationParcel) { //add any region-specific new terms in region-specific class, using coefficient numbers 114-120, or other unused variable # //Global.PrintFile.WriteLine("Fresno_OtherTourDestinationModel.RegionSpecificOtherTourDistrictCoefficients called"); int origdist = _tour.OriginParcel.District; //var destZone = destinationParcel.ZoneId; int destParcel = destinationParcel.Id; //var destRiverPark = (destZone == 514 || destZone == 515 || destZone == 516 || destZone == 1486 || destZone == 1487) ? 1 : 0; int destRiverPark = (destParcel == 19599 || destParcel == 19600 || destParcel == 19601 || destParcel == 19598 || destParcel == 12156 || destParcel == 12158 || destParcel == 19603) ? 1 : 0; int origDistDestRiverPark = (origdist == 4 || origdist == 7 || origdist == 10) && (destParcel == 19599 || destParcel == 19600 || destParcel == 19601 || destParcel == 19598 || destParcel == 12156 || destParcel == 12158 || destParcel == 19603) ? 1 : 0; int origEastDestRiverPark = (origdist == 5) && (destParcel == 19599 || destParcel == 19600 || destParcel == 19601 || destParcel == 19598 || destParcel == 12156 || destParcel == 12158 || destParcel == 19603) ? 1 : 0; if (_tour.DestinationPurpose == Global.Settings.Purposes.Shopping || _tour.DestinationPurpose == Global.Settings.Purposes.Meal) { //Global.PrintFile.WriteLine("Destination is River Park Mall"); alternative.AddUtilityTerm(115, destRiverPark); alternative.AddUtilityTerm(116, origDistDestRiverPark); alternative.AddUtilityTerm(117, origEastDestRiverPark); } //alternative.AddUtilityTerm(115, origEastDestCBD); //alternative.AddUtilityTerm(116, origKitDestTRP); //alternative.AddUtilityTerm(117, origTacDestKit); //alternative.AddUtilityTerm(118, origKitDestNotKit); //alternative.AddUtilityTerm(119, origSTacWorkCBD); }
public void Run(IPersonWrapper person, int sampleSize) { if (person == null) { throw new ArgumentNullException("person"); } person.ResetRandom(0); if (Global.Configuration.IsInEstimationMode) { // if (!_helpers[ParallelUtility.threadLocalAssignedIndex.Value].ModelIsInEstimationMode) { // return; // } if (Global.Configuration.EstimationModel != CHOICE_MODEL_NAME) { return; } } ChoiceProbabilityCalculator choiceProbabilityCalculator = _helpers[ParallelUtility.threadLocalAssignedIndex.Value].GetChoiceProbabilityCalculator(person.Id); if (_helpers[ParallelUtility.threadLocalAssignedIndex.Value].ModelIsInEstimationMode) { if (person.UsualWorkParcel == null) { return; } bool choseHome = person.UsualWorkParcelId == person.Household.ResidenceParcelId; // JLB 20120329 added these two lines IParcelWrapper chosenParcel = choseHome ? null : person.UsualWorkParcel; //RunModel(choiceProbabilityCalculator, person, sampleSize, person.UsualWorkParcel); RunModel(choiceProbabilityCalculator, person, sampleSize, chosenParcel, choseHome); // JLB 20120329 replaced above line // when chosenParcel is null: // DestinationSampler doesn't try to assign one of the sampled destinations as chosen // choseHome is NOT null, and RunModel sets the oddball location as chosen choiceProbabilityCalculator.WriteObservation(); } else { RunModel(choiceProbabilityCalculator, person, sampleSize); ChoiceProbabilityCalculator.Alternative chosenAlternative = choiceProbabilityCalculator.SimulateChoice(person.Household.RandomUtility); ParcelWrapper choice = (ParcelWrapper)chosenAlternative.Choice; person.WorkLocationLogsum = chosenAlternative.ComputeLogsum(); person.UsualWorkParcelId = choice.Id; person.UsualWorkParcel = choice; person.UsualWorkZoneKey = ChoiceModelFactory.ZoneKeys[choice.ZoneId]; SkimValue skimValue = ImpedanceRoster.GetValue("ivtime", Global.Settings.Modes.Sov, Global.Settings.PathTypes.FullNetwork, Global.Settings.ValueOfTimes.DefaultVot, 1, person.Household.ResidenceParcel, choice); person.AutoTimeToUsualWork = skimValue.Variable; person.AutoDistanceToUsualWork = skimValue.BlendVariable; person.SetWorkParcelPredictions(); } }
public int Run(HouseholdDayWrapper householdDay, int nCallsForTour, bool[] available, int type, int subType) { if (householdDay == null) { throw new ArgumentNullException("householdDay"); } householdDay.ResetRandom(920 + nCallsForTour); int choice = 0; if (Global.Configuration.IsInEstimationMode) { choice = type == 0 ? 0 : (type - 1) * 3 + subType + 1; if (Global.Configuration.EstimationModel != CHOICE_MODEL_NAME) { return(choice); } } ChoiceProbabilityCalculator choiceProbabilityCalculator = _helpers[ParallelUtility.threadLocalAssignedIndex.Value].GetChoiceProbabilityCalculator(((householdDay.Household.Id * 10 + householdDay.Day) * 397) ^ nCallsForTour); if (_helpers[ParallelUtility.threadLocalAssignedIndex.Value].ModelIsInEstimationMode) { //if (tour.PersonDay.TotalStops > 0) { // TODO: maybe the restrictions coming from HH pattern shoudl enter here RunModel(choiceProbabilityCalculator, householdDay, nCallsForTour, available, choice); choiceProbabilityCalculator.WriteObservation(); // } } else if (Global.Configuration.TestEstimationModelInApplicationMode) { Global.Configuration.IsInEstimationMode = false; //choice = Math.Min(personDay.BusinessStops, 1) + 2 * Math.Min(personDay.SchoolStops, 1); RunModel(choiceProbabilityCalculator, householdDay, nCallsForTour, available); ChoiceProbabilityCalculator.Alternative chosenAlternative = choiceProbabilityCalculator.SimulateChoice(householdDay.Household.RandomUtility, householdDay.Household.Id, choice); Global.Configuration.IsInEstimationMode = true; } else { //if (tour.PersonDay.TotalStops > 0) { // TODO: maybe the restrictions coming from HH pattern shoudl enter here RunModel(choiceProbabilityCalculator, householdDay, nCallsForTour, available); ChoiceProbabilityCalculator.Alternative chosenAlternative = choiceProbabilityCalculator.SimulateChoice(householdDay.Household.RandomUtility); choice = (int)chosenAlternative.Choice; //} //else { // TODO: see above TODO: // choice = Global.Settings.Purposes.NoneOrHome; // this is returned if the model isn't even run because we know there are no tours // which is used by the choicemodelrunneer to break tour generation // } } return(choice); }
public void Run(IPersonDayWrapper personDay, IHouseholdDayWrapper householdDay) { if (personDay == null) { throw new ArgumentNullException("personDay"); } personDay.Person.ResetRandom(961); int choice = 0; if (Global.Configuration.IsInEstimationMode) { if (Global.Configuration.EstimationModel != CHOICE_MODEL_NAME) { return; } } ChoiceProbabilityCalculator choiceProbabilityCalculator = _helpers[ParallelUtility.threadLocalAssignedIndex.Value].GetChoiceProbabilityCalculator(personDay.Person.Id * 10 + personDay.Day); if (_helpers[ParallelUtility.threadLocalAssignedIndex.Value].ModelIsInEstimationMode) { choice = Math.Min(personDay.WorkStops, 1) + 2 * Math.Min(personDay.SchoolStops, 1); RunModel(choiceProbabilityCalculator, personDay, householdDay, choice); choiceProbabilityCalculator.WriteObservation(); } else if (Global.Configuration.TestEstimationModelInApplicationMode) { Global.Configuration.IsInEstimationMode = false; RunModel(choiceProbabilityCalculator, personDay, householdDay); int observedChoice = Math.Min(personDay.WorkStops, 1) + 2 * Math.Min(personDay.SchoolStops, 1); ChoiceProbabilityCalculator.Alternative simulatedChoice = choiceProbabilityCalculator.SimulateChoice(householdDay.Household.RandomUtility, personDay.Id, observedChoice); Global.Configuration.IsInEstimationMode = true; } else { RunModel(choiceProbabilityCalculator, personDay, householdDay); ChoiceProbabilityCalculator.Alternative chosenAlternative = choiceProbabilityCalculator.SimulateChoice(householdDay.Household.RandomUtility); choice = (int)chosenAlternative.Choice; if (choice == 1 || choice == 3) { personDay.WorkStops = 1; } if (choice == 2 || choice == 3) { personDay.SchoolStops = 1; } } }
public void Run(IPersonDayWrapper personDay, IHouseholdDayWrapper householdDay) { if (personDay == null) { throw new ArgumentNullException("personDay"); } personDay.Person.ResetRandom(904); if (Global.Configuration.IsInEstimationMode) { if (personDay.WorkAtHomeDuration >= 120 && personDay.Person.IsFullOrPartTimeWorker) { personDay.WorksAtHomeFlag = 1; } else { personDay.WorksAtHomeFlag = 0; } if (!_helpers[ParallelUtility.threadLocalAssignedIndex.Value].ModelIsInEstimationMode || !personDay.Person.IsFullOrPartTimeWorker) { return; } } ChoiceProbabilityCalculator choiceProbabilityCalculator = _helpers[ParallelUtility.threadLocalAssignedIndex.Value].GetChoiceProbabilityCalculator(personDay.Person.Id * 10 + personDay.Day); if (_helpers[ParallelUtility.threadLocalAssignedIndex.Value].ModelIsInEstimationMode) { if (Global.Configuration.EstimationModel != CHOICE_MODEL_NAME) { return; } RunModel(choiceProbabilityCalculator, personDay, householdDay, personDay.WorksAtHomeFlag); choiceProbabilityCalculator.WriteObservation(); } else { int choice; if (!personDay.Person.IsFullOrPartTimeWorker) { choice = 0; } else { RunModel(choiceProbabilityCalculator, personDay, householdDay); ChoiceProbabilityCalculator.Alternative chosenAlternative = choiceProbabilityCalculator.SimulateChoice(personDay.Household.RandomUtility); choice = (int)chosenAlternative.Choice; } personDay.WorksAtHomeFlag = choice; personDay.WorkAtHomeDuration = choice * 120; //default predicted duration for output } }
public void Run(ITourWrapper subtour) { if (subtour == null) { throw new ArgumentNullException("subtour"); } TourTime.InitializeTourTimes(); subtour.PersonDay.ResetRandom(50 + subtour.Sequence - 1); if (subtour == null) { throw new ArgumentNullException("subtour"); } if (Global.Configuration.IsInEstimationMode) { if (Global.Configuration.EstimationModel != CHOICE_MODEL_NAME) { return; } } ChoiceProbabilityCalculator choiceProbabilityCalculator = _helpers[ParallelUtility.threadLocalAssignedIndex.Value].GetChoiceProbabilityCalculator(subtour.Id); if (_helpers[ParallelUtility.threadLocalAssignedIndex.Value].ModelIsInEstimationMode) { if (subtour.DestinationParcel == null || subtour.OriginParcel == null || subtour.Mode <= Global.Settings.Modes.None || subtour.Mode >= Global.Settings.Modes.ParkAndRide) { return; } RunModel(choiceProbabilityCalculator, subtour, new TourTime(subtour.DestinationArrivalTime, subtour.DestinationDepartureTime)); choiceProbabilityCalculator.WriteObservation(); } else { RunModel(choiceProbabilityCalculator, subtour); ChoiceProbabilityCalculator.Alternative chosenAlternative = choiceProbabilityCalculator.SimulateChoice(subtour.Household.RandomUtility); if (chosenAlternative == null) { Global.PrintFile.WriteNoAlternativesAvailableWarning(CHOICE_MODEL_NAME, "Run", subtour.PersonDay.Id); subtour.PersonDay.IsValid = false; return; } TourTime choice = (TourTime)chosenAlternative.Choice; IMinuteSpan destinationTimes = choice.GetDestinationTimes(subtour); subtour.DestinationArrivalTime = destinationTimes.Start; subtour.DestinationDepartureTime = destinationTimes.End; } }
protected override void RegionSpecificWorkTourCustomCoefficients(ChoiceProbabilityCalculator.Alternative alternative, ITourWrapper _tour, IParcelWrapper destinationParcel, IPersonWrapper person) { //add any region-specific new terms in region-specific class, using coefficient numbers 114-120, or other unused variable # //Global.PrintFile.WriteLine("PSRC_OtherTourDestinationModel.RegionSpecificOtherTourDistrictCoefficients called"); double distanceFromOrigin = _tour.OriginParcel.DistanceFromOrigin(destinationParcel, _tour.DestinationArrivalTime); double distanceFromOriginLog = Math.Log(1 + distanceFromOrigin); alternative.AddUtilityTerm(100, person.WorksAtHome().ToFlag() * distanceFromOriginLog); }
private void RunAVModel(ChoiceProbabilityCalculator choiceProbabilityCalculator, IHouseholdWrapper household, int choice = Constants.DEFAULT_VALUE) { int ageOfHouseholdHead = 0; double totalCommuteTime = 0; foreach (IPersonWrapper person in household.Persons) { if (person.Sequence == 1) { ageOfHouseholdHead = person.Age; } if (person.IsWorker && person.UsualWorkParcel != null && person.UsualWorkParcelId != household.ResidenceParcelId) { int destinationArrivalTime = ChoiceModelUtility.GetDestinationArrivalTime(Global.Settings.Models.WorkTourModeModel); int destinationDepartureTime = ChoiceModelUtility.GetDestinationDepartureTime(Global.Settings.Models.WorkTourModeModel); totalCommuteTime += ImpedanceRoster.GetValue("ivtime", Global.Settings.Modes.Sov, Global.Settings.PathTypes.FullNetwork, Global.Settings.ValueOfTimes.DefaultVot, destinationArrivalTime, household.ResidenceParcel, person.UsualWorkParcel).Variable; totalCommuteTime += ImpedanceRoster.GetValue("ivtime", Global.Settings.Modes.Sov, Global.Settings.PathTypes.FullNetwork, Global.Settings.ValueOfTimes.DefaultVot, destinationDepartureTime, person.UsualWorkParcel, household.ResidenceParcel).Variable; } } // 0 Conventional auotos ChoiceProbabilityCalculator.Alternative alternative = choiceProbabilityCalculator.GetAlternative(0, true, choice == 0); alternative.Choice = 0; //utility is 0 // 1 AVs alternative = choiceProbabilityCalculator.GetAlternative(1, true, choice == 1); alternative.Choice = 1; alternative.AddUtilityTerm(200, Global.Configuration.AV_AutoTypeConstant); alternative.AddUtilityTerm(200, Global.Configuration.AV_HHIncomeUnder50KCoefficient * household.HasIncomeUnder50K.ToFlag()); alternative.AddUtilityTerm(200, Global.Configuration.AV_HHIncomeOver100KCoefficient * household.Has100KPlusIncome.ToFlag()); alternative.AddUtilityTerm(200, Global.Configuration.AV_HHHeadUnder35Coefficient * (ageOfHouseholdHead < 35).ToFlag()); alternative.AddUtilityTerm(200, Global.Configuration.AV_HHHeadOver65Coefficient * (ageOfHouseholdHead >= 65).ToFlag()); alternative.AddUtilityTerm(200, Global.Configuration.AV_CoefficientPerHourCommuteTime * (totalCommuteTime / 60.0)); // 2 not available alternative = choiceProbabilityCalculator.GetAlternative(2, false, choice == 2); alternative.Choice = 2; // 3 not available alternative = choiceProbabilityCalculator.GetAlternative(3, false, choice == 3); alternative.Choice = 3; // 4 not available alternative = choiceProbabilityCalculator.GetAlternative(4, false, choice == 4); alternative.Choice = 4; }
public void Run(PersonDayWrapper personDay, HouseholdDayWrapper householdDay) { if (personDay == null) { throw new ArgumentNullException("personDay"); } personDay.Person.ResetRandom(903); int choice = 0; if (Global.Configuration.IsInEstimationMode) { if (Global.Configuration.EstimationModel != CHOICE_MODEL_NAME) { return; } } ChoiceProbabilityCalculator choiceProbabilityCalculator = _helpers[ParallelUtility.threadLocalAssignedIndex.Value].GetChoiceProbabilityCalculator(personDay.Person.Id * 10 + personDay.Day); if (_helpers[ParallelUtility.threadLocalAssignedIndex.Value].ModelIsInEstimationMode) { choice = personDay.PatternType; RunModel(choiceProbabilityCalculator, personDay, householdDay, choice); choiceProbabilityCalculator.WriteObservation(); } else if (Global.Configuration.TestEstimationModelInApplicationMode) { Global.Configuration.IsInEstimationMode = false; //choice = personDay.PatternType; RunModel(choiceProbabilityCalculator, personDay, householdDay); //var observedChoice = new HTourModeTime(tour.Mode, tour.DestinationArrivalTime, tour.DestinationDepartureTime); //var simulatedChoice = choiceProbabilityCalculator.SimulateChoice(householdDay.Household.RandomUtility, householdDay.Household.Id, altPTypes.); //var chosenAlternative = choiceProbabilityCalculator.SimulateChoice(householdDay.Household.RandomUtility, householdDay.Household.Id, choice); ChoiceProbabilityCalculator.Alternative chosenAlternative = choiceProbabilityCalculator.SimulateChoice(householdDay.Household.RandomUtility, personDay.Id, personDay.PatternType - 1); Global.Configuration.IsInEstimationMode = true; } else { RunModel(choiceProbabilityCalculator, personDay, householdDay); ChoiceProbabilityCalculator.Alternative chosenAlternative = choiceProbabilityCalculator.SimulateChoice(householdDay.Household.RandomUtility); choice = (int)chosenAlternative.Choice; personDay.PatternType = choice; } }
public void Run(ITourWrapper tour, int sampleSize) { if (tour == null) { throw new ArgumentNullException("tour"); } tour.PersonDay.ResetRandom(20 + tour.Sequence - 1); if (Global.Configuration.IsInEstimationMode) { if (Global.Configuration.EstimationModel != CHOICE_MODEL_NAME) { return; } if (!TourDestinationUtilities.ShouldRunInEstimationModeForModel(tour)) { return; } } ChoiceProbabilityCalculator choiceProbabilityCalculator = _helpers[ParallelUtility.threadLocalAssignedIndex.Value].GetChoiceProbabilityCalculator(tour.Id); if (_helpers[ParallelUtility.threadLocalAssignedIndex.Value].ModelIsInEstimationMode) { RunModel(choiceProbabilityCalculator, tour, sampleSize, tour.DestinationParcel); choiceProbabilityCalculator.WriteObservation(); } else { RunModel(choiceProbabilityCalculator, tour, sampleSize); ChoiceProbabilityCalculator.Alternative chosenAlternative = choiceProbabilityCalculator.SimulateChoice(tour.Household.RandomUtility); if (chosenAlternative == null) { Global.PrintFile.WriteNoAlternativesAvailableWarning(CHOICE_MODEL_NAME, "Run", tour.PersonDay.Id); tour.PersonDay.IsValid = false; return; } ParcelWrapper choice = (ParcelWrapper)chosenAlternative.Choice; tour.DestinationParcelId = choice.Id; tour.DestinationParcel = choice; tour.DestinationZoneKey = ChoiceModelFactory.ZoneKeys[choice.ZoneId]; tour.DestinationAddressType = choice.Id == tour.Person.UsualWorkParcelId ? Global.Settings.AddressTypes.UsualWorkplace : Global.Settings.AddressTypes.Other; if (choice.Id == tour.Person.UsualWorkParcelId) { tour.PersonDay.UsualWorkplaceTours++; } } }
public int Run(PersonDayWrapper personDay, HouseholdDayWrapper householdDay, int nCallsForTour, int[] simulatedMandatoryTours, int choice) { if (personDay == null) { throw new ArgumentNullException("personDay"); } personDay.Person.ResetRandom(904 + nCallsForTour); if (Global.Configuration.IsInEstimationMode) { if (Global.Configuration.EstimationModel != CHOICE_MODEL_NAME) { return(choice); } } ChoiceProbabilityCalculator choiceProbabilityCalculator = _helpers[ParallelUtility.threadLocalAssignedIndex.Value].GetChoiceProbabilityCalculator(((personDay.Person.Id * 10 + personDay.Day) * 397) ^ nCallsForTour); if (_helpers[ParallelUtility.threadLocalAssignedIndex.Value].ModelIsInEstimationMode) { RunModel(choiceProbabilityCalculator, personDay, householdDay, nCallsForTour, simulatedMandatoryTours, choice); choiceProbabilityCalculator.WriteObservation(); } else if (Global.Configuration.TestEstimationModelInApplicationMode) { Global.Configuration.IsInEstimationMode = false; RunModel(choiceProbabilityCalculator, personDay, householdDay, nCallsForTour, simulatedMandatoryTours); ChoiceProbabilityCalculator.Alternative chosenAlternative = choiceProbabilityCalculator.SimulateChoice(householdDay.Household.RandomUtility, personDay.Id, choice); Global.Configuration.IsInEstimationMode = true; } else { RunModel(choiceProbabilityCalculator, personDay, householdDay, nCallsForTour, simulatedMandatoryTours); ChoiceProbabilityCalculator.Alternative chosenAlternative = choiceProbabilityCalculator.SimulateChoice(personDay.Household.RandomUtility); choice = (int)chosenAlternative.Choice; if (choice == 1) { personDay.UsualWorkplaceTours++; personDay.WorkTours++; } else if (choice == 2) { personDay.BusinessTours++; } else if (choice == 3) { personDay.SchoolTours++; } } return(choice); }
protected override void RegionSpecificCustomizations(ChoiceProbabilityCalculator.Alternative alternative, IPersonWrapper _person, IParcelWrapper destinationParcel) { int origState = _person.Household.ResidenceParcel.District; int destState = destinationParcel.District; int bridgeFromNJ = (origState == 34 && destState > 0 && destState != 34).ToFlag(); int bridgeToNJ = (destState == 34 && origState > 0 && origState != 34).ToFlag(); alternative.AddUtilityTerm(91, bridgeFromNJ); alternative.AddUtilityTerm(92, bridgeToNJ); }
public void Run(IPersonDayWrapper personDay) { if (personDay == null) { throw new ArgumentNullException("personDay"); } personDay.ResetRandom(5); if (Global.Configuration.IsInEstimationMode) { if (Global.Configuration.EstimationModel != CHOICE_MODEL_NAME) { return; } } ChoiceProbabilityCalculator choiceProbabilityCalculator = _helpers[ParallelUtility.threadLocalAssignedIndex.Value].GetChoiceProbabilityCalculator(personDay.Id); if (_helpers[ParallelUtility.threadLocalAssignedIndex.Value].ModelIsInEstimationMode) { RunModel(choiceProbabilityCalculator, personDay, new DayPattern(personDay)); choiceProbabilityCalculator.WriteObservation(); } else { if (personDay.Person.UsualWorkParcelId != Global.Settings.OutOfRegionParcelId && personDay.Person.UsualSchoolParcelId != Global.Settings.OutOfRegionParcelId) { RunModel(choiceProbabilityCalculator, personDay); ChoiceProbabilityCalculator.Alternative chosenAlternative = choiceProbabilityCalculator.SimulateChoice(personDay.Household.RandomUtility); DayPattern choice = (DayPattern)chosenAlternative.Choice; personDay.WorkTours = choice.WorkTours; personDay.SchoolTours = choice.SchoolTours; personDay.EscortTours = choice.EscortTours; personDay.PersonalBusinessTours = choice.PersonalBusinessTours; personDay.ShoppingTours = choice.ShoppingTours; personDay.MealTours = choice.MealTours; personDay.SocialTours = choice.SocialTours; personDay.WorkStops = choice.WorkStops; personDay.SchoolStops = choice.SchoolStops; personDay.EscortStops = choice.EscortStops; personDay.PersonalBusinessStops = choice.PersonalBusinessStops; personDay.ShoppingStops = choice.ShoppingStops; personDay.MealStops = choice.MealStops; personDay.SocialStops = choice.SocialStops; } } }
protected override void RegionSpecificCustomizations(ChoiceProbabilityCalculator.Alternative alternative, IPersonWrapper _person, IParcelWrapper destinationParcel) { int homedist = _person.Household.ResidenceParcel.District; int zonedist = destinationParcel.District; //add any region-specific new terms in region-specific class, using coefficient numbers 91-97, 49, 99,100 or other unused variable # //Global.PrintFile.WriteLine("Default Fresno_WorkLocationModel.RegionSpecificCustomizations called"); int homeNorthWorkSCBD = (homedist == 2 || homedist == 3 || homedist == 4 || homedist == 5 || homedist == 6 || homedist == 7) && (zonedist == 10) ? 1 : 0; int homeSCBDWorkSCBD = homedist == 10 && (zonedist == 10) ? 1 : 0; alternative.AddUtilityTerm(91, homeNorthWorkSCBD); alternative.AddUtilityTerm(92, homeSCBDWorkSCBD); }
protected override void RegionSpecificOtherTourDistrictCoefficients(ChoiceProbabilityCalculator.Alternative alternative, ITourWrapper _tour, IParcelWrapper destinationParcel) { //add any region-specific new terms in region-specific class, using coefficient numbers 114-120, or other unused variable # int origState = _tour.OriginParcel.District; int destState = destinationParcel.District; int bridgeFromNJ = (origState == 34 && destState > 0 && destState != 34).ToFlag(); int bridgeToNJ = (destState == 34 && origState > 0 && origState != 34).ToFlag(); alternative.AddUtilityTerm(114, bridgeFromNJ); alternative.AddUtilityTerm(115, bridgeToNJ); }
public void Run(HouseholdWrapper household) { if (household == null) { throw new ArgumentNullException("household"); } household.ResetRandom(4); if (Global.Configuration.IsInEstimationMode) { if (Global.Configuration.EstimationModel != CHOICE_MODEL_NAME) { return; } } else if (Global.Configuration.AV_IncludeAutoTypeChoice) { ChoiceProbabilityCalculator AVchoiceProbabilityCalculator = _helpers[ParallelUtility.threadLocalAssignedIndex.Value].GetChoiceProbabilityCalculator(household.Id); RunAVModel(AVchoiceProbabilityCalculator, household); ChoiceProbabilityCalculator.Alternative chosenAlternative = AVchoiceProbabilityCalculator.SimulateChoice(household.RandomUtility); int choice = (int)chosenAlternative.Choice; household.OwnsAutomatedVehicles = choice; } ChoiceProbabilityCalculator choiceProbabilityCalculator = _helpers[ParallelUtility.threadLocalAssignedIndex.Value].GetChoiceProbabilityCalculator(household.Id); int vehicles = household.VehiclesAvailable; if (household.VehiclesAvailable > 2) { vehicles = 2; } if (_helpers[ParallelUtility.threadLocalAssignedIndex.Value].ModelIsInEstimationMode) { RunModel(choiceProbabilityCalculator, household, vehicles); choiceProbabilityCalculator.WriteObservation(); } else { RunModel(choiceProbabilityCalculator, household); ChoiceProbabilityCalculator.Alternative chosenAlternative = choiceProbabilityCalculator.SimulateChoice(household.RandomUtility); int choice = (int)chosenAlternative.Choice; household.VehiclesAvailable = choice; } }
public void Run(HouseholdDayWrapper householdDay, TripWrapper trip) { if (trip == null) { throw new ArgumentNullException("trip"); } trip.PersonDay.ResetRandom(40 * (2 * trip.Tour.Sequence - 1 + trip.Direction - 1) + 50 + trip.Sequence - 1); if (Global.Configuration.IsInEstimationMode) { if (Global.Configuration.EstimationModel != CHOICE_MODEL_NAME) { return; } } ChoiceProbabilityCalculator choiceProbabilityCalculator = _helpers[ParallelUtility.threadLocalAssignedIndex.Value].GetChoiceProbabilityCalculator(trip.Id); if (_helpers[ParallelUtility.threadLocalAssignedIndex.Value].ModelIsInEstimationMode) { if (trip.DestinationParcel == null || trip.OriginParcel == null || trip.Mode <= Global.Settings.Modes.None || trip.Mode > Global.Settings.Modes.WalkRideBike) { return; } RunModel(choiceProbabilityCalculator, householdDay, trip, new HTripTime(trip.DepartureTime)); choiceProbabilityCalculator.WriteObservation(); } else { RunModel(choiceProbabilityCalculator, householdDay, trip); ChoiceProbabilityCalculator.Alternative chosenAlternative = choiceProbabilityCalculator.SimulateChoice(trip.Household.RandomUtility); if (chosenAlternative == null) { Global.PrintFile.WriteNoAlternativesAvailableWarning(CHOICE_MODEL_NAME, "Run", trip.PersonDay.Id); if (Global.Configuration.IsInEstimationMode) { trip.PersonDay.IsValid = false; } return; } HTripTime choice = (HTripTime)chosenAlternative.Choice; trip.DepartureTime = choice.GetRandomFeasibleMinute(trip, choice); } }
protected override void RegionSpecificCustomizations(ChoiceProbabilityCalculator.Alternative alternative, IHouseholdWrapper household) { //sfcta inserted special fields on the microzne file for residental parking - using unused properties double offStreetResidentParkingSpacesPerHH = household.ResidenceParcel.LandUseCode / Math.Max(household.ResidenceParcel.Households, 1); double onStreetResidentParkingSpacesPerHH = household.ResidenceParcel.OpenSpaceType1Buffer2 / Math.Max(household.ResidenceParcel.HouseholdsBuffer2, 1); //put on each alternative except 3 (2 vehicles), using the alternative number to number coefficient if (alternative.Id != 3) { alternative.AddUtilityTerm(100 + alternative.Id, Math.Min(offStreetResidentParkingSpacesPerHH, 4)); alternative.AddUtilityTerm(110 + alternative.Id, Math.Min(onStreetResidentParkingSpacesPerHH, 4)); alternative.AddUtilityTerm(120 + alternative.Id, (offStreetResidentParkingSpacesPerHH * offStreetResidentParkingSpacesPerHH) > 0 ? 1 : 0); } }