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 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 void Run(ITourWrapper tour, IHouseholdDayWrapper householdDay, int sampleSize, IParcelWrapper constrainedParcel = null) { 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; } // JLB 20140421 add the following to keep from estimatign twice for the same tour if (tour.DestinationModeAndTimeHaveBeenSimulated) { return; } } else if (tour.DestinationPurpose == Global.Settings.Purposes.School) { // the following lines were redundant. Usual destination properties are set in GetMandatoryTourSimulatedData(); // sets the destination for the school tour //tour.DestinationParcelId = tour.Person.UsualSchoolParcelId; //tour.DestinationParcel = tour.Person.UsualSchoolParcel; //tour.DestinationZoneKey = tour.Person.UsualSchoolZoneKey; //tour.DestinationAddressType = Global.Settings.AddressTypes.UsualSchool; return; } else if (tour.DestinationPurpose == Global.Settings.Purposes.Work && tour.DestinationAddressType == Global.Settings.AddressTypes.UsualWorkplace) { return; } else if (constrainedParcel != null) { tour.DestinationParcel = constrainedParcel; tour.DestinationParcelId = constrainedParcel.Id; tour.DestinationZoneKey = ChoiceModelFactory.ZoneKeys[constrainedParcel.ZoneId]; // mb fixed tour.DestinationAddressType = Global.Settings.AddressTypes.Other; return; } ChoiceProbabilityCalculator choiceProbabilityCalculator = _helpers[ParallelUtility.threadLocalAssignedIndex.Value].GetChoiceProbabilityCalculator(tour.Id); if (_helpers[ParallelUtility.threadLocalAssignedIndex.Value].ModelIsInEstimationMode) { if (constrainedParcel == null) { RunModel(choiceProbabilityCalculator, tour, householdDay, sampleSize, tour.DestinationParcel); choiceProbabilityCalculator.WriteObservation(); } } else { RunModel(choiceProbabilityCalculator, tour, householdDay, sampleSize); ChoiceProbabilityCalculator.Alternative chosenAlternative = choiceProbabilityCalculator.SimulateChoice(tour.Household.RandomUtility); if (chosenAlternative == null) { Global.PrintFile.WriteNoAlternativesAvailableWarning(CHOICE_MODEL_NAME, "Run", tour.PersonDay.Id); if (!Global.Configuration.IsInEstimationMode) { tour.PersonDay.IsValid = false; tour.PersonDay.HouseholdDay.IsValid = false; } return; } ParcelWrapper choice = (ParcelWrapper)chosenAlternative.Choice; tour.DestinationParcelId = choice.Id; tour.DestinationParcel = choice; tour.DestinationZoneKey = ChoiceModelFactory.ZoneKeys[choice.ZoneId]; tour.DestinationAddressType = Global.Settings.AddressTypes.Other; } }