Пример #1
0
        public Donater GetDonater(Random seed, IEnumerable <ZipsAndIncome> Zips)
        {
            var education     = GetValues(EDUCATION, GetNearestIndexInArray(EDUCATIONselect, seed.Next(0, 101)));
            var maritalstatus = GetValues(MARITALSTATUS, GetNearestIndexInArray(MARITALSTATUSselect, seed.Next(0, 101)));
            var children      = GetValues(CHILDREN, GetNearestIndexInArray(CHILDRENselect, seed.Next(0, 101)));
            var device        = GetValues(DEVICE, GetNearestIndexInArray(DEVICEselect, seed.Next(0, 101)));
            var sex           = GetValues(SEX, GetNearestIndexInArray(SEXselect, seed.Next(0, 101)));
            var age           = seed.Next(AGEselect[0], AGEselect[1] + 1);
            var hour          = seed.Next(HOURselect[0], HOURselect[1] + 1);
            var interaction   = seed.Next(INTERACTIONselect[0], INTERACTIONselect[1] + 1);
            var zipId         = seed.Next(ZIPselect[0], ZIPselect[1] + 1);
            var zips          = Zips.Select(z => z.Rank).ToArray();
            var ZipRank       = zips[GetNearestIndexInArray(zips, zipId)];
            var ZipCode       = Zips.First(z => z.Rank == ZipRank);
            var weekday       = seed.Next(1, 8);
            var month         = seed.Next(1, 13);
            var income        = ZipCode.Income + (INCOMEselect * .01);

            income = UpdateIncome(income, education, maritalstatus);
            var amount = income * (seed.Next(AMOUNTselect[0], AMOUNTselect[1] + 1) * .001);

            var donater = new Donater
            {
                Education     = education,
                MaritalStatus = maritalstatus,
                Children      = children,
                Device        = device,
                Sex           = sex,
                Age           = age,
                Hour          = hour,
                Interactions  = interaction,
                Zip           = ZipCode.Zip,
                Income        = Convert.ToInt32(income),
                WeekDay       = weekday,
                Month         = month,
                Amount        = Convert.ToInt32(amount),
                Profile       = this.GetType().Name
            };

            donater.Amount = UpdateAmount(donater);
            return(donater);
        }
Пример #2
0
        protected int UpdateAmount(Donater donater)
        {
            var    originalAmount = donater.Amount;
            double modifier       = 0;

            switch (donater.Device)
            {
            case "W": { modifier += originalAmount * .1; break; }

            case "M": { modifier += originalAmount * -.1; break; }

            default: { modifier += originalAmount * -.15; break; }
            }

            if (donater.Hour >= 1 && donater.Hour <= 8)
            {
                modifier += originalAmount * -.01;
            }

            if (donater.Hour >= 9 && donater.Hour <= 17)
            {
                modifier += originalAmount * .01;
            }

            if (donater.Interactions >= 6 && donater.Interactions <= 10)
            {
                modifier += originalAmount * .01;
            }

            if (donater.Interactions >= 10)
            {
                modifier += originalAmount * .02;
            }

            switch (donater.Device)
            {
            case "H": { modifier += originalAmount * -.01; break; }

            case "C": { modifier += 0; break; }

            default:  { modifier += originalAmount * .01; break; }
            }

            switch (donater.MaritalStatus)
            {
            case "S": { modifier += originalAmount * .01; break; }

            case "M": { modifier += 0; break; }

            default: { modifier += originalAmount * -.01; break; }
            }
            var children = Convert.ToInt32(donater.Children);

            if (children > 0)
            {
                modifier += originalAmount * (Convert.ToInt32(donater.Children) * -.01);
            }

            var rawAmount = originalAmount + modifier;

            return(10 * (int)Math.Round(rawAmount / 10));
        }