public Household GetNextAgent(ModelDistribution g_x, string dimension, Household prvAgent, SpatialZone currZone) { StateGenerator currStateGen = new StateGenerator(); currStateGen.SetParameters(currZone.GetAverageIncome(), currZone.GetAverageIncome() * 2); double q_previous; double q_current = 0.00; double expIncome = Math.Log(prvAgent.GetIncome()); KeyValDoublePair currPair = new KeyValDoublePair(); //start with mean value currPair.Category = currStateGen.GetMean(); currPair.Val = currStateGen.GetTransitionProbablity(currPair.Category); for (int i = 0; i < Constants.WARMUP_ITERATIONS; i++) { q_previous = currStateGen.GetTransitionProbablity( Math.Log((double)prvAgent.GetIncome())); q_current = currPair.Val; IncomeLevel prevLvl = IncomeConvertor.ConvertValueToLevel( (uint) Math.Exp(expIncome)); IncomeLevel currLvl = IncomeConvertor.ConvertValueToLevel( (uint) Math.Exp(currPair.Category)); double b_prev = g_x.GetValue(dimension, prevLvl.ToString(), prvAgent.GetNewJointKey(dimension), currZone); double b_curr = g_x.GetValue(dimension, currLvl.ToString(), prvAgent.GetNewJointKey(dimension), currZone); if (b_prev == 0.00) b_prev = 0.0000001; if (b_curr == 0.00) b_curr = 0.0000001; if (q_current == 0.00) q_current = 0.0000001; double comVal = (b_curr * q_previous) / (b_prev * q_current); if (comVal == 0.00) comVal = 0.0000001; if (randGen.NextDouble() < comVal) { expIncome = currPair.Category; } currPair = currStateGen.GetNextState(); } return prvAgent.CreateNewCopy((uint)Math.Exp(expIncome)); }
public KeyValDoublePair GetNextState() { double nxtVal = myRandGen.GetNextNormal(mean, stdev); double f_X_Val = GetTransitionProbablity(nxtVal); KeyValDoublePair currPair = new KeyValDoublePair(); currPair.Category = nxtVal; currPair.Val = f_X_Val; return currPair; }