Esempio n. 1
0
        public static MaritalStatus RandomMaritalStatus(DateTime?dob, Gender gender)
        {
            if (Etx.MyRand.NextDouble() <= AmericanData.PERCENT_UNMARRIED_WHOLE_LIFE)
            {
                return(MaritalStatus.Single);
            }
            dob = dob ?? Etx.RandomAdultBirthDate();

            var avgAgeMarriage = gender == Gender.Female
                ? AmericanEquations.FemaleAge2FirstMarriage.SolveForY(dob.Value.ToDouble())
                : AmericanEquations.MaleAge2FirstMarriage.SolveForY(dob.Value.ToDouble());

            var cdt        = DateTime.UtcNow;
            var currentAge = Etc.CalcAge(dob.Value, cdt);

            if (currentAge < avgAgeMarriage)
            {
                return(MaritalStatus.Single);
            }

            //chance for being widowed goes up exp for older
            if (Etx.MyRand.NextDouble() <= AmericanEquations.Age2ProbWidowed.SolveForY(currentAge))
            {
                return(MaritalStatus.Widowed);
            }

            //young first marriage
            if (!(currentAge > avgAgeMarriage + AmericanData.AVG_LENGTH_OF_MARRIAGE))
            {
                return(MaritalStatus.Married);
            }

            //spin for divorce
            var df = Etx.MyRand.NextDouble() <= AmericanData.PERCENT_DIVORCED;

            //have 'separated' (whatever it means) as low probability
            if (df && currentAge < avgAgeMarriage + AmericanData.AVG_LENGTH_OF_MARRIAGE + AmericanData.YEARS_BEFORE_NEXT_MARRIAGE)
            {
                return(Etx.RandomRollBelowOrAt(64, Etx.Dice.OneThousand) ? MaritalStatus.Separated : MaritalStatus.Divorced);
            }

            //have prob of never remarry
            if (df && gender == Gender.Male)
            {
                return(Etx.MyRand.NextDouble() <= AmericanData.PERCENT_OF_MEN_MARRIED_ONCE_NEVER_AGAIN
                    ? MaritalStatus.Divorced
                    : MaritalStatus.Remarried);
            }
            if (df && gender == Gender.Female)
            {
                return(Etx.MyRand.NextDouble() <= AmericanData.PERCENT_OF_WOMEN_MARRIED_ONCE_NEVER_AGAIN
                    ? MaritalStatus.Divorced
                    : MaritalStatus.Remarried);
            }
            return(df ? MaritalStatus.Remarried : MaritalStatus.Married);
        }
Esempio n. 2
0
        public static DateTime?RandomChildBirthDate(DateTime motherDob, int numberOfSiblings, DateTime?atTime = null)
        {
            //put number of siblings in scope for equations
            if (numberOfSiblings <= 0)
            {
                numberOfSiblings = 0;
            }
            if (numberOfSiblings > 4)
            {
                numberOfSiblings = 3;
            }

            //default atTime to now
            var dt = atTime ?? DateTime.UtcNow;

            var motherAge = Etc.CalcAge(motherDob, dt);

            var meanAge = AmericanEquations.FemaleAge2FirstChild.SolveForY(motherDob.Year);

            //mother is too young for children
            if (motherAge < meanAge)
            {
                return(null);
            }

            switch (numberOfSiblings)
            {
            case 2:
                meanAge = AmericanEquations.FemaleAge2SecondChild.SolveForY(motherDob.Year);
                if (motherAge < meanAge)
                {
                    return(null);
                }
                break;

            case 3:
                meanAge = AmericanEquations.FemaleAge2ThirdChild.SolveForY(motherDob.Year);
                if (motherAge < meanAge)
                {
                    return(null);
                }
                break;

            case 4:
                meanAge = AmericanEquations.FemaleAge2ForthChild.SolveForY(motherDob.Year);
                if (motherAge < meanAge)
                {
                    return(null);
                }
                break;
            }

            return(Etx.RandomDate((int)Math.Round(meanAge), motherDob));
        }
Esempio n. 3
0
        public static DateTime?RandomMarriageDate(DateTime?dob, Gender myGender)
        {
            dob = dob ?? Etx.RandomAdultBirthDate();
            var dt             = DateTime.UtcNow;
            var avgAgeMarriage = myGender == Gender.Female
                ? AmericanEquations.FemaleAge2FirstMarriage.SolveForY(dob.Value.ToDouble())
                : AmericanEquations.MaleAge2FirstMarriage.SolveForY(dob.Value.ToDouble());
            var currentAge = Etc.CalcAge(dob.Value, dt);

            //all other MaritalStatus imply at least one marriage in past
            var yearsMarried = currentAge - Convert.ToInt32(Math.Round(avgAgeMarriage));

            var marriedOn = Etx.RandomDate(-1 * yearsMarried, dt);

            //zero-out the time
            marriedOn = new DateTime(marriedOn.Year, marriedOn.Month, marriedOn.Day);
            return(marriedOn);
        }
Esempio n. 4
0
        public static int RandomNumberOfChildren(DateTime?dob, DateTime?atDateTime = null)
        {
            //average to be 2.5
            var vt = DateTime.UtcNow;

            if (atDateTime != null)
            {
                vt = atDateTime.Value;
            }
            dob = dob ?? Etx.RandomAdultBirthDate();
            var age   = Etc.CalcAge(dob.Value, vt);
            var randV = Etx.RandomInteger(1, 100);

            var meanAge = Math.Round(AmericanEquations.FemaleAge2ForthChild.SolveForY(vt.Year));

            if (randV >= 84 && age >= meanAge)
            {
                return(4);
            }

            meanAge = Math.Round(AmericanEquations.FemaleAge2ThirdChild.SolveForY(vt.Year));

            if (randV >= 66 && age >= meanAge)
            {
                return(3);
            }

            meanAge = Math.Round(AmericanEquations.FemaleAge2SecondChild.SolveForY(vt.Year));

            if (randV >= 33 && age >= meanAge)
            {
                return(2);
            }

            meanAge = Math.Round(AmericanEquations.FemaleAge2FirstChild.SolveForY(vt.Year));

            return(age >= meanAge ? 1 : 0);
        }
Esempio n. 5
0
        public static AmericanEducation RandomEducation(DateTime?birthDate = null, string homeState = null, string zipCode = null)
        {
            var edu = new AmericanEducation();
            var dob = birthDate ?? Etx.RandomAdultBirthDate();
            var age = Etc.CalcAge(dob);

            if (age < DF_MIN_AGE_ENTER_HS)
            {
                return(edu);
            }

            var dtAtAge18    = dob.AddYears(UsState.AGE_OF_ADULT);
            var isLegalAdult = age >= UsState.AGE_OF_ADULT;

            if (!edu.AssignRandomHighSchool(homeState, zipCode, isLegalAdult, dtAtAge18, out var hsGradDt))
            {
                return(edu);
            }

            var usstate = UsState.GetState(homeState);

            edu.AssignRandomCollege(usstate?.ToString(), hsGradDt);
            return(edu);
        }
Esempio n. 6
0
 public int GetAge()
 {
     return(Etc.CalcAge(DateOfBirth));
 }