private void RunModel(ChoiceProbabilityCalculator choiceProbabilityCalculator, HouseholdDayWrapper householdDay, int nCallsForTour, int choice = Constants.DEFAULT_VALUE) { IEnumerable <PersonDayWrapper> orderedPersonDays = householdDay.PersonDays.OrderBy(p => p.GetJointTourParticipationPriority()).ToList().Cast <PersonDayWrapper>(); Framework.DomainModels.Wrappers.IHouseholdWrapper household = householdDay.Household; Framework.DomainModels.Wrappers.IParcelWrapper residenceParcel = household.ResidenceParcel; int carOwnership = household.VehiclesAvailable == 0 ? Global.Settings.CarOwnerships.NoCars : household.VehiclesAvailable < household.HouseholdTotals.DrivingAgeMembers ? Global.Settings.CarOwnerships.LtOneCarPerAdult : Global.Settings.CarOwnerships.OneOrMoreCarsPerAdult; int noCarsFlag = FlagUtility.GetNoCarsFlag(carOwnership); int carCompetitionFlag = FlagUtility.GetCarCompetitionFlag(carOwnership); int votALSegment = household.GetVotALSegment(); int transitAccessSegment = household.ResidenceParcel.TransitAccessSegment(); double personalBusinessAggregateLogsum = Global.AggregateLogsums[household.ResidenceParcel.ZoneId] [Global.Settings.Purposes.PersonalBusiness][carOwnership][votALSegment][transitAccessSegment]; double shoppingAggregateLogsum = Global.AggregateLogsums[household.ResidenceParcel.ZoneId] [Global.Settings.Purposes.Shopping][carOwnership][votALSegment][transitAccessSegment]; double mealAggregateLogsum = Global.AggregateLogsums[household.ResidenceParcel.ZoneId] [Global.Settings.Purposes.Meal][carOwnership][votALSegment][transitAccessSegment]; double socialAggregateLogsum = Global.AggregateLogsums[household.ResidenceParcel.ZoneId] [Global.Settings.Purposes.Social][carOwnership][votALSegment][transitAccessSegment]; double totalAggregateLogsum = Global.AggregateLogsums[household.ResidenceParcel.ZoneId] [Global.Settings.Purposes.HomeBasedComposite][carOwnership][votALSegment][transitAccessSegment]; // var recreationAggregateLogsum = Global.AggregateLogsums[household.ResidenceParcel.ZoneId] // [Global.Settings.Purposes.Recreation][carOwnership][votALSegment][transitAccessSegment]; // var medicalAggregateLogsum = Global.AggregateLogsums[household.ResidenceParcel.ZoneId] // [Global.Settings.Purposes.Medical][carOwnership][votALSegment][transitAccessSegment]; int countNonMandatory = 0; int countMandatory = 0; int countWorkingAtHome = 0; int countAge5to8 = 0; int countAge9to12 = 0; int countAge13to15 = 0; int countAdultFemale = 0; int countAdultMale = 0; int youngestAge = 150; int oldestAge = 0; int mandatoryHTours = 0; int mandatoryHStops = 0; int[] mandPerstype = new int[8]; int[] nonMandPerstype = new int[8]; int[] atHomePersType = new int[8]; List <KeyValuePair <int, double> > hhSchools = new List <KeyValuePair <int, double> >(); List <KeyValuePair <int, double> > hhJobs = new List <KeyValuePair <int, double> >(); int count = 0; foreach (PersonDayWrapper personDay in orderedPersonDays) { Framework.DomainModels.Wrappers.IPersonWrapper person = personDay.Person; count++; if (count > 8) { break; } if (personDay.Person.Age >= 5 && personDay.Person.Age <= 8) { countAge5to8++; } if (personDay.Person.Age >= 9 && personDay.Person.Age <= 12) { countAge9to12++; } if (personDay.Person.Age >= 13 && personDay.Person.Age <= 15) { countAge13to15++; } if (personDay.Person.IsAdultFemale) { countAdultFemale++; } else if (personDay.Person.IsAdultMale) { countAdultMale++; } if (personDay.Person.Age < youngestAge) { youngestAge = personDay.Person.Age; } if (personDay.Person.Age > oldestAge) { oldestAge = personDay.Person.Age; } mandatoryHTours = mandatoryHTours + personDay.WorkTours + personDay.SchoolTours; mandatoryHStops = mandatoryHStops + (personDay.WorkStops > 0).ToFlag() + (personDay.SchoolTours > 0).ToFlag(); if (personDay.WorksAtHomeFlag == 1) { countWorkingAtHome++; } if (personDay.PatternType == 1) { countMandatory++; mandPerstype[personDay.Person.PersonType - 1]++; } if (personDay.PatternType == 2) { countNonMandatory++; nonMandPerstype[personDay.Person.PersonType - 1]++; } if (personDay.PatternType == 3) { atHomePersType[personDay.Person.PersonType - 1]++; } } youngestAge = youngestAge == 150 ? 0 : youngestAge; // NONE_OR_HOME ChoiceProbabilityCalculator.Alternative alternative = choiceProbabilityCalculator.GetAlternative(Global.Settings.Purposes.NoneOrHome, true, choice == Global.Settings.Purposes.NoneOrHome); alternative.Choice = Global.Settings.Purposes.NoneOrHome; //alternative.AddUtilityTerm(1, (nCallsForTour == 1).ToFlag()); alternative.AddUtilityTerm(2, (nCallsForTour == 2).ToFlag()); alternative.AddUtilityTerm(3, (nCallsForTour >= 3).ToFlag()); alternative.AddUtilityTerm(12, atHomePersType[4]); // alternative.AddUtilityTerm(15, Math.Log(1+aveWorkTime)); // alternative.AddUtilityTerm(16, Math.Log(1+aveSchoolTime)); // WORK alternative = choiceProbabilityCalculator.GetAlternative(Global.Settings.Purposes.Work, false, choice == Global.Settings.Purposes.Work); alternative.Choice = Global.Settings.Purposes.Work; alternative.AddUtilityTerm(202, 1); // SCHOOL alternative = choiceProbabilityCalculator.GetAlternative(Global.Settings.Purposes.School, false, choice == Global.Settings.Purposes.School); alternative.Choice = Global.Settings.Purposes.School; alternative.AddUtilityTerm(203, 1); // ESCORT alternative = choiceProbabilityCalculator.GetAlternative(Global.Settings.Purposes.Escort, true, choice == Global.Settings.Purposes.Escort); alternative.Choice = Global.Settings.Purposes.Escort; alternative.AddUtilityTerm(151, 1); alternative.AddUtilityTerm(152, nonMandPerstype[0]); alternative.AddUtilityTerm(153, nonMandPerstype[1]); alternative.AddUtilityTerm(154, nonMandPerstype[2]); alternative.AddUtilityTerm(155, nonMandPerstype[3]); alternative.AddUtilityTerm(156, nonMandPerstype[4]); alternative.AddUtilityTerm(157, nonMandPerstype[5]); alternative.AddUtilityTerm(158, nonMandPerstype[6]); alternative.AddUtilityTerm(159, nonMandPerstype[7]); alternative.AddUtilityTerm(160, countMandatory); alternative.AddUtilityTerm(162, countWorkingAtHome); alternative.AddUtilityTerm(165, countAdultFemale); alternative.AddUtilityTerm(166, countAdultMale); alternative.AddUtilityTerm(167, countAge5to8); alternative.AddUtilityTerm(168, countAge9to12); alternative.AddUtilityTerm(169, countAge13to15); alternative.AddUtilityTerm(170, Math.Log(1 + youngestAge)); alternative.AddUtilityTerm(173, Math.Log(1 + household.ResidenceParcel.HouseholdsBuffer2)); // PERSONAL_BUSINESS alternative = choiceProbabilityCalculator.GetAlternative(Global.Settings.Purposes.PersonalBusiness, true, choice == Global.Settings.Purposes.PersonalBusiness); alternative.Choice = Global.Settings.Purposes.PersonalBusiness; alternative.AddUtilityTerm(21, 1); alternative.AddUtilityTerm(22, nonMandPerstype[0]); alternative.AddUtilityTerm(23, nonMandPerstype[1]); alternative.AddUtilityTerm(24, nonMandPerstype[2]); alternative.AddUtilityTerm(25, nonMandPerstype[3]); alternative.AddUtilityTerm(26, nonMandPerstype[4]); alternative.AddUtilityTerm(27, nonMandPerstype[5]); alternative.AddUtilityTerm(28, nonMandPerstype[6]); alternative.AddUtilityTerm(29, nonMandPerstype[7]); alternative.AddUtilityTerm(30, countMandatory); alternative.AddUtilityTerm(37, Math.Log(1 + oldestAge)); // SHOPPING alternative = choiceProbabilityCalculator.GetAlternative(Global.Settings.Purposes.Shopping, true, choice == Global.Settings.Purposes.Shopping); alternative.Choice = Global.Settings.Purposes.Shopping; alternative.AddUtilityTerm(41, 1); alternative.AddUtilityTerm(42, nonMandPerstype[0]); alternative.AddUtilityTerm(43, nonMandPerstype[1]); alternative.AddUtilityTerm(44, nonMandPerstype[2]); alternative.AddUtilityTerm(45, nonMandPerstype[3]); alternative.AddUtilityTerm(46, nonMandPerstype[4]); alternative.AddUtilityTerm(47, nonMandPerstype[5]); alternative.AddUtilityTerm(48, nonMandPerstype[6]); alternative.AddUtilityTerm(49, nonMandPerstype[7]); alternative.AddUtilityTerm(50, countMandatory); alternative.AddUtilityTerm(51, shoppingAggregateLogsum); alternative.AddUtilityTerm(52, householdDay.Household.Has0To25KIncome.ToFlag()); alternative.AddUtilityTerm(58, Math.Log(1 + youngestAge)); alternative.AddUtilityTerm(59, Math.Log(1 + oldestAge)); // MEAL alternative = choiceProbabilityCalculator.GetAlternative(Global.Settings.Purposes.Meal, true, choice == Global.Settings.Purposes.Meal); alternative.Choice = Global.Settings.Purposes.Meal; alternative.AddUtilityTerm(61, 1); alternative.AddUtilityTerm(62, nonMandPerstype[0]); alternative.AddUtilityTerm(63, nonMandPerstype[1]); alternative.AddUtilityTerm(64, nonMandPerstype[2]); alternative.AddUtilityTerm(65, nonMandPerstype[3]); alternative.AddUtilityTerm(66, nonMandPerstype[4]); alternative.AddUtilityTerm(67, nonMandPerstype[5]); alternative.AddUtilityTerm(68, nonMandPerstype[6]); alternative.AddUtilityTerm(69, nonMandPerstype[7]); alternative.AddUtilityTerm(70, countMandatory); alternative.AddUtilityTerm(71, mealAggregateLogsum); alternative.AddUtilityTerm(78, Math.Log(1 + youngestAge)); alternative.AddUtilityTerm(79, Math.Log(1 + oldestAge)); alternative.AddUtilityTerm(80, Math.Log(1 + household.ResidenceParcel.HouseholdsBuffer2)); // SOCIAL alternative = choiceProbabilityCalculator.GetAlternative(Global.Settings.Purposes.Social, true, choice == Global.Settings.Purposes.Social); alternative.Choice = Global.Settings.Purposes.Social; alternative.AddUtilityTerm(81, 1); alternative.AddUtilityTerm(82, nonMandPerstype[0]); alternative.AddUtilityTerm(83, nonMandPerstype[1]); alternative.AddUtilityTerm(84, nonMandPerstype[2]); alternative.AddUtilityTerm(85, nonMandPerstype[3]); alternative.AddUtilityTerm(86, nonMandPerstype[4]); alternative.AddUtilityTerm(87, nonMandPerstype[5]); alternative.AddUtilityTerm(88, nonMandPerstype[6]); alternative.AddUtilityTerm(89, nonMandPerstype[7]); alternative.AddUtilityTerm(90, countMandatory); alternative.AddUtilityTerm(91, socialAggregateLogsum); alternative.AddUtilityTerm(93, Math.Log(1 + householdDay.Household.ResidenceParcel.HouseholdsBuffer1)); alternative.AddUtilityTerm(96, countAge5to8); alternative.AddUtilityTerm(97, countAge9to12); alternative.AddUtilityTerm(98, countAge13to15); alternative.AddUtilityTerm(100, Math.Log(1 + oldestAge)); // RECREATION alternative = choiceProbabilityCalculator.GetAlternative(Global.Settings.Purposes.Recreation, true, choice == Global.Settings.Purposes.Recreation); alternative.Choice = Global.Settings.Purposes.Recreation; alternative.AddUtilityTerm(101, 1); alternative.AddUtilityTerm(102, nonMandPerstype[0]); alternative.AddUtilityTerm(103, nonMandPerstype[1]); alternative.AddUtilityTerm(104, nonMandPerstype[2]); alternative.AddUtilityTerm(105, nonMandPerstype[3]); alternative.AddUtilityTerm(106, nonMandPerstype[4]); alternative.AddUtilityTerm(107, nonMandPerstype[5]); alternative.AddUtilityTerm(108, nonMandPerstype[6]); alternative.AddUtilityTerm(109, nonMandPerstype[7]); alternative.AddUtilityTerm(110, countMandatory); alternative.AddUtilityTerm(111, totalAggregateLogsum); alternative.AddUtilityTerm(112, Math.Log(1 + householdDay.Household.ResidenceParcel.OpenSpaceType1Buffer1)); alternative.AddUtilityTerm(113, countAdultFemale); alternative.AddUtilityTerm(114, countAdultMale); alternative.AddUtilityTerm(115, countAge5to8); alternative.AddUtilityTerm(116, countAge9to12); alternative.AddUtilityTerm(117, countAge13to15); alternative.AddUtilityTerm(118, Math.Log(1 + youngestAge)); // MEDICAL alternative = choiceProbabilityCalculator.GetAlternative(Global.Settings.Purposes.Medical, true, choice == Global.Settings.Purposes.Medical); alternative.Choice = Global.Settings.Purposes.Medical; alternative.AddUtilityTerm(121, 1); alternative.AddUtilityTerm(122, nonMandPerstype[0]); alternative.AddUtilityTerm(123, nonMandPerstype[1]); alternative.AddUtilityTerm(124, nonMandPerstype[2]); alternative.AddUtilityTerm(125, nonMandPerstype[3]); alternative.AddUtilityTerm(126, nonMandPerstype[4]); alternative.AddUtilityTerm(127, nonMandPerstype[5]); alternative.AddUtilityTerm(128, nonMandPerstype[6]); alternative.AddUtilityTerm(129, nonMandPerstype[7]); alternative.AddUtilityTerm(130, countMandatory); alternative.AddUtilityTerm(131, totalAggregateLogsum); }
private void RunModel(ChoiceProbabilityCalculator choiceProbabilityCalculator, HouseholdDayWrapper householdDay, int nCallsForTour, bool[] available, int choice = Constants.DEFAULT_VALUE) { if (available[4]) { } Framework.DomainModels.Wrappers.IHouseholdWrapper household = householdDay.Household; IEnumerable <PersonDayWrapper> orderedPersonDays = householdDay.PersonDays.OrderBy(p => p.GetJointHalfTourParticipationPriority()).ToList().Cast <PersonDayWrapper>(); int carOwnership = household.VehiclesAvailable == 0 ? Global.Settings.CarOwnerships.NoCars : household.VehiclesAvailable < household.HouseholdTotals.DrivingAgeMembers ? Global.Settings.CarOwnerships.LtOneCarPerAdult : Global.Settings.CarOwnerships.OneOrMoreCarsPerAdult; int noCarsFlag = FlagUtility.GetNoCarsFlag(carOwnership); int carCompetitionFlag = FlagUtility.GetCarCompetitionFlag(carOwnership); int carsGrAdults = household.VehiclesAvailable > household.HouseholdTotals.DrivingAgeMembers ? 1 : 0; int votALSegment = household.GetVotALSegment(); int transitAccessSegment = household.ResidenceParcel.TransitAccessSegment(); double totAggregateLogsum = Global.AggregateLogsums[household.ResidenceParcel.ZoneId] [Global.Settings.Purposes.HomeBasedComposite][carOwnership][votALSegment][transitAccessSegment]; int countWorkingAtHome = 0; int transitPassOwnership = 0; int oldestChild = 0; int payParkWork = 0; int numSchoolMatch = 0; int count = 0; List <KeyValuePair <int, double> > hhSchools = new List <KeyValuePair <int, double> >(); List <KeyValuePair <int, double> > hhJobs = new List <KeyValuePair <int, double> >(); foreach (PersonDayWrapper personDay in orderedPersonDays) { Framework.DomainModels.Wrappers.IPersonWrapper person = personDay.Person; count++; if (count > 8) { break; } if (person.UsualSchoolParcelId > 0) { hhSchools.Add(new KeyValuePair <int, double>(person.UsualSchoolParcelId, person.AutoTimeToUsualSchool)); } if (person.UsualWorkParcelId > 0) { hhJobs.Add(new KeyValuePair <int, double>(person.UsualWorkParcelId, person.AutoTimeToUsualWork)); } if (personDay.WorksAtHomeFlag == 1) { countWorkingAtHome++; } if (person.TransitPassOwnership == 1) { transitPassOwnership++; } if (person.TransitPassOwnership == 1) { payParkWork++; } } int countMandatoryAdults = (from personDayHH in orderedPersonDays where personDayHH.PatternType == 1 && personDayHH.Person.IsAdult select personDayHH.PatternType).Count(); int countMandatoryChildren = (from personDayHH in orderedPersonDays where personDayHH.PatternType == 1 && personDayHH.Person.IsChildUnder16 select personDayHH.PatternType).Count(); int countNonMandatoryAdults = (from personDayHH in orderedPersonDays where personDayHH.PatternType == 2 && personDayHH.Person.IsAdult select personDayHH.PatternType).Count(); int countKidsAtHome = (from personDayHH in orderedPersonDays where personDayHH.PatternType == 3 && personDayHH.Person.Age < 12 select personDayHH.PatternType).Count(); int youngestAge = (from person in household.Persons select person.Age).Min(); if (youngestAge <= 18) { oldestChild = (from person in household.Persons where person.Age <= 18 select person.Age).Max(); } if (hhSchools.Count > 1) { //number of schools - number of unique schools gives matches numSchoolMatch = hhSchools.Count - (from schoolm in hhSchools select schoolm).Distinct().Count(); } double lnYoungestAge = Math.Log(1 + youngestAge); double lnOldestChild = Math.Log(1 + oldestChild); int noStudents = household.HouseholdTotals.AllStudents == 0 ? 1 : 0; int noWorkers = household.HouseholdTotals.AllWorkers == 0 ? 1 : 0; // NONE_OR_HOME ChoiceProbabilityCalculator.Alternative alternative = choiceProbabilityCalculator.GetAlternative(Global.Settings.Purposes.NoneOrHome, available[0], choice == Global.Settings.Purposes.NoneOrHome); alternative.Choice = Global.Settings.Purposes.NoneOrHome; alternative.AddUtilityTerm(1, (nCallsForTour == 2).ToFlag()); alternative.AddUtilityTerm(2, (nCallsForTour == 3).ToFlag()); alternative.AddUtilityTerm(3, (nCallsForTour >= 4).ToFlag()); alternative.AddUtilityTerm(4, noCarsFlag); alternative.AddUtilityTerm(5, carsGrAdults); alternative.AddUtilityTerm(6, (countKidsAtHome > 0).ToFlag()); alternative.AddUtilityTerm(7, noStudents); alternative.AddUtilityTerm(8, noWorkers); // FULL PAIRED // base is two person- two worker household alternative = choiceProbabilityCalculator.GetAlternative(1, available[1], choice == 1); alternative.Choice = 1; alternative.AddUtilityTerm(11, 1); alternative.AddUtilityTerm(20, (countMandatoryAdults > 2).ToFlag()); alternative.AddUtilityTerm(13, (household.Has0To25KIncome).ToFlag()); alternative.AddUtilityTerm(12, (countMandatoryAdults == household.HouseholdTotals.Adults).ToFlag() * (countMandatoryChildren == 1).ToFlag()); alternative.AddUtilityTerm(14, (countMandatoryAdults == household.HouseholdTotals.Adults).ToFlag() * (countMandatoryChildren == 2).ToFlag()); alternative.AddUtilityTerm(15, (countMandatoryChildren >= 3).ToFlag()); alternative.AddUtilityTerm(16, (countNonMandatoryAdults > 0).ToFlag() * (countMandatoryChildren == 0).ToFlag()); alternative.AddUtilityTerm(17, (countNonMandatoryAdults > 0).ToFlag() * (countMandatoryChildren == 1).ToFlag()); alternative.AddUtilityTerm(18, (countNonMandatoryAdults > 0).ToFlag() * (countMandatoryChildren == 2).ToFlag()); alternative.AddUtilityTerm(19, numSchoolMatch); alternative.AddUtilityTerm(21, lnYoungestAge); alternative.AddUtilityTerm(22, (household.HouseholdTotals.DrivingAgeStudents > 0).ToFlag()); // FULL HalfTour 1 alternative = choiceProbabilityCalculator.GetAlternative(2, available[2], choice == 2); alternative.Choice = 2; alternative.AddUtilityTerm(31, 1); alternative.AddUtilityTerm(32, (countMandatoryAdults > 2).ToFlag()); alternative.AddUtilityTerm(39, (countMandatoryAdults == household.HouseholdTotals.Adults).ToFlag() * (countMandatoryChildren == 1).ToFlag()); alternative.AddUtilityTerm(40, (countMandatoryAdults == household.HouseholdTotals.Adults).ToFlag() * (countMandatoryChildren == 2).ToFlag()); alternative.AddUtilityTerm(41, (countMandatoryChildren >= 3).ToFlag()); alternative.AddUtilityTerm(42, (countNonMandatoryAdults > 0).ToFlag() * (countMandatoryChildren == 0).ToFlag()); alternative.AddUtilityTerm(43, (countNonMandatoryAdults > 0).ToFlag() * (countMandatoryChildren == 1).ToFlag()); alternative.AddUtilityTerm(44, (countNonMandatoryAdults > 0).ToFlag() * (countMandatoryChildren == 2).ToFlag()); alternative.AddUtilityTerm(45, numSchoolMatch); alternative.AddUtilityTerm(46, (household.HouseholdTotals.DrivingAgeStudents > 0).ToFlag()); alternative.AddUtilityTerm(47, lnOldestChild); alternative.AddUtilityTerm(49, totAggregateLogsum); alternative.AddUtilityTerm(53, (household.HouseholdTotals.ChildrenUnder5 > 1).ToFlag()); alternative.AddUtilityTerm(54, countWorkingAtHome); // Full HalfTour 2 alternative = choiceProbabilityCalculator.GetAlternative(3, available[3], choice == 3); alternative.Choice = 3; alternative.AddUtilityTerm(51, 1); alternative.AddUtilityTerm(32, (countMandatoryAdults > 2).ToFlag()); alternative.AddUtilityTerm(39, (countMandatoryAdults == household.HouseholdTotals.Adults).ToFlag() * (countMandatoryChildren == 1).ToFlag()); alternative.AddUtilityTerm(40, (countMandatoryAdults == household.HouseholdTotals.Adults).ToFlag() * (countMandatoryChildren == 2).ToFlag()); alternative.AddUtilityTerm(41, (countMandatoryChildren >= 3).ToFlag()); alternative.AddUtilityTerm(42, (countNonMandatoryAdults > 0).ToFlag() * (countMandatoryChildren == 0).ToFlag()); alternative.AddUtilityTerm(43, (countNonMandatoryAdults > 0).ToFlag() * (countMandatoryChildren == 1).ToFlag()); alternative.AddUtilityTerm(44, (countNonMandatoryAdults > 0).ToFlag() * (countMandatoryChildren == 2).ToFlag()); alternative.AddUtilityTerm(45, numSchoolMatch); alternative.AddUtilityTerm(46, (household.HouseholdTotals.DrivingAgeStudents > 0).ToFlag()); alternative.AddUtilityTerm(47, lnOldestChild); alternative.AddUtilityTerm(49, totAggregateLogsum); alternative.AddUtilityTerm(53, (household.HouseholdTotals.ChildrenUnder5 > 1).ToFlag()); alternative.AddUtilityTerm(54, countWorkingAtHome); // PARTIAL PAIRED alternative = choiceProbabilityCalculator.GetAlternative(4, available[4], choice == 4); alternative.Choice = 4; alternative.AddUtilityTerm(61, 1); alternative.AddUtilityTerm(62, (countMandatoryAdults > 2).ToFlag()); alternative.AddUtilityTerm(69, (countMandatoryAdults == household.HouseholdTotals.Adults).ToFlag() * (countMandatoryChildren == 1).ToFlag()); alternative.AddUtilityTerm(70, (countMandatoryAdults == household.HouseholdTotals.Adults).ToFlag() * (countMandatoryChildren == 2).ToFlag()); alternative.AddUtilityTerm(72, (countNonMandatoryAdults > 0).ToFlag() * (countMandatoryChildren == 0).ToFlag()); alternative.AddUtilityTerm(73, (countNonMandatoryAdults > 0).ToFlag() * (countMandatoryChildren == 1).ToFlag()); alternative.AddUtilityTerm(74, (countNonMandatoryAdults > 0).ToFlag() * (countMandatoryChildren == 2).ToFlag()); alternative.AddUtilityTerm(75, lnYoungestAge); alternative.AddUtilityTerm(78, household.Has75KPlusIncome.ToFlag()); alternative.AddUtilityTerm(86, (household.HouseholdTotals.DrivingAgeStudents > 0).ToFlag()); alternative.AddUtilityTerm(87, (countMandatoryChildren >= 3).ToFlag()); // PARTIAL HalfTour 1 alternative = choiceProbabilityCalculator.GetAlternative(5, available[5], choice == 5); alternative.Choice = 5; alternative.AddUtilityTerm(91, 1); alternative.AddUtilityTerm(92, (countMandatoryAdults > 2).ToFlag()); alternative.AddUtilityTerm(98, (countMandatoryAdults == household.HouseholdTotals.Adults).ToFlag() * (countMandatoryChildren == 1).ToFlag()); alternative.AddUtilityTerm(99, (countMandatoryAdults == household.HouseholdTotals.Adults).ToFlag() * (countMandatoryChildren == 2).ToFlag()); alternative.AddUtilityTerm(102, (countNonMandatoryAdults > 0).ToFlag() * (countMandatoryChildren == 0).ToFlag()); alternative.AddUtilityTerm(103, (countNonMandatoryAdults > 0).ToFlag() * (countMandatoryChildren == 1).ToFlag()); alternative.AddUtilityTerm(104, (countNonMandatoryAdults > 0).ToFlag() * (countMandatoryChildren == 2).ToFlag()); alternative.AddUtilityTerm(105, (countMandatoryChildren >= 3).ToFlag()); alternative.AddUtilityTerm(108, lnYoungestAge); alternative.AddUtilityTerm(109, lnOldestChild); alternative.AddUtilityTerm(114, (household.Has0To25KIncome).ToFlag()); alternative.AddUtilityTerm(115, (household.Has100KPlusIncome).ToFlag()); alternative.AddUtilityTerm(117, (household.HouseholdTotals.ChildrenAge5Through15 > 1).ToFlag()); alternative.AddUtilityTerm(118, (household.HouseholdTotals.PartTimeWorkers > 0).ToFlag()); // PARTIAL HalfTour 2 alternative = choiceProbabilityCalculator.GetAlternative(6, available[6], choice == 6); alternative.Choice = 6; alternative.AddUtilityTerm(101, 1); alternative.AddUtilityTerm(92, (countMandatoryAdults > 2).ToFlag()); alternative.AddUtilityTerm(98, (countMandatoryAdults == household.HouseholdTotals.Adults).ToFlag() * (countMandatoryChildren == 1).ToFlag()); alternative.AddUtilityTerm(99, (countMandatoryAdults == household.HouseholdTotals.Adults).ToFlag() * (countMandatoryChildren == 2).ToFlag()); alternative.AddUtilityTerm(102, (countNonMandatoryAdults > 0).ToFlag() * (countMandatoryChildren == 0).ToFlag()); alternative.AddUtilityTerm(103, (countNonMandatoryAdults > 0).ToFlag() * (countMandatoryChildren == 1).ToFlag()); alternative.AddUtilityTerm(104, (countNonMandatoryAdults > 0).ToFlag() * (countMandatoryChildren == 2).ToFlag()); alternative.AddUtilityTerm(105, (countMandatoryChildren >= 3).ToFlag()); alternative.AddUtilityTerm(108, lnYoungestAge); alternative.AddUtilityTerm(109, lnOldestChild); alternative.AddUtilityTerm(114, (household.Has0To25KIncome).ToFlag()); alternative.AddUtilityTerm(115, (household.Has100KPlusIncome).ToFlag()); alternative.AddUtilityTerm(117, (household.HouseholdTotals.ChildrenAge5Through15 > 1).ToFlag()); alternative.AddUtilityTerm(118, (household.HouseholdTotals.PartTimeWorkers > 0).ToFlag()); }
private void RunModel(ChoiceProbabilityCalculator choiceProbabilityCalculator, PersonDayWrapper personDay, HouseholdDayWrapper householdDay, int choice = Constants.DEFAULT_VALUE) { Framework.DomainModels.Wrappers.IHouseholdWrapper household = personDay.Household; Framework.DomainModels.Wrappers.IPersonWrapper person = personDay.Person; IEnumerable <PersonDayWrapper> personTypeOrderedPersonDays = householdDay.PersonDays.OrderBy(p => p.Person.PersonType).ToList().Cast <PersonDayWrapper>(); int mandatoryCount = 0; int nonMandatoryCount = 0; int homeCount = 0; // int mandatoryKids = 0; //int kidsAtHome = 0; //int nonMandatoryKids = 0; //int adultsAtHome = 0; double mandatoryLogsum = 0.0; int i = 0; foreach (PersonDayWrapper pDay in personTypeOrderedPersonDays) { i++; if (i <= 4) { if (pDay.PatternType == Global.Settings.PatternTypes.Mandatory) { mandatoryCount++; } else if (pDay.PatternType == Global.Settings.PatternTypes.Optional) { nonMandatoryCount++; } else { homeCount++; } } } /*int oldestAge = (from persons in household.Persons select persons.Age).Max(); * int youngestAge = (from persons in household.Persons select persons.Age).Min(); * int countTransitPassses = (from persons in household.Persons * where persons.TransitPassOwnershipFlag == 1 * select persons.TransitPassOwnershipFlag).Count();*/ Framework.DomainModels.Wrappers.IParcelWrapper residenceParcel = household.ResidenceParcel; int carOwnership = household.VehiclesAvailable == 0 ? Global.Settings.CarOwnerships.NoCars : household.VehiclesAvailable < household.HouseholdTotals.DrivingAgeMembers ? Global.Settings.CarOwnerships.LtOneCarPerAdult : Global.Settings.CarOwnerships.OneOrMoreCarsPerAdult; int noCarsFlag = FlagUtility.GetNoCarsFlag(carOwnership); int carCompetitionFlag = FlagUtility.GetCarCompetitionFlag(carOwnership); int votALSegment = household.GetVotALSegment(); int transitAccessSegment = household.ResidenceParcel.TransitAccessSegment(); double totalAggregateLogsum = Global.AggregateLogsums[household.ResidenceParcel.ZoneId] [Global.Settings.Purposes.HomeBasedComposite][carOwnership][votALSegment][transitAccessSegment]; double distanceToStop = household.ResidenceParcel.GetDistanceToTransit() > 0 ? Math.Min(household.ResidenceParcel.GetDistanceToTransit(), 2 * Global.Settings.DistanceUnitsPerMile) // JLBscale : 2 * Global.Settings.DistanceUnitsPerMile; if (person.PersonType <= Global.Settings.PersonTypes.PartTimeWorker) { if (person.UsualWorkParcelId != Constants.DEFAULT_VALUE && person.UsualWorkParcelId != Global.Settings.OutOfRegionParcelId) { if (person.UsualDeparturePeriodFromWork != Constants.DEFAULT_VALUE && person.UsualArrivalPeriodToWork != Constants.DEFAULT_VALUE) { ChoiceProbabilityCalculator.Alternative nestedAlternative = Global.ChoiceModelSession.Get <WorkTourModeTimeModel>().RunNested(personDay, person.Household.ResidenceParcel, person.UsualWorkParcel, (int)person.UsualArrivalPeriodToWork, (int)person.UsualDeparturePeriodFromWork, person.Household.HouseholdTotals.DrivingAgeMembers); mandatoryLogsum = nestedAlternative == null ? 0 : nestedAlternative.ComputeLogsum(); } else { ChoiceProbabilityCalculator.Alternative nestedAlternative = Global.ChoiceModelSession.Get <WorkTourModeTimeModel>().RunNested(personDay, person.Household.ResidenceParcel, person.UsualWorkParcel, Global.Settings.Times.EightAM, Global.Settings.Times.FivePM, person.Household.HouseholdTotals.DrivingAgeMembers); mandatoryLogsum = nestedAlternative == null ? 0 : nestedAlternative.ComputeLogsum(); } } else { mandatoryLogsum = 0; } } else if (person.PersonType >= Global.Settings.PersonTypes.UniversityStudent) { if (person.UsualSchoolParcelId != 0 && person.UsualSchoolParcelId != -1 && person.UsualSchoolParcelId != Global.Settings.OutOfRegionParcelId) { ChoiceProbabilityCalculator.Alternative schoolNestedAlternative = Global.ChoiceModelSession.Get <SchoolTourModeTimeModel>().RunNested(personDay, person.Household.ResidenceParcel, person.UsualSchoolParcel, Global.Settings.Times.EightAM, Global.Settings.Times.TwoPM, person.Household.HouseholdTotals.DrivingAgeMembers); mandatoryLogsum = schoolNestedAlternative == null ? 0 : schoolNestedAlternative.ComputeLogsum(); } else { mandatoryLogsum = 0; } } bool mandatoryAvailableFlag = true; if (personDay.Person.IsNonworkingAdult || personDay.Person.IsRetiredAdult || (!personDay.Person.IsWorker && !personDay.Person.IsStudent) || (!Global.Configuration.IsInEstimationMode && !personDay.Person.IsWorker && personDay.Person.UsualSchoolParcel == null) ) { mandatoryAvailableFlag = false; } // Pattern Type Mandatory on tour (at least one work or school tour) ChoiceProbabilityCalculator.Alternative alternative = choiceProbabilityCalculator.GetAlternative(0, mandatoryAvailableFlag, choice == 1); alternative.Choice = 1; //alternative.AddUtilityTerm(1, 1); //alternative.AddUtilityTerm(3, (person.IsStudent && person.IsWorker).ToFlag()); //alternative.AddUtilityTerm(4, person.IsPartTimeWorker.ToFlag()); alternative.AddUtilityTerm(6, (person.Age > 5).ToFlag() * (person.Age <= 18).ToFlag()); // alternative.AddUtilityTerm(10, (mandatoryCount == 2).ToFlag()); alternative.AddUtilityTerm(11, (mandatoryCount >= 3).ToFlag()); alternative.AddUtilityTerm(12, mandatoryLogsum); //alternative.AddUtilityTerm(13, totalAggregateLogsum); alternative.AddUtilityTerm(15, household.Has100KPlusIncome.ToFlag()); // PatternType NonMandatory on tour (tours, but none for work or school) alternative = choiceProbabilityCalculator.GetAlternative(1, true, choice == 2); alternative.Choice = 2; alternative.AddUtilityTerm(21, 1); alternative.AddUtilityTerm(23, person.IsPartTimeWorker.ToFlag()); alternative.AddUtilityTerm(24, person.IsDrivingAgeStudent.ToFlag()); alternative.AddUtilityTerm(25, person.IsUniversityStudent.ToFlag()); alternative.AddUtilityTerm(26, person.IsNonworkingAdult.ToFlag()); //alternative.AddUtilityTerm(28, person.IsRetiredAdult.ToFlag()); alternative.AddUtilityTerm(29, (nonMandatoryCount == 0).ToFlag()); //alternative.AddUtilityTerm(30, (nonMandatoryKids==1).ToFlag()); alternative.AddUtilityTerm(31, ((nonMandatoryCount == 2).ToFlag())); alternative.AddUtilityTerm(32, ((nonMandatoryCount >= 3).ToFlag())); alternative.AddUtilityTerm(34, totalAggregateLogsum); alternative.AddUtilityTerm(35, person.IsAdultFemale.ToFlag()); //alternative.AddUtilityTerm(37, household.Has75KPlusIncome.ToFlag()); // PatternType Home (all day) alternative = choiceProbabilityCalculator.GetAlternative(2, true, choice == 3); alternative.Choice = 3; alternative.AddUtilityTerm(41, 1); alternative.AddUtilityTerm(42, person.IsPartTimeWorker.ToFlag()); alternative.AddUtilityTerm(45, person.IsDrivingAgeStudent.ToFlag()); alternative.AddUtilityTerm(48, person.IsUniversityStudent.ToFlag()); alternative.AddUtilityTerm(52, (person.Age > 75).ToFlag()); alternative.AddUtilityTerm(53, (homeCount == 0).ToFlag()); alternative.AddUtilityTerm(57, (homeCount >= 2).ToFlag()); //alternative.AddUtilityTerm(58, person.IsAdultFemale.ToFlag()); // alternative.AddUtilityTerm(60, noCarsFlag + carCompetitionFlag); alternative.AddUtilityTerm(62, distanceToStop); //alternative.AddUtilityTerm(63, totalAggregateLogsum); alternative.AddUtilityTerm(64, mandatoryLogsum); //alternative.AddUtilityTerm(65, Math.Log(1+youngestAge)); //alternative.AddUtilityTerm(66, Math.Log(1+oldestAge)); }
private void RunModel(ChoiceProbabilityCalculator choiceProbabilityCalculator, PersonDayWrapper personDay, HouseholdDayWrapper householdDay, int maxPurpose, int choice = Constants.DEFAULT_VALUE) { IEnumerable <PersonDayWrapper> orderedPersonDays = householdDay.PersonDays.OrderBy(p => p.GetJointTourParticipationPriority()).ToList().Cast <PersonDayWrapper>(); Framework.DomainModels.Wrappers.IHouseholdWrapper household = householdDay.Household; Framework.DomainModels.Wrappers.IParcelWrapper residenceParcel = household.ResidenceParcel; int carOwnership = household.VehiclesAvailable == 0 ? Global.Settings.CarOwnerships.NoCars : household.VehiclesAvailable < household.HouseholdTotals.DrivingAgeMembers ? Global.Settings.CarOwnerships.LtOneCarPerAdult : Global.Settings.CarOwnerships.OneOrMoreCarsPerAdult; int noCarsFlag = FlagUtility.GetNoCarsFlag(carOwnership); int carCompetitionFlag = FlagUtility.GetCarCompetitionFlag(carOwnership); int votALSegment = household.GetVotALSegment(); int transitAccessSegment = household.ResidenceParcel.TransitAccessSegment(); double personalBusinessAggregateLogsum = Global.AggregateLogsums[household.ResidenceParcel.ZoneId] [Global.Settings.Purposes.PersonalBusiness][carOwnership][votALSegment][transitAccessSegment]; double shoppingAggregateLogsum = Global.AggregateLogsums[household.ResidenceParcel.ZoneId] [Global.Settings.Purposes.Shopping][Global.Settings.CarOwnerships.NoCars][votALSegment][transitAccessSegment]; //var mealAggregateLogsum = Global.AggregateLogsums[household.ResidenceParcel.ZoneId] // [Global.Settings.Purposes.Meal][carOwnership][votALSegment][transitAccessSegment]; double socialAggregateLogsum = Global.AggregateLogsums[household.ResidenceParcel.ZoneId] [Global.Settings.Purposes.Social][carOwnership][votALSegment][transitAccessSegment]; double totalAggregateLogsum = Global.AggregateLogsums[household.ResidenceParcel.ZoneId] [Global.Settings.Purposes.HomeBasedComposite][carOwnership][votALSegment][transitAccessSegment]; // var recreationAggregateLogsum = Global.AggregateLogsums[household.ResidenceParcel.ZoneId] // [Global.Settings.Purposes.Recreation][carOwnership][votALSegment][transitAccessSegment]; // var medicalAggregateLogsum = Global.AggregateLogsums[household.ResidenceParcel.ZoneId] // [Global.Settings.Purposes.Medical][carOwnership][votALSegment][transitAccessSegment]; //var compositeLogsum = Global.AggregateLogsums[household.ResidenceZoneId][Global.Settings.Purposes.HomeBasedComposite][carOwnership][votALSegment][transitAccessSegment]; double compositeLogsum = Global.AggregateLogsums[household.ResidenceZoneId][Global.Settings.Purposes.HomeBasedComposite][Global.Settings.CarOwnerships.NoCars][votALSegment][transitAccessSegment]; int countNonMandatory = 0; int countMandatory = 0; int countWorkingAtHome = 0; int[] mandPerstype = new int[8]; int[] nonMandPerstype = new int[8]; double[] workLogsum = new double[8]; double[] schoolLogsum = new double[8]; int count = 0; foreach (PersonDayWrapper pDay in orderedPersonDays) { Framework.DomainModels.Wrappers.IPersonWrapper person = pDay.Person; count++; if (count > 8) { break; } if (pDay.WorksAtHomeFlag == 1) { countWorkingAtHome++; } if (pDay.PatternType == 1) { countMandatory++; mandPerstype[pDay.Person.PersonType - 1]++; } if (pDay.PatternType == 2) { countNonMandatory++; nonMandPerstype[pDay.Person.PersonType - 1]++; } if (person.UsualWorkParcel == null || person.UsualWorkParcelId == household.ResidenceParcelId) { workLogsum[count - 1] = 0; } else { int destinationArrivalTime = ChoiceModelUtility.GetDestinationArrivalTime(Global.Settings.Models.WorkTourModeModel); int destinationDepartureTime = ChoiceModelUtility.GetDestinationDepartureTime(Global.Settings.Models.WorkTourModeModel); //JLB 201406 //var nestedAlternative = Global.ChoiceModelSession.Get<WorkTourModeModel>().RunNested(pDay, residenceParcel, person.UsualWorkParcel, destinationArrivalTime, destinationDepartureTime, household.VehiclesAvailable); //JLB 201602 //var nestedAlternative = Global.ChoiceModelSession.Get<WorkTourModeTimeModel>().RunNested(pDay, residenceParcel, person.UsualWorkParcel, destinationArrivalTime, destinationDepartureTime, household.VehiclesAvailable); ChoiceProbabilityCalculator.Alternative nestedAlternative = Global.ChoiceModelSession.Get <TourModeTimeModel>().RunNested(pDay, residenceParcel, person.UsualWorkParcel, destinationArrivalTime, destinationDepartureTime, household.VehiclesAvailable, Global.Settings.Purposes.Work); workLogsum[count - 1] = nestedAlternative == null ? 0 : nestedAlternative.ComputeLogsum(); } if (person.UsualSchoolParcel == null || person.UsualSchoolParcelId == household.ResidenceParcelId) { schoolLogsum[count - 1] = 0; } else { int destinationArrivalTime = ChoiceModelUtility.GetDestinationArrivalTime(Global.Settings.Models.SchoolTourModeModel); int destinationDepartureTime = ChoiceModelUtility.GetDestinationDepartureTime(Global.Settings.Models.SchoolTourModeModel); //JLB 201406 //var nestedAlternative = Global.ChoiceModelSession.Get<SchoolTourModeModel>().RunNested(pDay, residenceParcel, person.UsualSchoolParcel, destinationArrivalTime, destinationDepartureTime, household.VehiclesAvailable); //JLB 201602 //var nestedAlternative = Global.ChoiceModelSession.Get<SchoolTourModeTimeModel>().RunNested(pDay, residenceParcel, person.UsualSchoolParcel, destinationArrivalTime, destinationDepartureTime, household.VehiclesAvailable); ChoiceProbabilityCalculator.Alternative nestedAlternative = Global.ChoiceModelSession.Get <TourModeTimeModel>().RunNested(pDay, residenceParcel, person.UsualSchoolParcel, destinationArrivalTime, destinationDepartureTime, household.VehiclesAvailable, Global.Settings.Purposes.School); schoolLogsum[count - 1] = nestedAlternative == null ? 0 : nestedAlternative.ComputeLogsum(); } } // NONE_OR_HOME ChoiceProbabilityCalculator.Alternative alternative = choiceProbabilityCalculator.GetAlternative(Global.Settings.Purposes.NoneOrHome, true, choice == Global.Settings.Purposes.NoneOrHome); alternative.Choice = Global.Settings.Purposes.NoneOrHome; //alternative.AddUtilityTerm(1, (personDay.TotalCreatedTours == 1).ToFlag()); alternative.AddUtilityTerm(2, (personDay.GetTotalCreatedTours() == 2).ToFlag()); alternative.AddUtilityTerm(3, (personDay.GetTotalCreatedTours() >= 3).ToFlag()); //alternative.AddUtilityTerm(4, (personDay.TotalCreatedTours >= 4).ToFlag()); //alternative.AddUtilityTerm(5, householdDay.PrimaryPriorityTimeFlag); //alternative.AddUtilityTerm(6, householdDay.Household.HasChildren.ToFlag()); alternative.AddUtilityTerm(4, householdDay.Household.HasChildrenUnder5.ToFlag()); alternative.AddUtilityTerm(5, householdDay.Household.HasChildrenAge5Through15.ToFlag()); //alternative.AddUtilityTerm(6, (householdDay.Household.Size == 2 && householdDay.AdultsInSharedHomeStay == 2).ToFlag()); //alternative.AddUtilityTerm(7, (householdDay.AdultsInSharedHomeStay == 1 && householdDay.Household.HasChildrenUnder16).ToFlag()); //alternative.AddUtilityTerm(8, (householdDay.AdultsInSharedHomeStay == 2 && householdDay.Household.HouseholdTotals.FullAndPartTimeWorkers >= 2).ToFlag()); //alternative.AddUtilityTerm(10, (householdDay.Household.Income >= 300000 && householdDay.Household.Income < 600000).ToFlag()); //alternative.AddUtilityTerm(11, (householdDay.Household.Income >= 600000 && householdDay.Household.Income < 900000).ToFlag()); //alternative.AddUtilityTerm(12, (householdDay.Household.Income >= 900000).ToFlag()); alternative.AddUtilityTerm(13, householdDay.PrimaryPriorityTimeFlag); alternative.AddUtilityTerm(14, personDay.Person.IsPartTimeWorker.ToFlag()); alternative.AddUtilityTerm(15, personDay.Person.WorksAtHome.ToFlag()); //alternative.AddUtilityTerm(16, personDay.Person.IsFulltimeWorker.ToFlag()); //alternative.AddUtilityTerm(15, (personDay.Person.Gender == 1).ToFlag()); //alternative.AddUtilityTerm(10, (householdDay.Household.Size == 3).ToFlag()); //alternative.AddUtilityTerm(11, (householdDay.Household.Size == 4).ToFlag()); //alternative.AddUtilityTerm(12, (householdDay.Household.Size >= 5).ToFlag()); //alternative.AddNestedAlternative(11, 0, 200); // WORK alternative = choiceProbabilityCalculator.GetAlternative(Global.Settings.Purposes.Work, false, choice == Global.Settings.Purposes.Work); alternative.Choice = Global.Settings.Purposes.Work; alternative.AddUtilityTerm(202, 1); //alternative.AddNestedAlternative(12, 1, 200); // SCHOOL alternative = choiceProbabilityCalculator.GetAlternative(Global.Settings.Purposes.School, false, choice == Global.Settings.Purposes.School); alternative.Choice = Global.Settings.Purposes.School; alternative.AddUtilityTerm(203, 1); //alternative.AddNestedAlternative(12, 1, 200); // ESCORT alternative = choiceProbabilityCalculator.GetAlternative(Global.Settings.Purposes.Escort, maxPurpose <= Global.Settings.Purposes.Escort && personDay.CreatedEscortTours > 0, choice == Global.Settings.Purposes.Escort); alternative.Choice = Global.Settings.Purposes.Escort; alternative.AddUtilityTerm(151, 1); alternative.AddUtilityTerm(152, (personDay.CreatedEscortTours > 1).ToFlag()); //alternative.AddUtilityTerm(152, householdDay.PrimaryPriorityTimeFlag); //alternative.AddUtilityTerm(153, (householdDay.Household.Size == 3).ToFlag()); //alternative.AddUtilityTerm(154, (householdDay.Household.Size >= 4).ToFlag()); //alternative.AddUtilityTerm(155, (householdDay.Household.Size > 4).ToFlag()); alternative.AddUtilityTerm(155, compositeLogsum); //alternative.AddUtilityTerm(156, (householdDay.Household.VehiclesAvailable == 0).ToFlag()); //alternative.AddNestedAlternative(12, 1, 200); // PERSONAL_BUSINESS alternative = choiceProbabilityCalculator.GetAlternative(Global.Settings.Purposes.PersonalBusiness, maxPurpose <= Global.Settings.Purposes.PersonalBusiness && personDay.CreatedPersonalBusinessTours > 0, choice == Global.Settings.Purposes.PersonalBusiness); alternative.Choice = Global.Settings.Purposes.PersonalBusiness; alternative.AddUtilityTerm(21, 1); //alternative.AddUtilityTerm(22, (personDay.CreatedPersonalBusinessTours > 1).ToFlag()); //GV: 30. april 2013 - goes to infinity alternative.AddUtilityTerm(156, compositeLogsum); //alternative.AddNestedAlternative(12, 1, 200); // SHOPPING alternative = choiceProbabilityCalculator.GetAlternative(Global.Settings.Purposes.Shopping, maxPurpose <= Global.Settings.Purposes.Shopping && personDay.CreatedShoppingTours > 0, choice == Global.Settings.Purposes.Shopping); alternative.Choice = Global.Settings.Purposes.Shopping; alternative.AddUtilityTerm(41, 1); //alternative.AddUtilityTerm(42, (personDay.CreatedShoppingTours > 1).ToFlag()); //GV: cannot be estimated //alternative.AddUtilityTerm(42, householdDay.PrimaryPriorityTimeFlag); //alternative.AddUtilityTerm(43, (householdDay.Household.Size == 3).ToFlag()); //alternative.AddUtilityTerm(44, (householdDay.Household.Size == 4).ToFlag()); //alternative.AddUtilityTerm(45, (householdDay.Household.Size > 4).ToFlag()); //alternative.AddUtilityTerm(46, (householdDay.Household.VehiclesAvailable == 0).ToFlag()); //alternative.AddUtilityTerm(157, compositeLogsum); //GV wrong sign //alternative.AddUtilityTerm(157, shoppingAggregateLogsum); //GV wrong sign //alternative.AddNestedAlternative(12, 1, 200); // MEAL alternative = choiceProbabilityCalculator.GetAlternative(Global.Settings.Purposes.Meal, false, choice == Global.Settings.Purposes.Meal); alternative.Choice = Global.Settings.Purposes.Meal; alternative.AddUtilityTerm(61, 1); alternative.AddUtilityTerm(62, (personDay.CreatedMealTours > 1).ToFlag()); //alternative.AddNestedAlternative(12, 1, 200); // SOCIAL alternative = choiceProbabilityCalculator.GetAlternative(Global.Settings.Purposes.Social, maxPurpose <= Global.Settings.Purposes.Social && personDay.CreatedSocialTours > 0, choice == Global.Settings.Purposes.Social); alternative.Choice = Global.Settings.Purposes.Social; alternative.AddUtilityTerm(81, 1); alternative.AddUtilityTerm(82, (personDay.CreatedSocialTours > 1).ToFlag()); //alternative.AddUtilityTerm(82, householdDay.PrimaryPriorityTimeFlag); //alternative.AddUtilityTerm(83, (householdDay.Household.Size == 3).ToFlag()); //alternative.AddUtilityTerm(84, (householdDay.Household.Size == 4).ToFlag()); //alternative.AddUtilityTerm(85, (householdDay.Household.Size > 4).ToFlag()); alternative.AddUtilityTerm(158, compositeLogsum); //alternative.AddNestedAlternative(12, 1, 200); // RECREATION alternative = choiceProbabilityCalculator.GetAlternative(Global.Settings.Purposes.Recreation, false, choice == Global.Settings.Purposes.Recreation); alternative.Choice = Global.Settings.Purposes.Recreation; alternative.AddUtilityTerm(101, 1); //alternative.AddUtilityTerm(102, (personDay.CreatedRecreationTours > 1).ToFlag()); //alternative.AddNestedAlternative(12, 1, 60); // MEDICAL alternative = choiceProbabilityCalculator.GetAlternative(Global.Settings.Purposes.Medical, false, choice == Global.Settings.Purposes.Medical); alternative.Choice = Global.Settings.Purposes.Medical; alternative.AddUtilityTerm(121, 1); //alternative.AddUtilityTerm(122, (personDay.CreatedMedicalTours > 1).ToFlag()); //alternative.AddNestedAlternative(11, 1, 60); }