示例#1
0
        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());
            }
        }
示例#2
0
        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);
        }
示例#3
0
        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);
        }
示例#4
0
        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);
        }
示例#5
0
        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));
        }
示例#7
0
        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);
        }
示例#8
0
        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);
            }
        }
示例#9
0
        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);
            }
        }
示例#12
0
        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);
        }
示例#14
0
        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();
            }
        }
示例#15
0
        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);
        }
示例#16
0
        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;
                }
            }
        }
示例#17
0
        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;
            }
        }
示例#19
0
        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);
        }
示例#20
0
        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;
        }
示例#21
0
        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;
            }
        }
示例#22
0
        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++;
                }
            }
        }
示例#23
0
        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);
        }
示例#24
0
        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;
                }
            }
        }
示例#26
0
        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);
        }
示例#27
0
        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);
        }
示例#28
0
        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;
            }
        }
示例#29
0
        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);
            }
        }
示例#30
0
        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);
            }
        }