//private ArrayList GetUtilityValuesForDwelling(string key,
        //                            SpatialZone curZ)
        //{
        //    string[] curKeys = key.Split(Constants.CONDITIONAL_DELIMITER[0]);
        //    ArrayList currValues = new ArrayList(4);
        //    currValues.Add(1.00);
        //    double childParam = 0.00;
        //    if (Int16.Parse(curKeys[2]) != 0)
        //    {
        //        childParam = 0.484;
        //    }
        //    currValues.Add(Math.Exp(1.52 - 0.000549 * curZ.GetAverageIncome()
        //                       / Constants.BFRANC_TO_EURO
        //                       - 0.572 * Int16.Parse(curKeys[5])
        //                       + childParam));
        //    double incParam=0.00;
        //    if (Int16.Parse(curKeys[3]) > 2 )
        //    {
        //        incParam = 0.664;
        //    }
        //    if (Int16.Parse(curKeys[2]) != 0)
        //    {
        //        childParam = 0.430;
        //    }
        //    currValues.Add(Math.Exp(5.95 - 0.00208 * curZ.GetAverageIncome()
        //                       / Constants.BFRANC_TO_EURO
        //                       + 0.266 * Int16.Parse(curKeys[4])
        //                       - 1.16 * Int16.Parse(curKeys[5])
        //                       + incParam + childParam));
        //    if (Int16.Parse(curKeys[3]) == 2)
        //    {
        //        incParam = -0.681;
        //    }
        //    if (Int16.Parse(curKeys[2]) != 0)
        //    {
        //        childParam = -0.642;
        //    }
        //    currValues.Add(Math.Exp(4.52 - 0.00233 * curZ.GetAverageIncome()
        //                        / Constants.BFRANC_TO_EURO
        //                       + 0.811 * Int16.Parse(curKeys[4])
        //                       - 1.89 * Int16.Parse(curKeys[5])
        //                       + 5.77 * curZ.GetApartmentPercent()
        //                       + incParam + childParam));
        //    return currValues;
        //}
        private List<double> GetUtilityValuesForDwelling(string key,
                            SpatialZone curZ)
        {
            string[] curKeys = key.Split(Constants.CONDITIONAL_DELIMITER[0]);
            var currValues = new List<double>(4);
            int hhldSz = int.Parse(curKeys[0]);
            double b_surf = 0.00;
            if (hhldSz == 2)
            {
                b_surf = 0.0146;
            }
            else if( hhldSz == 3)
            {
                b_surf = 0.0194;
            }
            else if (hhldSz > 3)
            {
                b_surf = 0.0249;
            }
            double currWtDwell = curZ.GetDwellingMarginalsByCount().GetValue("0");
            if (currWtDwell == 0)
            {
                currWtDwell = 0.0000001;
            }
            else
            {
                currWtDwell = Math.Log(currWtDwell);
            }
            currValues.Add(Math.Exp(currWtDwell
                               + b_surf * curZ.GetSurfaceOne()));

            currWtDwell = curZ.GetDwellingMarginalsByCount().GetValue("1");
            if (currWtDwell == 0)
            {
                currWtDwell = 0.0000001;
            }
            else
            {
                currWtDwell = Math.Log(currWtDwell);
            }
            int numCars = int.Parse(curKeys[5]);
            int incLvl = int.Parse(curKeys[3]);

            currValues.Add(Math.Exp(0.423 + currWtDwell
                               - 0.279 * numCars
                               + b_surf * curZ.GetSurfaceTwo()));

            currWtDwell = curZ.GetDwellingMarginalsByCount().GetValue("2");
            if (currWtDwell == 0)
            {
                currWtDwell = 0.0000001;
            }
            else
            {
                currWtDwell = Math.Log(currWtDwell);
            }
            currValues.Add(Math.Exp(0.870 + currWtDwell
                               - 0.593 * numCars
                               + b_surf * curZ.GetSurfaceThree()));

            currWtDwell = curZ.GetDwellingMarginalsByCount().GetValue("3");
            if (currWtDwell == 0)
            {
                currWtDwell = 0.0000001;
            }
            else
            {
                currWtDwell = Math.Log(currWtDwell);
            }
            currValues.Add(Math.Exp(1.20 + currWtDwell
                               - 0.9482 * numCars
                               + b_surf * curZ.GetSurfaceFour()));
            return currValues;
        }