// 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; }
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; }
// 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; }
//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; }
public override List<KeyValPair> GetCommulativeValue(SimulationObject composite, SpatialZone curZ, int personId) { return GetCommValue(GetDimensionName(), composite, curZ, personId); }
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; }
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(); }