private List<double> GetUtilityValuesForNumberOfVehicles(
      HouseholdPersonComposite composite,SpatialZone curZ)
        {
            Household hhld = composite.getHousehold().CreateNewCopy();
            //String key = hhld.GetNewJointKey(GetDimensionName());
            //string[] curKeys = key.Split(Constants.CONDITIONAL_DELIMITER[0]);
            var currValues = new List<double>(4);
            int myNumOfCars = (int) hhld.GetNumOfCars();
            int dwellType = (int) hhld.GetDwellingType();
            int hhldSize = (int) hhld.GetHhldSize();

            currValues.Add(1);

            int apart = Convert.ToInt32(dwellType== 1);
            int town = Convert.ToInt32(dwellType == 2);

            double z_oneCar = curZ.GetCarMarginal().GetValue("1");

            int oneAdult = Convert.ToInt32(hhldSize == 0);
            int twoAdults = Convert.ToInt32(hhldSize == 2);
            int twoAdultsChildren = Convert.ToInt32(hhldSize == 3);
            int twoPlusAdults = Convert.ToInt32(hhldSize == 2 || hhldSize == 4);
            int h_lYes_1 = Convert.ToInt32(composite.Count_driving_license_yes == 1);
            int h_lYes_2 = Convert.ToInt32(composite.Count_driving_license_yes == 2);
            int h_lYes_3 = Convert.ToInt32(composite.Count_driving_license_yes == 3);
            int h_lNo_1 = Convert.ToInt32(composite.Count_driving_license_no == 1);
            int h_lNo_2 = Convert.ToInt32(composite.Count_driving_license_no == 2);
            int h_lNo_3 = Convert.ToInt32(composite.Count_driving_license_no == 3);
            int h_lNo_4Plus = Convert.ToInt32(composite.Count_driving_license_no >= 4);
            int h_FT_1 = Convert.ToInt32(composite.Count_full_time == 1);
            int h_FT_2 = Convert.ToInt32(composite.Count_full_time == 2);
            int h_FT_3Plus = Convert.ToInt32(composite.Count_full_time >= 3);
            int h_homeFT_1Plus = Convert.ToInt32(composite.Count_full_time_home >= 1);
            int h_homePT_1Plus = Convert.ToInt32(composite.Count_full_time_home >= 1);
            int h_eNE_1 = Convert.ToInt32(composite.Count_unemployed == 1);
            int h_eNE_2 = Convert.ToInt32(composite.Count_unemployed == 2);
            int h_eNE_3 = Convert.ToInt32(composite.Count_unemployed == 3);
            int h_eNE_4Plus = Convert.ToInt32(composite.Count_unemployed >= 4);
            int h_PT_1 = Convert.ToInt32(composite.Count_part_time == 1);
            int h_officeCler_1 = Convert.ToInt32(composite.Count_clerical_manufacturing == 1);
            int h_manConst_1 = Convert.ToInt32(composite.Count_costruction_man == 1);
            int h_manConst_2Plus = Convert.ToInt32(composite.Count_costruction_man >= 2);
            int h_profMan_1 = Convert.ToInt32(composite.Count_professional_man == 1);
            int h_profMan_2Plus = Convert.ToInt32(composite.Count_professional_man >= 2);
            int h_retail_1 = Convert.ToInt32(composite.Count_retail == 1);
            int h_retail_2 = Convert.ToInt32(composite.Count_retail == 2);
            int h_retail_3Plus = Convert.ToInt32(composite.Count_retail >= 3);
            int h_zero_1 = Convert.ToInt32(composite.Count_less11 == 1);
            int h_zero_2 = Convert.ToInt32(composite.Count_less11 == 2);
            int h_zero_3 = Convert.ToInt32(composite.Count_less11 == 3);
            int h_eleven_1Plus = Convert.ToInt32(composite.Count_11 >= 1);
            int h_fourteen_1Plus = Convert.ToInt32(composite.Count_14 >= 1);
            int h_sixteen_1Plus = Convert.ToInt32(composite.Count_16 >= 1);
            int h_eighteen_1 = Convert.ToInt32(composite.Count_18 == 1);
            int h_eighteen_2Plus = Convert.ToInt32(composite.Count_18 >= 2);
            int h_twentysix_1 = Convert.ToInt32(composite.Count_26 == 1);
            int h_twentysix_2Plus = Convert.ToInt32(composite.Count_26 >= 2);
            int h_thirtyone_1 = Convert.ToInt32(composite.Count_31 == 1);
            int h_thirtyone_2Plus = Convert.ToInt32(composite.Count_31 >= 2);
            int h_fortyone_1 = Convert.ToInt32(composite.Count_41 == 1);
            int h_fortyone_2Plus = Convert.ToInt32(composite.Count_41 >= 2);
            int h_fiftyone_1 = Convert.ToInt32(composite.Count_51 == 1);
            int h_fiftyone_2Plus = Convert.ToInt32(composite.Count_51 >= 2);
            int h_fiftyfive_1 = Convert.ToInt32(composite.Count_55 == 1);
            int h_fiftyfive_2Plus = Convert.ToInt32(composite.Count_55 >= 2);
            int h_sixtyfivePlus_1 = Convert.ToInt32(composite.Count_65 >= 1);
            int h_sixtyfivePlus_2Plus = Convert.ToInt32(composite.Count_65 >= 2);
            int h_male_1 = Convert.ToInt32(composite.Count_male == 1);
            int h_male_3 = Convert.ToInt32(composite.Count_male == 3);
            int h_female_2 = Convert.ToInt32(composite.Count_female == 2);

            currValues.Add(Math.Exp(2.48 * 1.00 + -1.19 * apart + -0.185 * town
                + -2.28 * z_oneCar + -4.09 * oneAdult + -4.25 * twoAdults + 0.197 * twoAdultsChildren
                + -4.08 * twoPlusAdults + 3.25 * h_lYes_1 + 3.00 * h_lYes_2 + 2.27 * h_lYes_3
                + -1.40 * h_lNo_1 + -2.88 * h_lNo_2 + -3.97 * h_lNo_3 + -5.66 * h_lNo_4Plus
                + 0.583 * h_FT_1 + 0.985 * h_FT_2 + 1.17 * h_FT_3Plus + 0.571 * h_homeFT_1Plus
                + 0.257 * h_homePT_1Plus + 0.468 * h_eNE_1 + 1.03 * h_eNE_2 + 1.40 * h_eNE_3
                + 1.81 * h_eNE_4Plus + 0.125 * h_PT_1 + 0.251 * h_officeCler_1 + 0.655 * h_manConst_1
                + 0.891 * h_manConst_2Plus + 0.440 * h_profMan_1 + 0.400 * h_profMan_2Plus
                + 0.368 * h_retail_1 + 0.560 * h_retail_2 + 1.28 * h_retail_3Plus
                + -3.05 * h_zero_1 + -1.84 * h_zero_2 + -1.07 * h_zero_3 + 1.16 * h_eleven_1Plus
                + 1.21 * h_fourteen_1Plus + 1.09 * h_sixteen_1Plus + 0.505 * h_eighteen_1
                + 0.973 * h_eighteen_2Plus + 0.328 * h_twentysix_1 + 0.915 * h_twentysix_2Plus
                + 0.564 * h_thirtyone_1 + 1.16 * h_thirtyone_2Plus
                + 0.664 * h_fortyone_1 + 1.46 * h_fortyone_2Plus + 0.754 * h_fiftyone_1
                + 1.66 * h_fiftyone_2Plus + 0.855 * h_fiftyfive_1 + 2.11 * h_fiftyfive_2Plus
                + 1.25 * h_sixtyfivePlus_1 + 2.63 * h_sixtyfivePlus_2Plus + 0.0863 * h_male_1
                + 0.200 * h_male_3 + -0.127 * h_female_2));

            double z_twoCars = curZ.GetCarMarginal().GetValue("2");

            int oneAdultChildren = Convert.ToInt32(hhldSize == 3);
            int h_male_2 = Convert.ToInt32(composite.Count_male == 2);
            int h_male_4Plus = Convert.ToInt32(composite.Count_male >= 4);
            int h_female_3 = Convert.ToInt32(composite.Count_female == 3);
            int h_female_4Plus = Convert.ToInt32(composite.Count_female >= 4);

            currValues.Add(Math.Exp(-0.577 * 1.00 + -2.39 * apart + -0.858 * town + 5.45 * z_twoCars
                + -5.05 * oneAdult + 0.460 * oneAdultChildren + -5.13 * twoAdults + 0.308 * twoAdultsChildren
                + -4.94 * twoPlusAdults + 1.28 * h_lYes_1 + 3.11 * h_lYes_2 + 2.49 * h_lYes_3
                + -2.06 * h_lNo_1 + -4.02 * h_lNo_2 + -5.62 * h_lNo_3 + -7.96 * h_lNo_4Plus
                + 1.09 * h_FT_1 + 1.91 * h_FT_2 + 1.93 * h_FT_3Plus + 0.898 * h_homeFT_1Plus
                +0.501 * h_homePT_1Plus + 0.450 * h_eNE_1 + 0.891 * h_eNE_2 + 1.26 * h_eNE_3
                + 1.51 * h_eNE_4Plus + 0.268 * h_PT_1 + 0.289 * h_officeCler_1 + 0.883 * h_manConst_1
                + 0.965 * h_manConst_2Plus + 0.652 * h_profMan_1 + 0.621 * h_profMan_2Plus
                + 0.512 * h_retail_1 + 0.736 * h_retail_2 + 1.32 * h_retail_3Plus + -3.76 * h_zero_1
                + -2.26 * h_zero_2 + -1.38 * h_zero_3 + 1.45 * h_eleven_1Plus + 1.40 * h_fourteen_1Plus
                + 0.935 * h_sixteen_1Plus + 0.163 * h_eighteen_1 + 0.433 * h_eighteen_2Plus
                + 0.281 * h_twentysix_1 + 0.870 * h_twentysix_2Plus + 0.480 * h_thirtyone_1
                + 1.15 * h_thirtyone_2Plus + 0.702 * h_fortyone_1 + 1.71 * h_fortyone_2Plus
                + 0.961 * h_fiftyone_1 + 2.11 * h_fiftyone_2Plus + 1.15 * h_fiftyfive_1
                + 2.68 * h_fiftyfive_2Plus + 1.45 * h_sixtyfivePlus_1 + 2.97 * h_sixtyfivePlus_2Plus
                + 0.900 * h_male_1 + 1.21 * h_male_2 + 1.85 * h_male_3 + 2.28 * h_male_4Plus
                + 0.328 * h_female_2 + 0.817 * h_female_3 + 1.35 * h_female_4Plus));

            double z_threePlusCars = curZ.GetCarMarginal().GetValue("3");

            currValues.Add(Math.Exp(-1.19 * 1.00 + -3.18 * apart + -1.55 * town + 15.2 * z_threePlusCars
                + -5.01 * oneAdult + -5.35 * twoAdults + -4.90 * twoPlusAdults + 1.09 * h_lYes_2
                + 1.93 * h_lYes_3 + -2.52 * h_lNo_1 + -4.78 * h_lNo_2 + -6.69 * h_lNo_3
                + -9.39 * h_lNo_4Plus + 1.18 * h_FT_1 + 2.15 * h_FT_2 + 2.67 * h_FT_3Plus + 1.18 * h_homeFT_1Plus
                + 0.669 * h_homePT_1Plus + 0.239 * h_eNE_1 + 0.537 * h_eNE_2 + 0.877 * h_eNE_3
                + 1.10 * h_eNE_4Plus + 0.250 * h_PT_1 + 0.312 * h_officeCler_1 + 1.02 * h_manConst_1
                + 1.10 * h_manConst_2Plus + 0.790 * h_profMan_1 + 0.769 * h_profMan_2Plus
                + 0.539 * h_retail_1 + 0.786 * h_retail_2 + 1.37 * h_retail_3Plus + -3.64 * h_zero_1
                + -2.18 * h_zero_2 + -1.16 * h_zero_3 + 1.28 * h_eleven_1Plus + 1.32 * h_fourteen_1Plus
                + 0.303 * h_sixteen_1Plus + 0.343 * h_twentysix_1 + 0.841 * h_twentysix_2Plus
                + 0.572 * h_thirtyone_1 + 1.27 * h_thirtyone_2Plus + 0.857 * h_fortyone_1 + 2.16 * h_fortyone_2Plus
                + 1.31 * h_fiftyone_1 + 2.87 * h_fiftyone_2Plus + 1.46 * h_fiftyfive_1
                + 3.36 * h_fiftyfive_2Plus + 1.70 * h_sixtyfivePlus_1 + 3.34 * 2.63 + 1.46 * h_male_1
                + 2.04 * h_male_2 + 3.00 * h_male_3 + 4.02 * h_male_4Plus + 0.594 * h_female_2
                + 1.45 * h_female_3 + 2.39 * h_female_4Plus));

            return currValues;
        }
        private List<double> GetUtilityValuesForPublicTransitPass(
                 HouseholdPersonComposite composite)
        {
            Household hhld = composite.getHousehold().CreateNewCopy();
            //String key = hhld.GetNewJointKey(GetDimensionName());
            //string[] curKeys = key.Split(Constants.CONDITIONAL_DELIMITER[0]);
            var currValues = new List<double>(6);
            int myNumOfCars = (int) hhld.GetNumOfCars();
            int dwellType = (int) hhld.GetDwellingType();
            int hhldSize = (int) hhld.GetHhldSize();

            currValues.Add(1);

            int oneCar = Convert.ToInt32(myNumOfCars == 1);
            int twoCars = Convert.ToInt32(myNumOfCars == 2);
            int threePlusCars = Convert.ToInt32(myNumOfCars >= 3);
            int oneAdult = Convert.ToInt32(hhldSize == 3);
            int oneAdultChildren = Convert.ToInt32(hhldSize == 1);
            int twoAdults = Convert.ToInt32(hhldSize == 2);
            int h_twentysix_2Plus = Convert.ToInt32(composite.Count_26 >= 2);
            int h_thirtyone_1 = Convert.ToInt32(composite.Count_31 == 1);
            int twoPlusAdults = Convert.ToInt32(hhldSize == 2 || hhldSize == 4);
            int h_eleven_1Plus = Convert.ToInt32(composite.Count_11 >= 1);
            int h_eighteen_2Plus = Convert.ToInt32(composite.Count_18 >= 2);
            int h_fortyone_1 = Convert.ToInt32(composite.Count_41 == 1);
            int h_fortyone_2Plus = Convert.ToInt32(composite.Count_41 >= 2);
            int h_eighteen_1 = Convert.ToInt32(composite.Count_18 == 1);
            int h_twentysix_1 = Convert.ToInt32(composite.Count_26 == 1);
            int h_fiftyone_1 = Convert.ToInt32(composite.Count_51 == 1);
            int h_thirtyone_2Plus = Convert.ToInt32(composite.Count_31 == 2);
            int h_fiftyfive_2Plus = Convert.ToInt32(composite.Count_55 == 2);
            int h_sixtyfivePlus_1 = Convert.ToInt32(composite.Count_65 == 1);
            int h_male_1 = Convert.ToInt32(composite.Count_male == 1);
            int h_male_2 = Convert.ToInt32(composite.Count_male == 2);
            int h_female_4Plus = Convert.ToInt32(composite.Count_female >= 4);
            int h_male_3 = Convert.ToInt32(composite.Count_male == 3);
            int h_male_4Plus = Convert.ToInt32(composite.Count_male >= 4);
            int h_female_1 = Convert.ToInt32(composite.Count_female == 1);
            int h_fiftyfive_1 = Convert.ToInt32(composite.Count_55 == 1);
            int h_FT_1 = Convert.ToInt32(composite.Count_full_time == 1);
            int h_homeFT_1Plus = Convert.ToInt32(composite.Count_full_time >= 1);
            int h_FT_2 = Convert.ToInt32(composite.Count_full_time == 2);
            int h_FT_3Plus = Convert.ToInt32(composite.Count_full_time >= 3);
            int h_eNE_3 = Convert.ToInt32(composite.Count_unemployed == 3);
            int h_homePT_1Plus = Convert.ToInt32(composite.Count_part_time_home >= 1);
            int h_eNE_1 = Convert.ToInt32(composite.Count_unemployed == 1);
            int h_eNE_2 = Convert.ToInt32(composite.Count_unemployed == 2);
            int h_eNE_4Plus = Convert.ToInt32(composite.Count_unemployed >= 4);
            int h_officeCler_1 = Convert.ToInt32(composite.Count_clerical_manufacturing == 1);
            int h_officeCler_2Plus = Convert.ToInt32(composite.Count_clerical_manufacturing >= 2);
            int h_manConst_1 = Convert.ToInt32(composite.Count_costruction_man == 1);
            int h_manConst_2Plus = Convert.ToInt32(composite.Count_costruction_man >= 2);
            int h_profMan_1 = Convert.ToInt32(composite.Count_professional_man == 1);
            int h_retail_1 = Convert.ToInt32(composite.Count_retail == 1);
            int h_retail_2 = Convert.ToInt32(composite.Count_retail == 2);
            int h_retail_3Plus = Convert.ToInt32(composite.Count_retail >= 3);
            int h_lYes_1 = Convert.ToInt32(composite.Count_driving_license_yes == 1);
            int h_lNo_2 = Convert.ToInt32(composite.Count_driving_license_no == 2);
            int h_fiftyone_2Plus = Convert.ToInt32(composite.Count_51 >= 2);
            int h_PT_1 = Convert.ToInt32(composite.Count_part_time == 1);
            int apart = Convert.ToInt32(dwellType == 1);
            int town = Convert.ToInt32(dwellType == 2);
            int twoAdultsChildren = Convert.ToInt32(hhldSize == 3);
            int h_zero_3 = Convert.ToInt32(composite.Count_less11 == 3);
            int h_fourteen_1Plus = Convert.ToInt32(composite.Count_14 >= 1);
            int h_sixteen_1Plus = Convert.ToInt32(composite.Count_16 >= 1);
            int h_sixtyfivePlus_2Plus = Convert.ToInt32(composite.Count_65 >= 2);
            int h_female_2 = Convert.ToInt32(composite.Count_female == 2);
            int h_female_3 = Convert.ToInt32(composite.Count_female == 3);
            int h_lYes_2 = Convert.ToInt32(composite.Count_driving_license_yes == 2);

            currValues.Add(Math.Exp(-1.37 * 1.00 + -1.45 * apart + -0.0995 * town + 1.14 * oneCar
                + 2.18 * twoCars + 3.05 * threePlusCars + 0.214 * oneAdult + 0.160 * twoAdults + -0.125 * twoPlusAdults
                + 0.356 * h_zero_3 + 0.109 * h_eleven_1Plus + -0.267 * h_eighteen_1 + -0.566 * h_eighteen_2Plus
                + -0.517 * h_twentysix_1 + -0.500 * h_twentysix_2Plus + -0.500 * h_thirtyone_1 + -1.02 * h_thirtyone_2Plus
                + -0.747 * h_fortyone_1 + -1.41 * h_fortyone_2Plus + -0.576 * h_fiftyone_1 + -1.25 * h_fiftyone_2Plus
                + -0.816 * h_fiftyfive_1 + -1.45 * h_fiftyfive_2Plus + -0.828 * h_sixtyfivePlus_1 + -1.54 * h_sixtyfivePlus_2Plus
                + -0.0828 * h_male_2 + 0.222 * h_female_1 + 0.178 * h_female_2 + 0.229 * h_female_3 + -0.523 * h_FT_1
                + -0.854 * h_FT_2 + -1.04 * h_FT_3Plus + -0.508 * h_homeFT_1Plus + -0.699 * h_homePT_1Plus + 0.199 * h_eNE_1
                + 0.334 * h_eNE_2 + 0.230 * h_eNE_3 + -0.256 * h_PT_1 + 0.127 * h_officeCler_1 + 0.361 * h_officeCler_2Plus
                + 0.575 * h_manConst_1 + 0.565 * h_manConst_2Plus + 0.387 * h_retail_1 + 0.680 * h_retail_2 + 0.907 * h_retail_3Plus
                + -0.343 * h_lYes_1 + -0.212 * h_lYes_2 + -0.0865 * h_lNo_2));

            currValues.Add(Math.Exp(-1.37 * 1.00 + -1.45 * apart + -0.0995 * town + 1.14 * oneCar + 2.18 * twoCars
                + 3.05 * threePlusCars + 0.214 * oneAdult + 0.160 * twoAdults + -0.125 * twoPlusAdults + 0.356 * h_zero_3
                + 0.109 * h_eleven_1Plus + -0.267 * h_eighteen_1 + -0.566 * h_eighteen_2Plus + -0.517 * h_twentysix_1
                + -0.500 * h_twentysix_2Plus + -0.500 * h_thirtyone_1 + -1.02 * h_thirtyone_2Plus
                + -0.747 * h_fortyone_1 + -1.41 * h_fortyone_2Plus + -0.576 * h_fiftyone_1 + -1.25 * h_fiftyone_2Plus
                + -0.816 * h_fiftyfive_1 + -1.45 * h_fiftyfive_2Plus + -0.828 * h_sixtyfivePlus_1 + -1.54 * h_sixtyfivePlus_2Plus
                + -0.0828 * h_male_2 + 0.222 * h_female_1 + 0.178 * h_female_2 + 0.229 * h_female_3 + -0.523 * h_FT_1
                + -0.854 * h_FT_2 + -1.04 * h_FT_3Plus + -0.508 * h_homeFT_1Plus + -0.699 * h_homePT_1Plus
                + 0.199 * h_eNE_1 + 0.334 * h_eNE_2 + 0.230 * h_eNE_3 + -0.256 * h_PT_1 + 0.127 * h_officeCler_1
                + 0.361 * h_officeCler_2Plus + 0.575 * h_manConst_1 + 0.565 * h_manConst_2Plus + 0.387 * h_retail_1
                + 0.680 * h_retail_2 + 0.907 * h_retail_3Plus + -0.343 * h_lYes_1 + -0.212 * h_lYes_2 + -0.0865 * h_lNo_2));

            currValues.Add(Math.Exp(-1.47 * 1.00 + -0.481 * apart + 0.529 * town + 1.03 * oneCar + 1.79 * twoCars
                + 2.20 * threePlusCars + -0.241 * oneAdult + -0.252 * twoAdults + -0.106 * twoAdultsChildren
                + -0.303 * twoPlusAdults + 0.141 * h_zero_3 + 0.219 * h_eleven_1Plus + 0.202 * h_fourteen_1Plus
                + 0.146 * h_sixteen_1Plus + 0.161 * h_twentysix_2Plus + 0.0627 * h_thirtyone_1 + -0.153 * h_fortyone_1
                + -0.376 * h_fortyone_2Plus + -0.224 * h_fiftyone_1 + -0.452 * h_fiftyone_2Plus + -0.303 * h_fiftyfive_1
                + -0.497 * h_fiftyfive_2Plus + -0.221 * h_sixtyfivePlus_1 + -0.547 * h_sixtyfivePlus_2Plus + -0.0548 * h_male_2
                + 0.222 * h_female_1 + 0.179 * h_female_2 + 0.207 * h_female_3 + 0.153 * h_female_4Plus + -0.277 * h_FT_1
                + -0.508 * h_FT_2 + -0.626 * h_FT_3Plus + -0.574 * h_homeFT_1Plus + -0.627 * h_homePT_1Plus + 0.0627 * h_eNE_2
                + -0.235 * h_PT_1 + 0.151 * h_officeCler_1 + 0.338 * h_officeCler_2Plus + 0.529 * h_manConst_1
                + 0.860 * h_manConst_2Plus + -0.0583 * h_profMan_1 + 0.313 * h_retail_1 + 0.480 * h_retail_2
                + 0.629 * h_retail_3Plus + -0.326 * h_lYes_1 + -0.242 * h_lYes_2));

            int h_zero_2 = Convert.ToInt32(composite.Count_less11 == 2);
            int h_lNo_3 = Convert.ToInt32(composite.Count_driving_license_no == 3);
            int h_lNo_4Plus = Convert.ToInt32(composite.Count_driving_license_no >= 4);
            int h_lNo_1 = Convert.ToInt32(composite.Count_driving_license_no == 1);

            currValues.Add(Math.Exp(-1.75 * 1.00 + -0.675 * apart + 0.807 * town + 1.44 * oneCar + 2.67 * twoCars
                + 3.50 * threePlusCars + -0.156 * twoAdults + -0.310 * twoPlusAdults + 0.228 * h_zero_2 + 0.415 * h_zero_3
                + 0.238 * h_eleven_1Plus + 0.135 * h_fourteen_1Plus + -0.483 * h_eighteen_1 + -0.770 * h_eighteen_2Plus
                + -0.544 * h_twentysix_1 + -0.704 * h_twentysix_2Plus + -0.634 * h_thirtyone_1 + -1.16 * h_thirtyone_2Plus
                + -0.774 * h_fortyone_1 + -1.45 * h_fortyone_2Plus + -0.873 * h_fiftyone_1
                + -1.51 * h_fiftyone_2Plus + -0.953 * h_fiftyfive_1 + -1.51 * h_fiftyfive_2Plus + -0.708 * h_sixtyfivePlus_1
                + -1.30 * h_sixtyfivePlus_2Plus + -0.0968 * h_male_2 + 0.348 * h_female_1 + 0.332 * h_female_2 + 0.297 * h_female_3
                + 0.438 * h_female_4Plus + -0.300 * h_FT_1 + -0.433 * h_FT_2 + -0.827 * h_FT_3Plus + -0.187 * h_homeFT_1Plus
                + -0.334 * h_homePT_1Plus + 0.0763 * h_eNE_2 + -0.135 * h_PT_1 + 0.0968 * h_manConst_1 + 0.173 * h_retail_1
                + 0.299 * h_retail_2 + 0.448 * h_retail_3Plus + -0.566 * h_lYes_1 + -0.282 * h_lYes_2
                + -0.145 * h_lNo_1 + -0.263 * h_lNo_2 + -0.469 * h_lNo_3 + -0.648 * h_lNo_4Plus));

            int h_lYes_3 = Convert.ToInt32(composite.Count_driving_license_yes == 3);

            currValues.Add(Math.Exp(-0.440 * 1.00 + -0.897 * apart + 0.117 * town + 0.475 * oneCar + 1.19 * twoCars
                + 1.88 * threePlusCars + 0.197 * twoAdults + -0.194 * h_eighteen_1 + -0.255 * h_eighteen_2Plus + -0.228 * h_twentysix_1
                + -0.221 * h_twentysix_2Plus + -0.383 * h_thirtyone_1 + -0.688 * h_thirtyone_2Plus + -0.675 * h_fortyone_1
                + -1.20 * h_fortyone_2Plus + -0.622 * h_fiftyone_1 + -1.24 * h_fiftyone_2Plus + -0.670 * h_fiftyfive_1
                + -1.21 * h_fiftyfive_2Plus + -0.817 * h_sixtyfivePlus_1 + -1.50 * h_sixtyfivePlus_2Plus + -0.0778 * h_male_2
                + 0.0531 * h_female_1 + -0.672 * h_FT_1 + -1.05 * h_FT_2 + -1.38 * h_FT_3Plus + -0.782 * h_homeFT_1Plus
                + -0.724 * h_homePT_1Plus + 0.0577 * h_eNE_1 + 0.137 * h_eNE_2 + -0.191 * h_PT_1 + 0.694 * h_manConst_1
                + 0.782 * h_manConst_2Plus + -0.0655 * h_profMan_1 + 0.334 * h_retail_1 + 0.530 * h_retail_2
                + 0.686 * h_retail_3Plus + -0.268 * h_lYes_1 + -0.284 * h_lYes_2 + -0.137 * h_lYes_3));

            return currValues;
        }
        private List<double> GetUtilityValuesForNumberOfChildren(
           HouseholdPersonComposite composite)
        {
            Household hhld = composite.getHousehold().CreateNewCopy();
            //String key = hhld.GetNewJointKey(GetDimensionName());
            //string[] curKeys = key.Split(Constants.CONDITIONAL_DELIMITER[0]);
            var currValues = new List<double>(5);
            int myNumOfCars = (int) hhld.GetNumOfCars();
            int dwellType = (int) hhld.GetDwellingType();
            int hhldSize = (int) hhld.GetHhldSize();

            currValues.Add(1); // Math.Exp(0)

            int h_eleven_1Plus = Convert.ToInt32(composite.Count_11 >= 1);
            int h_fourteen_1Plus = Convert.ToInt32(composite.Count_14 >= 1);
            int h_sixteen_1Plus = Convert.ToInt32(composite.Count_16 >= 1);
            int h_eighteen_1 = Convert.ToInt32(composite.Count_18 == 1);
            int h_eighteen_2Plus = Convert.ToInt32(composite.Count_11 >= 2);
            int h_twentysix_1 = Convert.ToInt32(composite.Count_26 == 1);
            int h_twentysix_2Plus = Convert.ToInt32(composite.Count_26 >= 2);
            int h_thirtyone_1 = Convert.ToInt32(composite.Count_31 == 1);
            int h_thirtyone_2Plus = Convert.ToInt32(composite.Count_31 >= 2);
            int h_fortyone_1 = Convert.ToInt32(composite.Count_41 == 1);
            int h_fortyone_2Plus = Convert.ToInt32(composite.Count_41 >= 2);
            int h_fiftyfive_1 = Convert.ToInt32(composite.Count_55 == 1);
            int h_fiftyfive_2Plus = Convert.ToInt32(composite.Count_55 >= 2);
            int h_sixtyfivePlus_1 = Convert.ToInt32(composite.Count_65 == 1);
            int h_sixtyfivePlus_2Plus = Convert.ToInt32(composite.Count_65 >= 2);
            int h_lYes_1 = Convert.ToInt32(composite.Count_driving_license_yes == 1);
            int h_lYes_2 = Convert.ToInt32(composite.Count_driving_license_yes == 2);
            int h_lYes_3 = Convert.ToInt32(composite.Count_driving_license_yes == 3);
            int h_lYes_4Plus = Convert.ToInt32(composite.Count_driving_license_yes >= 4);
            int h_lNo_4Plus = Convert.ToInt32(composite.Count_driving_license_no >= 4);
            int apart = Convert.ToInt32(dwellType == 1);
            int oneCar = Convert.ToInt32(myNumOfCars == 1);
            int twoCars = Convert.ToInt32(myNumOfCars == 2);
            int h_male_1 = Convert.ToInt32(composite.Count_male == 1);
            int h_male_2 = Convert.ToInt32(composite.Count_male == 2);

            currValues.Add(Math.Exp(-3.30 * 1.0 + 0.555 * h_eleven_1Plus + -0.370 * h_fourteen_1Plus
                + -0.521 * h_sixteen_1Plus + -0.357 * h_eighteen_1 + -0.443 * h_eighteen_2Plus
                + 0.895 * h_twentysix_1 + 2.19 * h_twentysix_2Plus + 1.94 * h_thirtyone_1
                + 3.43 * h_thirtyone_2Plus + 1.24 * h_fortyone_1 + 2.16 * h_fortyone_2Plus
                + -0.562 * h_fiftyfive_1 + -1.40 * h_fiftyfive_2Plus + -1.01 * h_sixtyfivePlus_1
                + -1.61 * h_sixtyfivePlus_2Plus + 0.143 * h_lYes_1 + 0.472 * h_lYes_2
                + -0.221 * h_lYes_3 + -0.482 * h_lYes_4Plus + 1.30 * h_lNo_4Plus
                + -0.279 * apart + 0.110 * oneCar + 0.162 * twoCars + -0.752 * h_male_1
                + 0.438 * h_male_2));

            int h_fiftyone_1 = Convert.ToInt32(composite.Count_51 == 1);
            int h_fiftyone_2Plus =  Convert.ToInt32(composite.Count_male >= 2);
            int town = Convert.ToInt32(dwellType == 2);
            int threePlusCars = Convert.ToInt32(myNumOfCars >= 3);

            currValues.Add(Math.Exp(-3.48 * 1.00 + -1.12 * h_eleven_1Plus
                + -1.90 * h_fourteen_1Plus + -2.04 * h_sixteen_1Plus + -1.26 * h_eighteen_1
                + -2.04 * h_eighteen_2Plus + 0.684 * h_twentysix_1 + 1.74 * h_twentysix_2Plus
                + 2.30 * h_thirtyone_1 + 3.92 * h_thirtyone_2Plus + 1.26 * h_fortyone_1
                + 2.17 * h_fortyone_2Plus + 0.577 * h_fiftyone_1 + -1.35 * h_fiftyone_2Plus
                + -1.23 * h_fiftyfive_1 + -2.34 * h_fiftyfive_2Plus + -1.68 * h_sixtyfivePlus_1
                + -2.83 * h_sixtyfivePlus_2Plus + 0.396 * h_lYes_1 + 1.27 * h_lYes_2
                + 0.438 * h_lYes_3 + 0.426 * h_lYes_4Plus + 3.35 * h_lNo_4Plus
                + -0.697 * apart + -0.278 * town + 0.425 * oneCar + 0.638 * twoCars
                + 0.413 * threePlusCars + -2.32 * h_male_1 + -0.295 * h_male_2));

            currValues.Add(Math.Exp(-4.27 * 1.00 + -2.14 * h_eleven_1Plus + -2.89 * h_fourteen_1Plus
                + -2.98 * h_sixteen_1Plus + -2.10 * h_eighteen_1 + -3.70 * h_eighteen_2Plus
                + 1.55 * h_thirtyone_1 + 2.04 * h_thirtyone_2Plus + 0.212 * h_fortyone_1
                + -1.83 * h_fiftyone_1 + -3.79 * h_fiftyone_2Plus + -2.44 * h_fiftyfive_1
                + -4.83 * h_fiftyfive_2Plus + -3.04 * h_sixtyfivePlus_1 + -5.38 * h_sixtyfivePlus_2Plus
                + 1.18 * h_lYes_1 + 3.15 * h_lYes_2 + 3.21 * h_lYes_3 + 4.07 * h_lYes_4Plus
                + 6.19 * h_lNo_4Plus + -0.861 * apart + -0.303 * town + 0.129 * twoCars
                + -3.12 * h_male_1 + -0.924 * h_male_2));

            currValues.Add(Math.Exp(-6.25 * 1.00 + -0.379 * h_eleven_1Plus + -0.743 * h_fourteen_1Plus
                + -1.08 * h_sixteen_1Plus + -0.627 * h_eighteen_1 + -1.02 * h_eighteen_2Plus
                + 2.01 * h_twentysix_1 + 3.16 * h_twentysix_2Plus + 3.39 * h_thirtyone_1
                + 6.11 * h_thirtyone_2Plus + 1.98 * h_fortyone_1 + 3.33 * h_fortyone_2Plus
                + -1.09 * h_fiftyfive_1 + -2.33 * h_fiftyfive_2Plus + -1.43 * h_sixtyfivePlus_1
                + -1.50 * h_sixtyfivePlus_2Plus + -0.926 * h_lYes_1 + -1.45 * h_lYes_2
                + -2.72 * h_lYes_3 + -2.87 * h_lYes_4Plus + -0.600 * apart + 1.01 * oneCar
                + 1.27 * twoCars + 1.29 * threePlusCars + -4.02 * h_male_1 + -1.71 * h_male_2));

            return currValues;
        }
        private List<double> GetUtilityValuesForNumberOfPeople(
      HouseholdPersonComposite composite)
        {
            Household hhld = composite.getHousehold().CreateNewCopy();
            //String key = hhld.GetNewJointKey(GetDimensionName());
            //string[] curKeys = key.Split(Constants.CONDITIONAL_DELIMITER[0]);
            var currValues = new List<double>(5);
            int myNumOfCars = (int) hhld.GetNumOfCars();
            int dwellType = (int) hhld.GetDwellingType();
            int hhldSize = (int) hhld.GetHhldSize();

            currValues.Add(1);

            int h_sixteen_1Plus = Convert.ToInt32(composite.Count_16 >= 1);
            int h_eighteen_1 = Convert.ToInt32(composite.Count_18 == 1);
            int h_twentysix_1 = Convert.ToInt32(composite.Count_26 == 1);
            int h_fiftyone_1 = Convert.ToInt32(composite.Count_51 == 1);
            int h_homeFT_1Plus = Convert.ToInt32(composite.Count_full_time_home >= 1);
            int h_PT_1 = Convert.ToInt32(composite.Count_part_time == 1);
            int h_officeCler_1 = Convert.ToInt32(composite.Count_clerical_manufacturing == 1);
            int h_manConst_1 = Convert.ToInt32(composite.Count_costruction_man == 1);
            int h_profMan_1 = Convert.ToInt32(composite.Count_professional_man == 1);
            int h_retail_1 = Convert.ToInt32(composite.Count_retail == 1);

            currValues.Add(Math.Exp(0.0900 * 1.00 + 4.16 * h_sixteen_1Plus + 1.62 * h_eighteen_1
                + 0.745 * h_twentysix_1 + 0.185 * h_fiftyone_1 + 0.568 * h_homeFT_1Plus + 0.656 *
                + 0.500 * h_officeCler_1 + 0.879 * h_manConst_1 + 0.173 * h_profMan_1
                + 0.422 * h_retail_1));

            int h_twentysix_2Plus = Convert.ToInt32(composite.Count_26 >= 2);
            int h_thirtyone_1 = Convert.ToInt32(composite.Count_31 == 1);
            int h_lYes_3 = Convert.ToInt32(composite.Count_driving_license_yes == 3);

            currValues.Add(Math.Exp(-1.67 * 1.00 + 6.22 * h_sixteen_1Plus + 2.96 * h_eighteen_1
                + 1.55 * h_twentysix_1 + 0.939 * h_twentysix_2Plus + 1.25 * h_thirtyone_1
                + 0.513 * h_fiftyone_1 + 1.91 * h_lYes_3 + 0.721 * h_homeFT_1Plus + 0.823 * h_PT_1
                + 0.866 * h_officeCler_1 + 1.35 * h_manConst_1 + 0.540 * h_profMan_1
                + 0.793 * h_retail_1));

            int h_thirtyone_2Plus = Convert.ToInt32(composite.Count_31 >= 2);
            int h_female_3 = Convert.ToInt32(composite.Count_female == 3);
            int h_retail_2 = Convert.ToInt32(composite.Count_retail == 2);

            currValues.Add(Math.Exp(-2.40 * 1.00 + 7.44 * h_sixteen_1Plus + 3.35 * h_eighteen_1
                + 1.60 * h_twentysix_1 + 1.53 * h_twentysix_2Plus + 1.63 * h_thirtyone_1
                + 2.18 * h_thirtyone_2Plus + 0.664 * h_fiftyone_1 + 3.36 * h_female_3
                + 0.794 * h_homeFT_1Plus + 0.924 * h_PT_1 + 0.962 * h_officeCler_1 + 1.66 * h_manConst_1
                + 0.635 * h_profMan_1 + 0.859 * h_retail_1 + 1.02 * h_retail_2));

            int h_oNE_4Plus = Convert.ToInt32(composite.Count_unemployed >= 4);

            currValues.Add(Math.Exp(-4.56 * 1.00 + 7.71 * h_sixteen_1Plus + 3.03 * h_eighteen_1
                + 1.92 * h_twentysix_1 + 2.57 * h_twentysix_2Plus + 1.71 * h_thirtyone_1
                + 2.42 * h_thirtyone_2Plus + 0.860 * h_fiftyone_1 + 0.889 * h_lYes_3 + 3.94 * h_female_3
                + 1.18 * h_homeFT_1Plus + 1.30 * h_PT_1 + 1.26 * h_officeCler_1 + 2.01 * h_manConst_1
                + 0.691 * h_profMan_1 + 1.11 * h_retail_1 + 1.60 * h_retail_2 + 4.72 * h_oNE_4Plus));

            return currValues;
        }
        private List<double> GetUtilityValuesForIncome(HouseholdPersonComposite composite,
                                            SpatialZone curZ)
        {
            Household hhld = composite.getHousehold().CreateNewCopy();
            String key = hhld.GetNewJointKey(GetDimensionName());
            string[] curKeys = key.Split(Constants.CONDITIONAL_DELIMITER[0]);
            var currValues = new List<double>(5);

            currValues.Add(1.00);
            currValues.Add(Math.Exp(-0.859 + 0.000783 * curZ.GetAverageIncome()
                            / Constants.BFRANC_TO_EURO
                         + 1.16 * Int16.Parse(curKeys[4])
                         + 1.15 * Int16.Parse(curKeys[1])));
            currValues.Add(Math.Exp(-4.57 + 0.674 * Int16.Parse(curKeys[3])
                         + 0.0012 * curZ.GetAverageIncome() / Constants.BFRANC_TO_EURO
                         + 1.87 * Int16.Parse(curKeys[4])
                         + 0.409 * Int16.Parse(curKeys[5])
                         + 2.2 * Int16.Parse(curKeys[1])));
            currValues.Add(Math.Exp(-8.11 + 1.38 * Int16.Parse(curKeys[3])
                         + 0.00157 * curZ.GetAverageIncome()
                         / Constants.BFRANC_TO_EURO
                         + 2.22 * Int16.Parse(curKeys[4])
                         + 0.415 * Int16.Parse(curKeys[5])
                         + 2.33 * Int16.Parse(curKeys[1])));
            currValues.Add(Math.Exp(-10.5 + 1.61 * Int16.Parse(curKeys[3])
                         + 0.0016 * curZ.GetAverageIncome()
                         / Constants.BFRANC_TO_EURO
                         + 3.04 * Int16.Parse(curKeys[4])
                         + 0.415 * Int16.Parse(curKeys[5])
                         + 1.64 * Int16.Parse(curKeys[1])));
            return currValues;
        }
        private List<double> GetUtilityValuesForHouseholdType(
            HouseholdPersonComposite composite)
        {
            Household hhld = composite.getHousehold().CreateNewCopy();
            //String key = hhld.GetNewJointKey(GetDimensionName());
            //string[] curKeys = key.Split(Constants.CONDITIONAL_DELIMITER[0]);
            var currValues = new List<double>(6);
            int myNumOfCars = (int) hhld.GetNumOfCars();
            int dwellType = (int) hhld.GetDwellingType();
            int hhldSize = (int) hhld.GetHhldSize();

            currValues.Add(1); // Math.Exp(0)

            int twoCars=0;
            if(myNumOfCars == 2)
                twoCars = 1;
            else
                twoCars = 0;
            int apart=0;
            int town=0;
            if(dwellType == 1) // apart
            {
                town = 0;
                apart = 1;
            }
            else if(dwellType == 3) // town
            {
                town = 1;
                apart = 0;
            }
            else
            {
                town = 0;
                apart = 0;
            }

            int  h_male_1 = 0;
            int  h_sixteen_1Plus = 0;
            int  h_eighteen_1 = 0;
            int  h_twentysix_1 = 0;
            int  h_thirtyone_1 = 0;
            int  h_fiftyone_1 = 0;
            int  h_sixtyfivePlus_1 = 0;
            int  h_PT_1 = 0;
            int  h_homeFT_1Plus = 0;
            int  h_homePT_1Plus = 0;

            if (composite.Count_18 == 1)
                h_eighteen_1 = 1;
            else
                h_eighteen_1 = 0;
            if (composite.Count_26 == 1)
                h_twentysix_1 = 1;
            else
                h_twentysix_1 = 0;
            if (composite.Count_31 == 1)
                h_thirtyone_1 = 1;
            else
                h_thirtyone_1 = 0;
            if (composite.Count_51 == 1)
                h_fiftyone_1 = 1;
            else
                h_fiftyone_1 = 0;
            if (composite.Count_65 == 1)
                h_sixtyfivePlus_1 = 1;
            else
                h_sixtyfivePlus_1 = 0;
            if (composite.Count_part_time == 1)
                h_PT_1 = 1;
            else
                h_PT_1 = 0;

            currValues.Add(Math.Exp(-2.81 + 0.30 * twoCars - 0.615 * apart + 0.467 * town + 1.97 * h_eighteen_1
                + 1.42 * h_twentysix_1 + 2 * h_thirtyone_1 - 1.07 * h_fiftyone_1 - 4.71 * h_sixtyfivePlus_1
                + 0.525 * h_PT_1) );

            int oneCar, threeOrMoreCars = 0;
            if(myNumOfCars == 1)
                oneCar = 1;
            else
                oneCar = 0;
            if(myNumOfCars == 3)
                threeOrMoreCars = 1;
            else
                threeOrMoreCars = 0;

            if (composite.Count_16 >= 1)
                h_sixteen_1Plus = 1;
            else
                h_sixteen_1Plus = 0;
            if (composite.Count_male == 1)
                h_male_1 = 1;
            else
                h_male_1 = 0;
            if (composite.Count_full_time_home >= 1)
                h_homeFT_1Plus = 1;
            else
                h_homeFT_1Plus = 0;
            if (composite.Count_part_time_home >= 1)
                h_homePT_1Plus = 1;
            else
                h_homePT_1Plus = 0;
            int h_eNE_1 = Convert.ToInt32(composite.Count_unemployed == 1); ;

            currValues.Add(Math.Exp(-1.14 + 0.573 * oneCar + 2.66 * twoCars + 2.13 * threeOrMoreCars
                - 0.689 * apart - 0.259 * town + 4.26 * h_sixteen_1Plus + 1.87 * h_eighteen_1
                + 0.899 * h_twentysix_1 - 0.0815 * h_thirtyone_1 - 1.01 * h_sixtyfivePlus_1 + 2.17 * h_male_1
                + 0.112 * h_homeFT_1Plus + 0.415 * h_homePT_1Plus
                + -0.668 * h_eNE_1 + 0.729 * h_PT_1 ) );

            int threePlusCars = 0;
            if (myNumOfCars >= 3)
                threePlusCars = 1;
            else
                threePlusCars = 0;
            int h_thirtyone_2Plus = 0;
            if (composite.Count_31 >= 2)
                h_thirtyone_2Plus = 1;
            else
                h_thirtyone_2Plus = 0;

            currValues.Add(Math.Exp(-1.99  * 1.00 + 1.00 * oneCar + 3.45 * twoCars + 2.26 * threePlusCars
                + -1.15 * apart + -0.292 * town + 3.95 * h_sixteen_1Plus + 1.72 * h_eighteen_1
                + 1.69 * h_twentysix_1 + 2.40 * h_thirtyone_1 + 3.77 * h_thirtyone_2Plus
                + -0.526 * h_fiftyone_1 + -4.02 * h_sixtyfivePlus_1 + -0.747 * h_male_1 + 0.264 * h_homeFT_1Plus
                + 0.474 * h_homePT_1Plus + 0.765 * h_PT_1 ) );

            int h_fiftyfive_2Plus = 0;
            if (composite.Count_55 >= 2)
                h_fiftyfive_2Plus = 1;
            else
                h_fiftyfive_2Plus = 0;

            currValues.Add(Math.Exp(-1.62 * 1.00 + 0.934 * oneCar + 3.55 * twoCars + 4.22 * threePlusCars
                + -1.38 * apart + -0.401 * town + 7.86 * h_sixteen_1Plus + 4.18 * h_eighteen_1 + 2.03 * h_twentysix_1
                + 1.12 * h_thirtyone_1 + 0.971 * h_thirtyone_2Plus + 1.01 * h_fiftyone_1 + 1.08 * h_fiftyfive_2Plus
                + -0.727 * h_sixtyfivePlus_1 + -0.583 * h_male_1 + 0.339 * h_homeFT_1Plus + 0.509 * h_homePT_1Plus
                + -0.529 * h_eNE_1 + 1.30 * h_PT_1 ) );

            currValues.Add(Math.Exp(-2.14 * 1.00 + 1.01 * oneCar + 3.62 * twoCars + 3.80 * threePlusCars
                + -1.30 * apart+ -0.300 * town + 7.37 * h_sixteen_1Plus + 3.36 * h_eighteen_1
                + 1.42 * h_twentysix_1 + 2.06 * h_thirtyone_1 + 2.85 * h_thirtyone_2Plus + 0.356 * h_fiftyone_1
                + -0.854 * h_sixtyfivePlus_1 + -1.39 * h_male_1 + 0.597 * h_homeFT_1Plus + 0.638 * h_homePT_1Plus
                + -2.70 * h_eNE_1 + 1.27 * h_PT_1 ) );

            return currValues;
        }
 private List<double> GetUtilityValuesForEducation(HouseholdPersonComposite composite,
                                     SpatialZone curZ)
 {
     Household hhld = composite.getHousehold().CreateNewCopy();
     String key = hhld.GetNewJointKey(GetDimensionName());
     string[] curKeys = key.Split(Constants.CONDITIONAL_DELIMITER[0]);
     List<double> currValues = new List<double>(3);
     currValues.Add(1.00);
     currValues.Add(Math.Exp(-2.96 + 0.238 * Int16.Parse(curKeys[4])
                        + 3.34 * curZ.GetPercentHighEducated()
                        + 0.24 * Int16.Parse(curKeys[3])
                        + 0.393 * Int16.Parse(curKeys[1])));
     currValues.Add(Math.Exp(-7.19 + 0.701 * Int16.Parse(curKeys[4])
            + 4.34 * curZ.GetPercentHighEducated()
            + 1.09 * Int16.Parse(curKeys[3])
            + 0.851 * Int16.Parse(curKeys[1])));
     return currValues;
 }
        private List<double> GetUtilityValuesForDwellingType(
     HouseholdPersonComposite composite, SpatialZone curZ)
        {
            Household hhld = composite.getHousehold().CreateNewCopy();
            //String key = hhld.GetNewJointKey(GetDimensionName());
            //string[] curKeys = key.Split(Constants.CONDITIONAL_DELIMITER[0]);
            var currValues = new List<double>(3);
            int myNumOfCars = (int) hhld.GetNumOfCars();
            int dwellType = (int) hhld.GetDwellingType();
            int hhldSize = (int) hhld.GetHhldSize();

            currValues.Add(1);

            int oneCar = Convert.ToInt32(myNumOfCars == 1);
            int twoCars = Convert.ToInt32(myNumOfCars == 2);
            int threePlusCars = Convert.ToInt32(myNumOfCars >= 3);
            int oneAdult = Convert.ToInt32(hhldSize == 3);

            // doubt
            double z_apart = curZ.GetDwellingMarginals().GetValue("1");

            int oneAdultChildren = Convert.ToInt32(hhldSize == 1);
            int twoAdults = Convert.ToInt32(hhldSize == 2);
            int h_twentysix_2Plus = Convert.ToInt32(composite.Count_26 >= 2);
            int h_thirtyone_1 = Convert.ToInt32(composite.Count_31 == 1);
            int twoPlusAdults = Convert.ToInt32(hhldSize == 2 || hhldSize == 4);
            int h_eleven_1Plus = Convert.ToInt32(composite.Count_11 >= 1);
            int h_eighteen_2Plus = Convert.ToInt32(composite.Count_18 >= 2);
            int h_fortyone_1 = Convert.ToInt32(composite.Count_41 == 1);
            int h_fortyone_2Plus = Convert.ToInt32(composite.Count_41 >= 2);
            int h_eighteen_1 = Convert.ToInt32(composite.Count_18 == 1);
            int h_twentysix_1 = Convert.ToInt32(composite.Count_26 == 1);
            int h_fiftyone_1 = Convert.ToInt32(composite.Count_51 == 1);
            int h_thirtyone_2Plus = Convert.ToInt32(composite.Count_31 == 2);
            int h_fiftyfive_2Plus = Convert.ToInt32(composite.Count_55 == 2);
            int h_sixtyfivePlus_1 = Convert.ToInt32(composite.Count_65 == 1);
            int h_male_1 = Convert.ToInt32(composite.Count_male == 1);
            int h_male_2 = Convert.ToInt32(composite.Count_male == 2);
            int h_female_4Plus = Convert.ToInt32(composite.Count_female >= 4);
            int h_male_3 = Convert.ToInt32(composite.Count_male == 3);
            int h_male_4Plus = Convert.ToInt32(composite.Count_male >= 4);
            int h_female_1 = Convert.ToInt32(composite.Count_female == 1);
            int h_fiftyfive_1 = Convert.ToInt32(composite.Count_55 == 1);
            int h_FT_1 = Convert.ToInt32(composite.Count_full_time == 1);
            int h_homeFT_1Plus = Convert.ToInt32(composite.Count_full_time >= 1);
            int h_FT_2 = Convert.ToInt32(composite.Count_full_time == 2);
            int h_FT_3Plus = Convert.ToInt32(composite.Count_full_time >= 3);
            int h_eNE_3 = Convert.ToInt32(composite.Count_unemployed == 3);
            int h_homePT_1Plus = Convert.ToInt32(composite.Count_part_time_home >= 1);
            int h_eNE_1 = Convert.ToInt32(composite.Count_unemployed == 1);
            int h_eNE_2 = Convert.ToInt32(composite.Count_unemployed == 2);
            int h_eNE_4Plus = Convert.ToInt32(composite.Count_unemployed >= 4);
            int h_officeCler_1 = Convert.ToInt32(composite.Count_clerical_manufacturing == 1);
            int h_officeCler_2Plus = Convert.ToInt32(composite.Count_clerical_manufacturing >= 2);
            int h_manConst_1 = Convert.ToInt32(composite.Count_costruction_man == 1);
            int h_manConst_2Plus = Convert.ToInt32(composite.Count_costruction_man >= 2);
            int h_profMan_1 = Convert.ToInt32(composite.Count_professional_man == 1);
            int h_profMan_2Plus = Convert.ToInt32(composite.Count_professional_man >= 2);
            int h_retail_1 = Convert.ToInt32(composite.Count_retail == 1);
            int h_retail_2 = Convert.ToInt32(composite.Count_retail == 2);
            int h_retail_3Plus = Convert.ToInt32(composite.Count_retail >= 3);
            int h_lYes_1 = Convert.ToInt32(composite.Count_driving_license_yes == 1);
            int h_lYes_3 = Convert.ToInt32(composite.Count_driving_license_yes == 3);
            int h_lYes_4Plus = Convert.ToInt32(composite.Count_driving_license_yes >= 4);
            int h_lNo_1 = Convert.ToInt32(composite.Count_driving_license_no == 1);
            int h_lNo_2 = Convert.ToInt32(composite.Count_driving_license_no == 2);

            currValues.Add(Math.Exp(0.772 * 1.00 + -1.06 * oneCar + -2.30 * twoCars + -3.18 * threePlusCars
                + 4.04 * z_apart + -0.312 * oneAdult + 0.180 * oneAdultChildren + -0.375 * twoAdults
                + -0.396 * twoPlusAdults + 0.246 * h_eleven_1Plus + 0.672 * h_eighteen_1 + 1.15 * h_eighteen_2Plus
                + 0.688 * h_twentysix_1 + 1.16 * h_twentysix_2Plus + 0.641 * h_thirtyone_1 + 0.786 * h_thirtyone_2Plus
                + 0.227 * h_fortyone_1 + 0.391 * h_fortyone_2Plus + 0.117 * h_fiftyone_1 + 0.0771 * h_fiftyfive_1
                + -0.109 * h_fiftyfive_2Plus + -0.124 * h_sixtyfivePlus_1 + -0.131 * h_male_1
                + -0.184 * h_male_2 + -0.234 * h_male_3 + -0.227 * h_male_4Plus + 0.0740 * h_female_1
                + -0.269 * h_female_4Plus + -0.212 * h_FT_1 + -0.528 * h_FT_2 + -0.717 * h_FT_3Plus
                + -0.537 * h_homeFT_1Plus + -0.330 * h_homePT_1Plus + -0.560 * h_eNE_1 + -1.21 * h_eNE_2
                + -1.43 * h_eNE_3 + -1.62 * h_eNE_4Plus + -0.541 * h_officeCler_1 + -1.03 * h_officeCler_2Plus
                + -0.293 * h_manConst_1 + -0.618 * h_manConst_2Plus + -0.746 * h_profMan_1
                + -1.60 * h_profMan_2Plus + -0.315 * h_retail_1 + -0.671 * h_retail_2 + -1.21 * h_retail_3Plus
                + 0.168 * h_lYes_1 + -0.324 * h_lYes_3 + -0.675 * h_lYes_4Plus + -0.110 * h_lNo_1
                + -0.140 * h_lNo_2));

            // doubt
            double z_town = curZ.GetDwellingMarginals().GetValue("2");

            int h_zero_1 = Convert.ToInt32(composite.Count_less11 == 1);
            int h_zero_4Plus =Convert.ToInt32(composite.Count_less11 >= 4);
            int h_fiftyone_2Plus = Convert.ToInt32(composite.Count_51 >= 2);
            int h_PT_1 = Convert.ToInt32(composite.Count_part_time == 1);

             currValues.Add(Math.Exp(-1.33 * 1.00 + -0.351 * oneCar + -1.08 * twoCars + -1.93  * threePlusCars
                 + 11.8 * z_town + -0.747 * oneAdult + 0.429 * oneAdultChildren + -0.337  * twoAdults
                 + 0.172 * h_zero_1 + 0.347 * h_zero_4Plus +  0.212 * h_eleven_1Plus + 0.598 * h_eighteen_1
                 + 0.960 * h_eighteen_2Plus + 0.548 * h_twentysix_1 + 1.17 * h_twentysix_2Plus
                 + 0.506 * h_thirtyone_1 + 0.796 * h_thirtyone_2Plus + 0.273 * h_fortyone_1
                 + 0.388 * h_fortyone_2Plus + 0.143 * h_fiftyone_1 + 0.185 * h_fiftyone_2Plus
                 + 0.215 * h_fiftyfive_1 + -0.211 * h_sixtyfivePlus_1 + -0.375 * h_male_1
                 + -0.359 * h_male_2 + -0.392 * h_male_3 + -0.299 * h_male_4Plus
                 + -0.0706 * h_female_1 + 0.0664 * h_FT_1 + -0.161 * h_FT_3Plus + -0.274 * h_homeFT_1Plus
                 + -0.484 * h_eNE_1 + -0.951 * h_eNE_2 + -1.01 * h_eNE_3 + -1.07 * h_eNE_4Plus
                 + -0.100 * h_PT_1 + -0.160 * h_officeCler_1 + -0.564 * h_officeCler_2Plus
                 + -0.259 * h_manConst_1 + -0.511 * h_manConst_2Plus + -0.234 * h_profMan_1
                 + -0.651 * h_profMan_2Plus + -0.0924  * h_retail_1 + -0.310 * h_retail_2 + -0.625 * h_retail_3Plus
                 + 0.225 * h_lYes_1 + -0.395 * h_lYes_3 + -0.787 * h_lYes_4Plus + -0.176 * h_lNo_1
                 + -0.135 * h_lNo_2));

            return currValues;
        }
        private List<double> GetUtilityValuesForCar(HouseholdPersonComposite composite,
                                            SpatialZone curZ)
        {
            Household hhld = composite.getHousehold().CreateNewCopy();
            String key = hhld.GetNewJointKey(GetDimensionName());
            string[] curKeys = key.Split(Constants.CONDITIONAL_DELIMITER[0]);
            var currValues = new List<double>(4);
            currValues.Add(1.00);
            double dwellNotApartment = 0.00;
            if (Int16.Parse(curKeys[5]) != 3)
            {
                dwellNotApartment = 0.841;
            }
            double incParam = 0.00;
            if (Int16.Parse(curKeys[3]) == 2)
            {
                incParam = 0.858;
            }
            else if (Int16.Parse(curKeys[3]) > 2)
            {
                incParam = 0.978;
            }
            double childParam = 0.00;
            if (Int16.Parse(curKeys[2]) != 0)
            {
                childParam = 0.457;
            }
            currValues.Add(Math.Exp(-2.75 + 0.504 * Int16.Parse(curKeys[4])
                               + 0.00105 * curZ.GetAverageIncome()
                               / Constants.BFRANC_TO_EURO
                               + 0.437 * Int16.Parse(curKeys[1])
                               + 0.498 * curZ.GetPercentHhldWOneCar()
                               + dwellNotApartment
                               + incParam
                               + childParam));
            incParam = 0.00;
            if (Int16.Parse(curKeys[3]) == 2)
            {
                incParam = 1.87;
            }
            else if (Int16.Parse(curKeys[3]) > 2)
            {
                incParam = 2.43;
            }
            childParam = 0.00;
            if (Int16.Parse(curKeys[2]) != 0)
            {
                childParam = 0.800;
            }
            dwellNotApartment = 0.00;
            if (Int16.Parse(curKeys[5]) != 3)
            {
                dwellNotApartment = 1.86;
            }
            currValues.Add(Math.Exp(-7.02 + 0.933 * Int16.Parse(curKeys[4])
                   + 0.00126 * curZ.GetAverageIncome()
                   / Constants.BFRANC_TO_EURO
                   + 1.24 * Int16.Parse(curKeys[1])
                   + 2.13 * curZ.GetPercentHhldWTwoCar()
                   + dwellNotApartment
                   + incParam
                   + childParam));
            incParam = 0.00;
            if (Int16.Parse(curKeys[3]) == 2)
            {
                incParam = 1.42;
            }
            else if (Int16.Parse(curKeys[3]) > 2)
            {
                incParam = 3.24;
            }

            dwellNotApartment = 0.00;
            if (Int16.Parse(curKeys[5]) != 3)
            {
                dwellNotApartment = 2.66;
            }
            currValues.Add(Math.Exp(-10.1 + 1.07 * Int16.Parse(curKeys[4])
                   + 0.00126 * curZ.GetAverageIncome()
                   / Constants.BFRANC_TO_EURO
                   + 1.60 * Int16.Parse(curKeys[1])
                   + 14.1 * curZ.GetPercentHhldWThreeCar()
                   + dwellNotApartment
                   + incParam));
            return currValues;
        }