private List<double> GetUtilityValuesForSex(Person person)
        {
            var currValues = new List<double>(2);

            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 twoPlusAdultsChildren = Convert.ToInt32(person.GetHhld().GetHhldSize() == HouseholdSize.TwoAdultsChildren
                || person.GetHhld().GetHhldSize() == HouseholdSize.ThreeOrMoreAdultsChildren);
            int threePlusCars = Convert.ToInt32(person.GetHhld().GetNumOfCars() == NumOfCars.ThreeOrMore);
            int lNo = Convert.ToInt32(person.GetDrivingLicense() == DrivingLicense.No);
            int homeFT = Convert.ToInt32(person.GetEmploymentStatus() == EmploymentStatus.FullTimeHome);
            int homePT = Convert.ToInt32(person.GetEmploymentStatus() == EmploymentStatus.PartTimeHome);
            int PT = Convert.ToInt32(person.GetEmploymentStatus() == EmploymentStatus.PartTime);
            int town = Convert.ToInt32(person.GetHhld().GetDwellingType() == DwellingType.Townhouse);
            int manConst = Convert.ToInt32(person.GetOccupation() == Occupation.Construction);
            int profMan = Convert.ToInt32(person.GetOccupation() == Occupation.TradesProfessional);
            int retail = Convert.ToInt32(person.GetOccupation() == Occupation.TechnicalRetailSalesServiceNotEmployedUnknown);
            int oNE = Convert.ToInt32(person.GetEmploymentStatus() == EmploymentStatus.Unemployed);
            int eleven = Convert.ToInt32(person.GetAge() == Age.ElevenToThirteen);
            int sixteen = Convert.ToInt32(person.GetAge() == Age.SixteenToSeventeen);
            int eighteen = Convert.ToInt32(person.GetAge() == Age.EighteenToTwentyFive);
            int twentysix = Convert.ToInt32(person.GetAge() == Age.TwentySixToThirty);
            int fortyone = Convert.ToInt32(person.GetAge() == Age.FortyOneToFifty);
            int fiftyone = Convert.ToInt32(person.GetAge() == Age.FiftyOneToFiftyFour);
            int fiftyfive = Convert.ToInt32(person.GetAge() == Age.FiftyfiveToSixtyFour);
            int sixtyfivePlus = Convert.ToInt32(person.GetAge() == Age.MoreThanSixtyFive);

            currValues.Add(Math.Exp(0.436 * 1.00 + -0.261 * twoAdultsChildren + -0.174 * twoPlusAdults
                + -0.222 * twoPlusAdultsChildren + 0.0472 * threePlusCars + 0.443 * lNo + -0.267 * homeFT
                + 0.530 * homePT + 0.900 * PT + 0.0508 * town + -2.33 * manConst + -0.733 * profMan
                + -0.824 * retail + -0.329 * oNE + -0.451 * eleven + -0.354 * sixteen + -0.154 * eighteen
                + 0.371 * twentysix + 0.428 * fortyone + 0.326 * fiftyone + 0.216 * fiftyfive + -0.0818 * sixtyfivePlus));

            return currValues;
        }
        private List<double> GetUtilityValuesForOccupation(Person person, SpatialZone curZ)
        {
            var currValues = new List<double>(5);

            currValues.Add(1);

            int twoAdultsChildren = Convert.ToInt32(person.GetHhld().GetHhldSize() == HouseholdSize.TwoAdultsChildren);
            int twoPlusAdultsChildren = Convert.ToInt32(person.GetHhld().GetHhldSize() == HouseholdSize.TwoAdultsChildren
                || person.GetHhld().GetHhldSize() == HouseholdSize.ThreeOrMoreAdultsChildren);
            int homeFT = Convert.ToInt32(person.GetEmploymentStatus() == EmploymentStatus.FullTimeHome);
            int homePT = Convert.ToInt32(person.GetEmploymentStatus() == EmploymentStatus.PartTimeHome);
            int PT = Convert.ToInt32(person.GetEmploymentStatus() == EmploymentStatus.PartTime);
            int apart = Convert.ToInt32(person.GetHhld().GetDwellingType() == DwellingType.Apartment);
            int eighteen = Convert.ToInt32(person.GetAge() == Age.EighteenToTwentyFive);
            int twentysix = Convert.ToInt32(person.GetAge() == Age.TwentySixToThirty);
            int fortyone = Convert.ToInt32(person.GetAge() == Age.FortyOneToFifty);
            int fiftyone = Convert.ToInt32(person.GetAge() == Age.FiftyOneToFiftyFour);
            int fiftyfive = Convert.ToInt32(person.GetAge() == Age.FiftyfiveToSixtyFour);
            int thirtyone = Convert.ToInt32(person.GetAge() == Age.ThirtyOneToForty);
            int threePlusCars = Convert.ToInt32(person.GetHhld().GetNumOfCars() == NumOfCars.ThreeOrMore);

            double z_manConst = curZ.GetPersonOccuMarginal().GetValue("1");

            int oneAdultChildren = Convert.ToInt32(person.GetHhld().GetHhldSize() == HouseholdSize.OneAdultOneChild);
            int twoAdults = Convert.ToInt32(person.GetHhld().GetHhldSize() == HouseholdSize.Twoadults);
            int twoPlusAdults = Convert.ToInt32(person.GetHhld().GetHhldSize() == HouseholdSize.ThreeOrMoreAdults
                || person.GetHhld().GetHhldSize() == HouseholdSize.Twoadults);
            int oneCar = Convert.ToInt32(person.GetHhld().GetNumOfCars() == NumOfCars.OneCar);
            int twoCars = Convert.ToInt32(person.GetHhld().GetNumOfCars() == NumOfCars.TwoCars);

            currValues.Add(Math.Exp(-1.95 * 1.00 + -0.746 * oneAdultChildren + 0.280 * twoAdults + 0.594 * twoAdultsChildren
                + 0.556 * twoPlusAdults + 0.827 * twoPlusAdultsChildren + 0.247 * apart + 0.0751 * oneCar + 0.0867 * threePlusCars
                + 2.13 * homeFT + 0.237 * homePT + 0.841 * PT + -0.106 * eighteen + -0.123 * twentysix + -0.137 * thirtyone
                + 0.145 * fiftyone + 0.140 * fiftyfive + 16.1 * z_manConst));

            int town = Convert.ToInt32(person.GetHhld().GetDwellingType() == DwellingType.Townhouse);
            int fourteen = Convert.ToInt32(person.GetAge() == Age.FourteenToFifteen);
            int sixteen = Convert.ToInt32(person.GetAge() == Age.SixteenToSeventeen);
            int sixtyfivePlus = Convert.ToInt32(person.GetAge() == Age.MoreThanSixtyFive);

            double z_profMan = curZ.GetPersonOccuMarginal().GetValue("2");

            currValues.Add(Math.Exp(-0.648 * 1.00 + -0.0753 * twoAdults + 0.121 * twoAdultsChildren + -0.243 * twoPlusAdults
                + -0.110 * twoPlusAdultsChildren + -0.265 * apart + -0.147 * town + 0.271 * oneCar + 0.337 * twoCars + 0.303 * threePlusCars
                + 2.31 * homeFT + -1.02 * fourteen + -0.866 * sixteen + -0.389 * eighteen + 0.0738 * thirtyone + 0.229 * sixtyfivePlus
                + 7.22 * z_profMan));

            int eleven = Convert.ToInt32(person.GetAge() == Age.ElevenToThirteen);
            double z_retail = curZ.GetPersonOccuMarginal().GetValue("3");

            currValues.Add(Math.Exp(-1.05 * 1.00 + 0.308 * oneAdultChildren + 0.205 * twoAdults + 0.479 * twoAdultsChildren + 0.379 * twoPlusAdults
                + 0.781 * twoPlusAdultsChildren + 0.220 * apart + 0.108 * town + -0.152 * oneCar + -0.245 * twoCars + -0.27 * threePlusCars
                + 2.85 * homeFT + 1.48 * homePT + 2.30 * PT + 3.90 * eleven + 2.20 * fourteen + 2.22 * sixteen + 0.507 * eighteen
                + 0.160 * twentysix + 0.0563 * fiftyone + 0.129 * fiftyfive + 0.398 * sixtyfivePlus + 6.32 * z_retail));

            double z_oNE = curZ.GetPersonOccuMarginal().GetValue("4");

            currValues.Add(Math.Exp(0.743 * 1.00 + 2.37 * oneAdultChildren + 0.298 * twoAdults + 2.47 * twoAdultsChildren + 0.437 * twoPlusAdults
                + 2.12 * twoPlusAdultsChildren + 0.114 * apart + -0.0672 * town + -0.63 * oneCar + -1.08 * twoCars + -1.33 * threePlusCars
                + 8.71 * eleven + 5.34 * fourteen + 3.87 * sixteen + 0.969 * eighteen + -0.842 * twentysix + -1.70 * thirtyone
                + -0.528 * fiftyone + 0.517 * fiftyfive + 3.08 * sixtyfivePlus + 0.854 * z_oNE));

            return currValues;
        }
        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;
        }
        private List<double> GetUtilityValuesForDriverLicense(Person person)
        {
            var currValues = new List<double>(2);

            currValues.Add(1);

            int twoAdultsChildren = Convert.ToInt32(person.GetHhld().GetHhldSize() == HouseholdSize.TwoAdultsChildren);
            int twoPlusAdultsChildren = Convert.ToInt32(person.GetHhld().GetHhldSize() == HouseholdSize.TwoAdultsChildren
                || person.GetHhld().GetHhldSize() == HouseholdSize.ThreeOrMoreAdultsChildren);
            int homeFT = Convert.ToInt32(person.GetEmploymentStatus() == EmploymentStatus.FullTimeHome);
            int homePT = Convert.ToInt32(person.GetEmploymentStatus() == EmploymentStatus.PartTimeHome);
            int PT = Convert.ToInt32(person.GetEmploymentStatus() == EmploymentStatus.PartTime);
            int apart = Convert.ToInt32(person.GetHhld().GetDwellingType() == DwellingType.Apartment);
            int manConst = Convert.ToInt32(person.GetOccupation() == Occupation.Construction);
            int retail = Convert.ToInt32(person.GetOccupation() == Occupation.TechnicalRetailSalesServiceNotEmployedUnknown);
            int sixteen = Convert.ToInt32(person.GetAge() == Age.SixteenToSeventeen);
            int eighteen = Convert.ToInt32(person.GetAge() == Age.EighteenToTwentyFive);
            int twentysix = Convert.ToInt32(person.GetAge() == Age.TwentySixToThirty);
            int fortyone = Convert.ToInt32(person.GetAge() == Age.FortyOneToFifty);

            int oneAdultChildren = Convert.ToInt32(person.GetHhld().GetHhldSize() == HouseholdSize.OneAdultOneChild);
            int twoAdults = Convert.ToInt32(person.GetHhld().GetHhldSize() == HouseholdSize.Twoadults);
            int twoPlusAdults = Convert.ToInt32(person.GetHhld().GetHhldSize() == HouseholdSize.ThreeOrMoreAdults
                || person.GetHhld().GetHhldSize() == HouseholdSize.Twoadults);
            int oneCar = Convert.ToInt32(person.GetHhld().GetNumOfCars() == NumOfCars.OneCar);
            int twoCars = Convert.ToInt32(person.GetHhld().GetNumOfCars() == NumOfCars.TwoCars);

            currValues.Add(Math.Exp(-0.833 * 1.00 + 2.17 * oneAdultChildren + -0.103 * twoAdults + 1.85 * twoAdultsChildren
                + 1.02 * twoPlusAdults + 2.17 * twoPlusAdultsChildren + 0.693 * apart + -0.392 * oneCar + -0.743 * twoCars
                + -1.35 * homeFT + -1.26 * homePT + -0.220 * PT + -1.95 * manConst + -1.22 * retail + 0.811 * sixteen
                + -0.621 * eighteen + -1.52 * twentysix + -1.80 * fortyone));

            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;
                        }
                }
            }
        }