예제 #1
0
 // the method assumes that the conditionals are full conditionals
 // The data processing has already been done
 // [BF] The method should be changed so that it can generate any
 //      kind of agents
 public List<SimulationObject> GenerateAgents(SpatialZone currZone, int numAgents,
                 SimulationObject initAgent, bool warmUpStatus,
                 List<ConditionalDistribution> mobelCond,
                 OutputFileWriter currWriter)
 {
     switch(initAgent.GetAgentType())
     {
         case AgentType.Household:
         return GenerateHousholds(currZone, numAgents,
                             (Household)initAgent, warmUpStatus,
                                 mobelCond, currWriter);
         case AgentType.Person:
             return GeneratePersons(currZone, numAgents,
                             (Person)initAgent, warmUpStatus,
                                 currWriter);
     }
     return null;
 }
예제 #2
0
 public SimulationObject GetNextAgent(DiscreteMarginalDistribution f_x,
     ConditionalDistribution g_x, string dimension,
     SimulationObject prvAgent, SpatialZone currZone, int agentID)
 {
     switch(prvAgent.GetAgentType())
     {
         case AgentType.Household:
             return GetNextAgentHousehold(
             f_x, g_x, dimension, (Household)prvAgent, currZone);
         case AgentType.Person:
             return GetNextAgentPerson(
             f_x, g_x, dimension, (Person)prvAgent, currZone);
         case AgentType.HouseholdPersonComposite:
         return GetNextAgentCompositeHhld(
             f_x, g_x, dimension, (HouseholdPersonComposite)prvAgent, currZone, agentID);
         default:
             return null;
     }
 }
 public virtual double GetValue(string dimension,
                 string category, SimulationObject composite_person,
                         SpatialZone curZ)
 {
     return 0;
 }
 public virtual List<KeyValPair> GetCommulativeValue(SimulationObject composite,
                                    SpatialZone curZ, int personId)
 {
     return null;
 }
예제 #5
0
        // Should generate a deep copy of self
        private SimulationObject GenerateNextAgent(List<KeyValPair> curCom,
            SimulationObject prvAgnt, string genDim)
        {
            double currMax = (double)
                ((KeyValPair)curCom[curCom.Count - 1]).Value;
            if(currMax != 0.00)
            {
                double randVal = randGen.NextDoubleInRange(0, currMax);
                for(int i = 0; i < curCom.Count; i++)
                {
                    if(randVal <= ((KeyValPair)curCom[i]).Value)
                    {
                        return prvAgnt.CreateNewCopy(genDim, i);
                    }
                }

            }
            else
            {
                return prvAgnt.CreateNewCopy(genDim,
                    randGen.NextInRange(0, (curCom.Count - 1)));
            }
            return null;
        }
예제 #6
0
        //TODO:
        //***Update the methode GetValue()***
        /* public override double GetValue(string dim,string cat
            , HouseholdPersonComposite composite, SpatialZone curZ)
        {
            string cat = fullKey.Substring(0,
                    fullKey.IndexOf(Constants.CATEGORY_DELIMITER) - 1);
            string key = fullKey.Substring(
                   fullKey.IndexOf(Constants.CATEGORY_DELIMITER) + 1
                , fullKey.Length - 1);
            return GetValue(cat, dim, key, curZ);
        }*/
        public override double GetValue(string dimension,
                        string category, SimulationObject composite_person, 
                                SpatialZone curZ)
        {
            //string procdKey = ProcessKey(key);
            // [BF] For now here it will always be income or education
            //HouseHold
            if(dimension == "IncomeLevel")
            {
                return (double) ComputeIncomeProbablities(
                    category, (HouseholdPersonComposite)composite_person, curZ);
            }
            else if (dimension == "NumOfWorkers")
            {
                return (double) ComputeEducationProbablities(
                    category, (HouseholdPersonComposite)composite_person, curZ);
            }
            else if (dimension == "DwellingType")
            {
                return (double)ComputeDwellingTypeProbablities(
                    category, (HouseholdPersonComposite)composite_person, curZ);
            }
            else if (dimension == "NumOfKids")
            {
                return (double)ComputeNumberOfChildreProbablities(
                     category, (HouseholdPersonComposite)composite_person);
            }
            else if (dimension == "HouseholdSize")
            {
                return (double)ComputeHouseholdTypeProbablities(
                                    category, (HouseholdPersonComposite)composite_person);
            }
            else if (dimension == "NumOfPeople")
            {
                return (double)ComputeNumberOfPeopleProbablities(
                                    category, (HouseholdPersonComposite)composite_person);
            }
            else if (dimension == "NumOfCars")
            {
                return (double)ComputeNumberOfVehiclesProbablities(
                                    category, (HouseholdPersonComposite)composite_person, curZ);
            }
            else if (dimension == "PublicTransitPass")
            {
                return (double)ComputePublicTransitPassProbablities(
                                    category, (HouseholdPersonComposite)composite_person);
            }

            //Person
            else if (dimension == "Sex")
            {
                return (double)ComputeSexProbablities(
                                                  category, (Person)composite_person);
            }
            else if (dimension == "DrivingLicense")
            {
                return (double)ComputeDriverLisenceProbablities(
                                                  category, (Person)composite_person);
            }
            else if (dimension == "Occupation")
            {
                return (double)ComputeOccupationProbablities(
                                                  category, (Person)composite_person, curZ);
            }
            else if (dimension == "EmploymentStatus")
            {
                return (double)ComputeEmploymentStatusProbablities(
                                                  category, (Person)composite_person);
            }
            else if (dimension == "Age")
            {
                return (double)ComputeAgeProbablities(
                                                  category, (Person)composite_person);
            }

            return 0;
        }
예제 #7
0
 public override List<KeyValPair> GetCommulativeValue(SimulationObject composite,
                                     SpatialZone curZ, int personId)
 {
     return GetCommValue(GetDimensionName(), composite, curZ, personId);
 }
예제 #8
0
        private List<KeyValPair> GetCommValue(string dimension
                                , SimulationObject composite_person,
                                SpatialZone curZ, int personId)
        {
            //Household
            if (dimension == "IncomeLevel")
            {
                return ComputeIncomeCommulative((HouseholdPersonComposite)composite_person, curZ);
            }
            else if (dimension == "NumWithUnivDeg")
            {
                return ComputeEducationCommulative((HouseholdPersonComposite)composite_person, curZ);
            }
            else if (dimension == "DwellingType")
            {
                return ComputeDwellingTypeCommulative((HouseholdPersonComposite)composite_person, curZ);
            }
            else if (dimension == "NumOfKids")
            {
                return ComputeNumberOfChildrenCommulative((HouseholdPersonComposite)composite_person);
            }
            else if (dimension == "HouseholdSize")
            {
                return ComputeHouseholdTypeCommulative((HouseholdPersonComposite)composite_person);
            }
            else if (dimension == "NumOfPeople")
            {
                return ComputeNumberOfPeopleCommulative((HouseholdPersonComposite)composite_person);
            }
            else if (dimension == "NumOfCars")
            {
                return ComputeNumberOfVehiclesCommulative((HouseholdPersonComposite)composite_person, curZ);
            }
            else if (dimension == "PublicTransitPass")
            {
                return ComputePublicTransitPassCommulative((HouseholdPersonComposite)composite_person);
            }
            //Person
            else if (dimension == "Sex")
            {
                return ComputeSexCommulative(((HouseholdPersonComposite)composite_person).getPersons().ElementAt(personId));
            }
            else if (dimension == "DrivingLicense")
            {
                return ComputeDriverLisenceCommulative(((HouseholdPersonComposite)composite_person).getPersons().ElementAt(personId));
            }
            else if (dimension == "Occupation")
            {
                return ComputeOccupationCommulative(((HouseholdPersonComposite)composite_person).getPersons().ElementAt(personId), curZ);
            }
            else if (dimension == "EmploymentStatus")
            {
                return ComputeEmploymentStatusCommulative(((HouseholdPersonComposite)composite_person).getPersons().ElementAt(personId));
            }
            else if (dimension == "Age")
            {
                return ComputeAgeCommulative(((HouseholdPersonComposite)composite_person).getPersons().ElementAt(personId));
            }

            return null;
        }
예제 #9
0
        private KeyValPair GenerateNextFromG_X(ConditionalDistribution curG_X, 
            SimulationObject prvAgent, SpatialZone currZone, int agentID)
        {
            List <KeyValPair> curCom = curG_X.GetCommulativeValue( prvAgent,
                                                 currZone, agentID);

            double randVal = myRand.NextDoubleInRange(0, (double)
                ((KeyValPair)curCom[curCom.Count - 1]).Value);
            for (int i = 0; i < curCom.Count; i++)
            {
                if (randVal <= ((KeyValPair)curCom[i]).Value)
                {
                    KeyValPair myPair;
                    myPair.Category = ((KeyValPair)curCom[i]).Category;
                    myPair.Value = curG_X.GetValue(curG_X.GetDimensionName(),
                            myPair.Category,
                            prvAgent.GetNewJointKey(curG_X.GetDimensionName()),
                            currZone);
                    return myPair;
                }
            }
            return new KeyValPair();
        }