private List<SimulationObject> GeneratePersons(SpatialZone currZone, int numPerson,
                            Person initAgent, bool warmUpStatus,
                            OutputFileWriter currWriter)
        {
            int seltdDim = 0;
            List<ConditionalDistribution> condList = currZone.GetPersonDataCollectionsList();
            var generatedAgents = new List<SimulationObject>();
            Person prevAgent = initAgent;
            ImportanceSampler currImpSampler = new ImportanceSampler();

            int iter = 0;
            if(warmUpStatus == true)
            {
                iter = Constants.WARMUP_ITERATIONS;
            }
            else
            {
                iter = Constants.SKIP_ITERATIONS * numPerson;
            }
            Person newAgent = new Person();
            StringBuilder builder = new StringBuilder();
            for(int i = 0; i < iter; i++)
            {
                seltdDim = randGen.NextInRange(0, condList.Count - 1);

                DiscreteCondDistribution currDist =
                    (DiscreteCondDistribution)condList[seltdDim];

                /*if (currDist.GetDimensionName() == "HouseholdSize2")
                {
                    newAgent = (Person) currImpSampler.GetNextAgent(
                                currZone.myHhldSize2Marginal,
                                currDist, currDist.GetDimensionName(),
                                (SimulationObject) prevAgent, currZone);
                }
                else if (currDist.GetDimensionName() == "Age")
                {
                    newAgent = (Person)currImpSampler.GetNextAgent(
                                currZone.myAgeMarginal,
                                currDist, currDist.GetDimensionName(),
                                (SimulationObject)prevAgent, currZone);
                }
                else*/
                if(currDist.GetDimensionName() == "Sex")
                {
                    newAgent = (Person)currImpSampler.GetNextAgent(
                                currZone.mySexMarginal,
                                currDist, currDist.GetDimensionName(),
                                (SimulationObject)prevAgent, currZone);
                }
                /*else if (currDist.GetDimensionName() == "EducationLevel")
                {
                    newAgent = (Person)currImpSampler.GetNextAgent(
                                currZone.myEducationMarginal,
                                currDist, currDist.GetDimensionName(),
                                (SimulationObject)prevAgent, currZone);
                }*/
                else
                {
                    List<KeyValPair> currComm = currDist.GetCommulativeValue(
                         prevAgent.GetNewJointKey(currDist.GetDimensionName())
                            , currZone);
                    newAgent = (Person)GenerateNextAgent(currComm,
                            (SimulationObject)prevAgent,
                            currDist.GetDimensionName());
                }

                prevAgent = newAgent;
                if(warmUpStatus == false && (i % Constants.SKIP_ITERATIONS == 0))
                {
                    //generatedAgents.Add(newAgent);
                    builder.Append((int)newAgent.GetAge()); builder.Append(',');
                    builder.Append(newAgent.GetZoneID()); builder.Append(',');
                    builder.Append((int)newAgent.GetSex()); builder.Append(',');
                    builder.Append((int)newAgent.GetHhldSize()); builder.Append(',');
                    builder.Append((int)newAgent.GetEducationLevel());
                    currWriter.WriteToFile(builder.ToString());
                    builder.Clear();
                }
            }
            return generatedAgents;
        }
Example #2
0
        private List<double> GetUtilityValuesForAge(Person person)
        {
            var currValues = new List<double>(11);

            currValues.Add(1);

            int twoAdultsChildren = Convert.ToInt32(person.GetHhld().GetHhldSize() == HouseholdSize.TwoAdultsChildren);
            int oneCar = Convert.ToInt32(person.GetHhld().GetNumOfCars() == NumOfCars.OneCar);
            int twoCars = Convert.ToInt32(person.GetHhld().GetNumOfCars() == NumOfCars.TwoCars);
            int female = Convert.ToInt32(person.GetSex() == Sex.Female);
            int threePlusCars = Convert.ToInt32(person.GetHhld().GetNumOfCars() == NumOfCars.ThreeOrMore);

            currValues.Add(Math.Exp(-0.591 * 1.00 + -4.20 * twoAdultsChildren + 0.235 * oneCar + 0.271 * twoCars + -0.268 * threePlusCars
                + 0.153 * female));

            int twoAdults = Convert.ToInt32(person.GetHhld().GetHhldSize() == HouseholdSize.Twoadults);
            int manConst = Convert.ToInt32(person.GetOccupation() == Occupation.Construction);

            currValues.Add(Math.Exp(-0.916 * 1.00 + 1.27 * twoAdults + -4.87 * twoAdultsChildren + 0.227 * oneCar + 0.214 * twoCars
                + -0.138 * threePlusCars + 0.945 * manConst + 0.159 * female));

            int eNE = Convert.ToInt32(person.GetEmploymentStatus() == EmploymentStatus.Unemployed);

            currValues.Add(Math.Exp(2.92 * 1.00 + 1.44 * twoAdults + -5.21 * twoAdultsChildren + 0.152 * oneCar
                + 0.0860 * twoCars + -3.99 * eNE + -1.63 * manConst + 0.271 * female));

            int oneAdultChildren = Convert.ToInt32(person.GetHhld().GetHhldSize() == HouseholdSize.OneAdultOneChild);

            currValues.Add(Math.Exp(5.51 * 1.00 + -2.57 * oneAdultChildren + 2.31 * twoAdults + -4.19 * twoAdultsChildren
                + -0.598 * oneCar + -0.934 * twoCars + -0.106 * threePlusCars + -5.60 * eNE + 0.508 * female));

            int homeFT = Convert.ToInt32(person.GetEmploymentStatus() == EmploymentStatus.FullTimeHome);

            currValues.Add(Math.Exp(4.90 * 1.00 + -0.750 * oneAdultChildren + 3.72 * twoAdults + -1.45 * twoAdultsChildren
                + -0.880 * oneCar + -1.28 * twoCars + -0.309 * threePlusCars + 1.33 * homeFT + -6.66 * eNE
                + 0.381 * manConst + 0.950 * female));

            currValues.Add(Math.Exp(5.58 * 1.00 + -0.350 * oneAdultChildren + 3.55 * twoAdults + -0.381 * twoAdultsChildren
                + -0.706 * oneCar + -1.21 * twoCars + -1.10 * threePlusCars + 1.79 * homeFT + -6.91 * eNE
                + 0.476 * manConst + 1.14 * female));

            currValues.Add(Math.Exp(6.40 * 1.00 + -1.48 * oneAdultChildren + 3.13 * twoAdults + -1.98 * twoAdultsChildren
                + -0.639 * oneCar + -1.09 * twoCars + -1.17 * threePlusCars + 1.97 * homeFT + -7.04 * eNE
                + 0.567 * manConst + 0.978 * female));

            currValues.Add(Math.Exp(5.42 * 1.00 + -2.80 * oneAdultChildren + 3.71 * twoAdults + -3.73 * twoAdultsChildren
                + -0.796 * oneCar + -1.20 * twoCars + -0.655 * threePlusCars + 2.05 * homeFT + -6.74 * eNE
                + 0.600 * manConst + 0.891 * female));

            currValues.Add(Math.Exp(5.70 * 1.00 + -4.1 * oneAdultChildren + 4.44 * twoAdults + -4.58 * twoAdultsChildren
                + -0.717 * oneCar + -1.09 * twoCars + -0.424 * threePlusCars + 2.17 * homeFT + -5.83 * eNE
                + 0.496 * manConst + 0.813 * female));

            currValues.Add(Math.Exp(4.85 * 1.00 + -5.75 * oneAdultChildren + 4.80 * twoAdults + -5.69 * twoAdultsChildren
                + -0.902 * oneCar + -1.75 * twoCars + -1.44 * threePlusCars + 2.23 * homeFT + -3.44 * eNE
                + 0.513 * female));

            return currValues;
        }
Example #3
0
        private List<double> GetUtilityValuesForEmploymentStatus(Person person)
        {
            var currValues = new List<double>(5);

            currValues.Add(1);

            int twoAdultsChildren = Convert.ToInt32(person.GetHhld().GetHhldSize() == HouseholdSize.TwoAdultsChildren);
            int twoPlusAdults = Convert.ToInt32(person.GetHhld().GetHhldSize() == HouseholdSize.Twoadults
                || person.GetHhld().GetHhldSize() == HouseholdSize.ThreeOrMoreAdults);
            int threePlusCars = Convert.ToInt32(person.GetHhld().GetNumOfCars() == NumOfCars.ThreeOrMore);
            int lNo = Convert.ToInt32(person.GetDrivingLicense() == DrivingLicense.No);
            int apart = Convert.ToInt32(person.GetHhld().GetDwellingType() == DwellingType.Apartment);
            int town = Convert.ToInt32(person.GetHhld().GetDwellingType() == DwellingType.Townhouse);
            int profMan = Convert.ToInt32(person.GetOccupation() == Occupation.TradesProfessional);
            int retail = Convert.ToInt32(person.GetOccupation() == Occupation.TechnicalRetailSalesServiceNotEmployedUnknown);

            int eighteen = Convert.ToInt32(person.GetAge() == Age.EighteenToTwentyFive);
            int twentysix = Convert.ToInt32(person.GetAge() == Age.TwentySixToThirty);
            int thirtyone = Convert.ToInt32(person.GetAge() == Age.ThirtyOneToForty);
            int female = Convert.ToInt32(person.GetSex() == Sex.Female);
            int twoAdults = Convert.ToInt32(person.GetHhld().GetHhldSize() == HouseholdSize.Twoadults);
            int oneCar = Convert.ToInt32(person.GetHhld().GetNumOfCars() == NumOfCars.OneCar);
            int twoPlusAdultsChildren = Convert.ToInt32(person.GetHhld().GetHhldSize() == HouseholdSize.TwoAdultsChildren
                || person.GetHhld().GetHhldSize() == HouseholdSize.ThreeOrMoreAdultsChildren);

            currValues.Add(Math.Exp(-2.34 * 1.00 - 0.122 * twoAdults + -0.335 * twoAdultsChildren + -0.453 * twoPlusAdults + -0.248 * twoPlusAdultsChildren
                + -0.236 * apart + -0.323 * town + 0.104 * oneCar + 0.126 * threePlusCars + 0.522 * profMan + 0.802 * retail
                + -1.32 * eighteen + -0.711 * twentysix + -0.325 * thirtyone + -0.252 * female + 0.247 * lNo));

            int manConst = Convert.ToInt32(person.GetOccupation() == Occupation.Construction);
            int eleven = Convert.ToInt32(person.GetAge() == Age.ElevenToThirteen);
            int fiftyone = Convert.ToInt32(person.GetAge() == Age.FiftyOneToFiftyFour);
            int sixteen = Convert.ToInt32(person.GetAge() == Age.SixteenToSeventeen);

            currValues.Add(Math.Exp(-3.25 * 1.00 + -0.430 * twoAdultsChildren + -0.573 * twoPlusAdults + -0.456 * twoPlusAdultsChildren
                + -0.249 * town + 0.0881 * oneCar + -0.757 * manConst + 0.204 * profMan + 0.351 * retail + 8.78 * eleven + 3.50 * sixteen
                + -0.367 * eighteen + -1.06 * twentysix + -0.865 * thirtyone + -0.508 * fiftyone + 0.542 * female));

            int fourteen = Convert.ToInt32(person.GetAge() == Age.FourteenToFifteen);

            currValues.Add(Math.Exp(2.01 * 1.00 + -0.689 * twoPlusAdults + -0.0915 * twoPlusAdultsChildren + 0.0922 * apart
                + -0.240 * town + 0.398 * oneCar + -0.126 * threePlusCars + -17.7 * manConst + -17.9 * profMan + 14.6 * eleven
                + 5.15 * fourteen + 6.33 * sixteen + 0.646 * eighteen + -1.15 * twentysix + -1.45 * thirtyone + -1.31 * fiftyone
                + -0.280 * female + 2.15 * lNo + -19.6 * retail));

            currValues.Add(Math.Exp(-2.69 * 1.00 + 0.116 * twoAdults + -0.232 * twoAdultsChildren + 0.0514 * twoPlusAdults + 0.188 * apart
                + -0.103 * town + 0.0953 * oneCar + -0.164 * threePlusCars + -0.194 * manConst + 0.0903 * profMan + 0.914 * retail
                + 3.93 * fourteen + 5.99 * sixteen + 1.74 * eighteen + -0.317 * thirtyone + -0.392 * fiftyone + 0.853 * female
                + 0.462 * lNo + 7.15 * eleven));

            return currValues;
        }
        private void updateCounts(Person person)
        {
            {
                switch (person.GetAge())
                {
                    case (Age.LessThanEleven):
                        {
                            count_less11++;
                            break;
                        }
                    case (Age.ElevenToThirteen):
                        {
                            count_11++;
                            break;
                        }
                    case (Age.FourteenToFifteen):
                        {
                            count_14++;
                            break;
                        }
                    case (Age.SixteenToSeventeen):
                        {
                            count_16++;
                            break;
                        }
                    case (Age.EighteenToTwentyFive):
                        {
                            count_18++;
                            break;
                        }
                    case (Age.TwentySixToThirty):
                        {
                            count_26++;
                            break;
                        }
                    case (Age.ThirtyOneToForty):
                        {
                            count_31++;
                            break;
                        }
                    case (Age.FortyOneToFifty):
                        {
                            count_41++;
                            break;
                        }
                    case (Age.FiftyOneToFiftyFour):
                        {
                            count_51++;
                            break;
                        }
                    case (Age.FiftyfiveToSixtyFour):
                        {
                            count_55++;
                            break;
                        }
                    case (Age.MoreThanSixtyFive):
                        {
                            count_65++;
                            break;
                        }
                    default:
                        break;
                }
                switch (person.GetEmploymentStatus())
                {
                    case (EmploymentStatus.PartTime):
                        count_part_time++;
                        break;
                    case (EmploymentStatus.FullTimeHome):
                        count_full_time_home++;
                        break;
                    case (EmploymentStatus.FullTime):
                        count_full_time++;
                        break;
                    case (EmploymentStatus.PartTimeHome):
                        count_part_time_home++;
                        break;
                    case (EmploymentStatus.Unemployed):
                        count_unemployed++;
                        break;
                    default:
                        break;
                }
                switch (person.GetSex())
                {
                    case (Sex.Male):
                        count_male++;
                        break;
                    case (Sex.Female):
                        count_female++;
                        break;
                    default:
                        break;
                }
                switch (person.GetDrivingLicense())
                {
                    case (DrivingLicense.Yes):
                        count_driving_license_yes++;
                        break;
                    case (DrivingLicense.No):
                        count_driving_license_no++;
                        break;
                    default:
                        break;

                }
                switch (person.GetOccupation())
                {
                    case (Occupation.GeneralOffice):
                        {
                            count_general_office++;
                            break;
                        }
                    case (Occupation.ClericalManufacturing):
                        {
                            count_clerical_manufacturing++;
                            break;
                        }
                    case (Occupation.TradesProfessional):
                        {
                            count_professional_man++;
                            break;
                        }
                    case (Occupation.TechnicalRetailSalesServiceNotEmployedUnknown):
                        {
                            count_retail++;
                            break;
                        }
                    case (Occupation.Construction):
                        {
                            count_costruction_man++;
                            break;
                        }
                }
            }
        }