Пример #1
0
        static private void ResidentNonResidentMarriages(Population result, int year, bool areMalesResidents)
        {
            Gender ResidentGender, SpouseGender;

            if (areMalesResidents)
            {
                ResidentGender = Gender.male;
                SpouseGender   = Gender.female;
            }
            else
            {
                ResidentGender = Gender.female;
                SpouseGender   = Gender.male;
            }
            var tomarry = result.citizens.FindAll(x => x.gender == ResidentGender && x.state == State.resident &&
                                                  x.RelationshipStatus == MarriageStatus.single && x.age >= MinimumAgeOfCrossStatusMarriages && x.age <= MaximumAgeOfCrossStatusMarriages);
            int current = tomarry.Count;
            int need    = 0;

            for (int age = MinimumAgeOfCrossStatusMarriages; age < MaximumAgeForControlStatistics; age++)
            {
                int           y   = year;
                Gender        gen = ResidentGender;
                int           a   = age;
                GenderYearAge key = new GenderYearAge(gen, y, a);
                need += Chances.Singles[key.ToInt()];
            }
            int WorkINdex       = 0;
            var spousesOverseas = result.citizens.FindAll(x => x.gender == SpouseGender &&
                                                          x.state == State.nonresident && x.RelationshipStatus == MarriageStatus.single &&
                                                          x.age >= MinimumAgeOfCrossStatusMarriages && x.age <= MaximumAgeOfSpouseOverseas);

            while (current > need)
            {
                tomarry[WorkINdex].Marry(spousesOverseas[WorkINdex]);
                WorkINdex++;
                current--;
            }
        }
Пример #2
0
        static public Population CreateInitialPopulation(int year)
        {
            //Residents
            Population result = new Population();

            for (int i = 0; i < MaximulAgeInInitialPopulation; i++)
            {
                int NumberOfPersons = Chances.GetNumberOfPeople(Gender.male, year, i);
                for (int j = 0; j < NumberOfPersons; j++)
                {
                    result.citizens.Add(Person.Initial(Gender.male, i));
                    result.CurrentId++;
                }

                NumberOfPersons = Chances.GetNumberOfPeople(Gender.female, year, i);
                for (int j = 0; j < NumberOfPersons; j++)
                {
                    result.citizens.Add(Person.Initial(Gender.female, i));
                    result.CurrentId++;
                }
            }
            result.ReWriteCHarasteristics(year);


            //Non-residents
            int NonResidents = Chances.GetNonResidentalPOpulation(year, method: Method.statistical);

            for (int j = 0; j < NonResidents; j++)
            {
                result.citizens.Add(Person.Initial(result));
            }
            Dictionary <Tuple <int, Gender>, int> set = new Dictionary <Tuple <int, Gender>, int>();

            List <Gender> genders = new List <Gender>()
            {
                Gender.male, Gender.female
            };


            //Determine widowed ;( persons
            for (int a = MinimumMarriageAgeInitialPopultion; a < MaximulAgeInInitialPopulation; a++)
            {
                int           age = a;
                GenderYearAge genderYearAgeM = new GenderYearAge(Gender.male, year, age);
                GenderYearAge genderYearAgeF = new GenderYearAge(Gender.female, year, age);
                List <Person> peopleM, peopleF;
                if (a < AgeOfOldPeopleInitialPopulation)
                {
                    peopleM = result.citizens.FindAll(x => x.gender == Gender.male && x.state == State.resident && x.age == a);
                    peopleF = result.citizens.FindAll(x => x.gender == Gender.female && x.state == State.resident && x.age == a);
                }
                else
                {
                    peopleM = result.citizens.FindAll(x => x.gender == Gender.male && x.state == State.resident && (x.age == a || x.age == a + AgeGroupSize));
                    peopleF = result.citizens.FindAll(x => x.gender == Gender.female && x.state == State.resident && (x.age == a || x.age == a + AgeGroupSize));
                }

                for (int i = 0; i < Chances.Widowed[genderYearAgeM.ToInt()]; i++)
                {
                    peopleM[i].RelationshipStatus = MarriageStatus.widowed;
                }
                for (int i = 0; i < Chances.Widowed[genderYearAgeF.ToInt()]; i++)
                {
                    peopleF[i].RelationshipStatus = MarriageStatus.widowed;
                }
            }

            //Determine divorced people
            for (int a = MinimumMarriageAgeInitialPopultion; a < MaximulAgeInInitialPopulation; a++)
            {
                int           age = a;
                GenderYearAge genderYearAgeM = new GenderYearAge(Gender.male, year, age);
                GenderYearAge genderYearAgeF = new GenderYearAge(Gender.female, year, age);
                List <Person> peopleM, peopleF;
                if (a < AgeOfOldPeopleInitialPopulation)
                {
                    peopleM = result.citizens.FindAll(x => x.gender == Gender.male && x.state == State.resident && x.age == a && x.RelationshipStatus == MarriageStatus.single);
                    peopleF = result.citizens.FindAll(x => x.gender == Gender.female && x.state == State.resident && x.age == a && x.RelationshipStatus == MarriageStatus.single);
                }
                else
                {
                    peopleM = result.citizens.FindAll(x => x.gender == Gender.male && x.state == State.resident && (x.age == a || x.age == a + 10));
                    peopleF = result.citizens.FindAll(x => x.gender == Gender.female && x.state == State.resident && (x.age == a || x.age == a + 10));
                }
                for (int i = 0; i < Chances.Divorced[genderYearAgeM.ToInt()]; i++)
                {
                    peopleM[i].RelationshipStatus = MarriageStatus.divorced;
                }
                for (int i = 0; i < Chances.Divorced[genderYearAgeF.ToInt()]; i++)
                {
                    peopleF[i].RelationshipStatus = MarriageStatus.divorced;
                }
            }

            //Determine Married people
            for (int a = MinimumMarriageAgeInitialPopultion; a < MaximulAgeInInitialPopulation; a++)
            {
                int           age            = a;
                GenderYearAge genderYearAgeM = new GenderYearAge(Gender.male, year, age);
                List <Person> peopleM        = result.citizens.FindAll(x => x.gender == Gender.male && x.age == a &&
                                                                       x.RelationshipStatus == MarriageStatus.single && x.state == State.resident);
                List <Person> Spouses       = new List <Person>();
                int           AgeDifference = 0;
                do
                {
                    Spouses = result.citizens.FindAll(x => (x.age <= a + AgeDifference &&
                                                            x.age >= a - AgeDifference) && x.RelationshipStatus == MarriageStatus.single && x.gender == Gender.female);
                    AgeDifference++;
                }while (Spouses.Count < peopleM.Count);
                for (int i = 0; i < Math.Min(Chances.Married[genderYearAgeM.ToInt()], peopleM.Count); i++)
                {
                    var spouse = Spouses[i];
                    peopleM[i].Marry(spouse);
                }
            }


            // Male Resident + Females Non-residents marriages
            ResidentNonResidentMarriages(result, year, true);

            // Female Resident + Males Non-residents marriages
            ResidentNonResidentMarriages(result, year, false);



            return(result);
        }
Пример #3
0
 public static double GetChanceToDie(Gender gender, int year, int age, Method method = Method.analytical)
 {
     if (method == Method.statistical)
     {
         GenderYearAge input = new GenderYearAge(gender, year, age);
         int           key   = input.ToInt();
         return(ChancesToDieList[key]);
     }
     if (method == Method.analytical)
     {
         double result = 0;
         int    a      = year - 1989;
         if (gender == Gender.male && age == 0)
         {
             result = -1.507 * Math.Log(a) + 6.8696;
         }
         if (gender == Gender.male && (age >= 1 && age <= 4))
         {
             result = -0.091 * Math.Log(a) + 0.4523;
         }
         if (gender == Gender.male && (age >= 5 && age <= 9))
         {
             result = -0.046 * Math.Log(a) + 0.2429;
         }
         if (gender == Gender.male && (age >= 10 && age <= 14))
         {
             result = -0.076 * Math.Log(a) + 0.369;
         }
         if (gender == Gender.male && (age >= 15 && age <= 19))
         {
             result = -0.106 * Math.Log(a) + 0.608;
         }
         if (gender == Gender.male && (age >= 20 && age <= 24))
         {
             result = -0.152 * Math.Log(a) + 0.9565;
         }
         if (gender == Gender.male && (age >= 25 && age <= 29))
         {
             result = -0.155 * Math.Log(a) + 0.9186;
         }
         if (gender == Gender.male && (age >= 30 && age <= 34))
         {
             result = -0.185 * Math.Log(a) + 1.0377;
         }
         if (gender == Gender.male && (age >= 35 && age <= 39))
         {
             result = -0.237 * Math.Log(a) + 1.5282;
         }
         if (gender == Gender.male && (age >= 40 && age <= 44))
         {
             result = -0.365 * Math.Log(a) + 2.441;
         }
         if (gender == Gender.male && (age >= 45 && age <= 49))
         {
             result = -0.713 * Math.Log(a) + 4.2964;
         }
         if (gender == Gender.male && (age >= 50 && age <= 54))
         {
             result = -1.326 * Math.Log(a) + 7.7206;
         }
         if (gender == Gender.male && (age >= 55 && age <= 59))
         {
             result = -2.518 * Math.Log(a) + 13.957;
         }
         if (gender == Gender.male && (age >= 60 && age <= 64))
         {
             result = -4.742 * Math.Log(a) + 24.841;
         }
         if (gender == Gender.male && (age >= 65 && age <= 69))
         {
             result = -6.697 * Math.Log(a) + 38.041;
         }
         if (gender == Gender.male && (age >= 70 && age <= 74))
         {
             result = -9.03 * Math.Log(a) + 56.477;
         }
         if (gender == Gender.male && (age >= 75 && age <= 79))
         {
             result = -11.66 * Math.Log(a) + 83.901;
         }
         if (gender == Gender.male && (age >= 80 && age <= 84))
         {
             result = -12.69 * Math.Log(a) + 116.78;
         }
         if (gender == Gender.male && (age >= 85))
         {
             result = -4.116 * Math.Log(a) + 148.27;
         }
         if (gender == Gender.female && age == 0)
         {
             result = -1.313 * Math.Log(a) + 5.9082;
         }
         if (gender == Gender.female && (age >= 1 && age <= 4))
         {
             result = -0.06 * Math.Log(a) + 0.3257;
         }
         if (gender == Gender.female && (age >= 5 && age <= 9))
         {
             result = -0.018 * Math.Log(a) + 0.1573;
         }
         if (gender == Gender.female && (age >= 10 && age <= 14))
         {
             result = -0.053 * Math.Log(a) + 0.2716;
         }
         if (gender == Gender.female && (age >= 15 && age <= 19))
         {
             result = -0.042 * Math.Log(a) + 0.3145;
         }
         if (gender == Gender.female && (age >= 20 && age <= 24))
         {
             result = -0.067 * Math.Log(a) + 0.4171;
         }
         if (gender == Gender.female && (age >= 25 && age <= 29))
         {
             result = -0.077 * Math.Log(a) + 0.4547;
         }
         if (gender == Gender.female && (age >= 30 && age <= 34))
         {
             result = -0.111 * Math.Log(a) + 0.6547;
         }
         if (gender == Gender.female && (age >= 35 && age <= 39))
         {
             result = -0.185 * Math.Log(a) + 1.016;
         }
         if (gender == Gender.female && (age >= 40 && age <= 44))
         {
             result = -0.27 * Math.Log(a) + 1.5852;
         }
         if (gender == Gender.female && (age >= 45 && age <= 49))
         {
             result = -0.413 * Math.Log(a) + 2.5501;
         }
         if (gender == Gender.female && (age >= 50 && age <= 54))
         {
             result = -0.826 * Math.Log(a) + 4.7064;
         }
         if (gender == Gender.female && (age >= 55 && age <= 59))
         {
             result = -1.571 * Math.Log(a) + 8.2739;
         }
         if (gender == Gender.female && (age >= 60 && age <= 64))
         {
             result = -2.533 * Math.Log(a) + 13.43;
         }
         if (gender == Gender.female && (age >= 65 && age <= 69))
         {
             result = -4.353 * Math.Log(a) + 22.917;
         }
         if (gender == Gender.female && (age >= 70 && age <= 74))
         {
             result = -7.263 * Math.Log(a) + 38.687;
         }
         if (gender == Gender.female && (age >= 75 && age <= 79))
         {
             result = -9.578 * Math.Log(a) + 59.762;
         }
         if (gender == Gender.female && (age >= 80 && age <= 84))
         {
             result = -11.49 * Math.Log(a) + 87.708;
         }
         if (gender == Gender.female && age >= 85)
         {
             result = -8.574 * Math.Log(a) + 139.41;
         }
         return(result / 1000);
     }
     return(0);
 }