private Task PostOperationActionAsync(PollinatorsGroup group, Pollinator currentPollinator,
                                              Pollinator newPollinator)
        {
            var ruleArgument = new ResetPollinationRuleArgument(group, newPollinator);

            return(_resetPollinationRule.ApplyRuleAsync(currentPollinator, ruleArgument));
        }
    private ConfirmationEmailTemplate GetAdminEmailTemplate(string adminName, string adminEmail, UserDetail userInfo, Pollinator.DataAccess.PolinatorInformation pollinator)
    {
        String path = Request.PhysicalApplicationPath + "\\EmailTemplates\\RegisterEmailAdmin.html";
        Uri uri = HttpContext.Current.Request.Url;
        string webAppUrl = uri.GetLeftPart(UriPartial.Authority); //Return both host and port

        using (StreamReader reader = File.OpenText(path))
        {
            String content = reader.ReadToEnd();  // Load the content from your file...
            content = content.Replace("{AdminName}", adminName);
            content = content.Replace("{RegisterName}", userInfo.FirstName);
            content = content.Replace("{UserType}", "PREMIUM");
            content = content.Replace("{ShareMapUrl}", webAppUrl + "/Pollinator/ShareMap.aspx");
            content = content.Replace("{OrganizationName}", pollinator.OrganizationName);
            content = content.Replace("{PhoneNumber}", userInfo.PhoneNumber);
            content = content.Replace("{LandscapeStreet}", pollinator.LandscapeStreet);
            content = content.Replace("{LandscapeCity}", pollinator.LandscapeCity);
            content = content.Replace("{LandscapeState}", pollinator.LandscapeState);
            content = content.Replace("{LandscapeZipcode}", pollinator.LandscapeZipcode);
            content = content.Replace("{PollinatorSize}", pollinator.PollinatorSize.ToString());
            content = content.Replace("{PollinatorType}", pollinator.PollinatorType.ToString());
            content = content.Replace("{LogonLink}", webAppUrl + "/Pollinator/Account/Login");

            var membership = System.Web.Security.Membership.GetUser(userInfo.UserId);

            var emailTemplate = new ConfirmationEmailTemplate();
            emailTemplate.EmailTo = adminEmail;
            emailTemplate.EmailFrom = Utility.EmailConfiguration.WebMasterEmail;
            emailTemplate.Subject = "Thank you for registering with S.H.A.R.E!";
            emailTemplate.EmailBodyTemplate = content;

            return emailTemplate;
        }
    }
示例#3
0
 public static void EnsureValuesCorrect(this Pollinator pollinator)
 {
     if (!pollinator.Accept(RootCheckerPollinatorVisitor))
     {
         throw new ArgumentException($"Pollinator got NaN or +/- Infinity. Pollinator - {ToString(pollinator)}");
     }
 }
        public ResetPollinationRuleArgument(PollinatorsGroup group, Pollinator newPollinator)
        {
            ThrowIf.Null(group, nameof(group));
            ThrowIf.Null(newPollinator, nameof(newPollinator));

            Group         = group;
            NewPollinator = newPollinator;
        }
        private Task <Pollinator> GlobalPollinationAsync(PollinatorsGroup group, Pollinator pollinator)
        {
            var bestPollinator = group.GetBestSolution(_functionStrategy, _algorithmSettings.IsMin);

            var ruleArgument = new GlobalPollinationRuleArgument(bestPollinator);

            return(_globalPollinationRule.ApplyRuleAsync(pollinator, ruleArgument));
        }
        private Task <Pollinator> LocalPollinationAsync(PollinatorsGroup group, Pollinator pollinator)
        {
            var randomPollinator = group.ElementAt(RandomGenerator.Random.Next() % group.Count());

            var ruleArgument = new LocalPollinationRuleArgument(randomPollinator);

            return(_localPollinationRule.ApplyRuleAsync(pollinator, ruleArgument));
        }
示例#7
0
        public void EqualShouldReturnTrueIfEllementIsSame()
        {
            // Arrange
            var p1 = new Pollinator(new[] { 0.0, 1.0, 2.0, 3.0 });

            // Act
            // Assert
            p1.Equals(p1).ShouldBeTrue();
        }
示例#8
0
        public Pollinator Update(Pollinator pollinator)
        {
            var values = pollinator.ToArray();

            var i = RandomGenerator.Random.Next() % pollinator.Size;

            values[i] = RandomGenerator.Random.NextDouble();

            return(new Pollinator(values));
        }
示例#9
0
        public void EqualsShouldReturnTrueIfPollinatorsAreEqual()
        {
            // Arrange
            var p1 = new Pollinator(new[] { 0.0, 1.0, 2.0, 3.0 });
            var p2 = new Pollinator(new[] { 0.0, 1.0, 2.0, 3.0 });

            // Act
            // Assert
            p1.Equals(p2).ShouldBeTrue();
            p2.Equals(p1).ShouldBeTrue();
        }
示例#10
0
        public PollinatorsGroup Create(int groupSize, int variablesCount)
        {
            var pollinators = new Pollinator[groupSize];

            for (var i = 0; i < groupSize; i++)
            {
                pollinators[i] = _pollinatorCreator.Create(variablesCount);
            }

            return(new PollinatorsGroup(pollinators));
        }
示例#11
0
        public void EqualsShouldReturnFalseIfPollinatorsAreHaveDifferentSizes()
        {
            // Arrange
            var p1 = new Pollinator(new[] { 0.0, 1.0, 2.0, 3.0 });
            var p2 = new Pollinator(new[] { 0.0, 1.0, 2.0, 3.0, 4.0 });

            // Act
            // Assert
            p1.Equals(p2).ShouldBeFalse();
            p2.Equals(p1).ShouldBeFalse();
        }
示例#12
0
        public void EqualsShouldReturnFalseIfAnotherTypeIsObject()
        {
            // Arrange
            var p1 = new Pollinator(new[] { 0.0, 1.0, 2.0, 3.0 });
            var p2 = new object();

            // Act
            // Assert
            p1.Equals(p2).ShouldBeFalse();
            p2.Equals(p1).ShouldBeFalse();
        }
        public Task <Pollinator> PolinateOnceAsync(PollinatorsGroup group, Pollinator pollinator)
        {
            var random = RandomGenerator.Random;

            if (random.NextDouble() < _algorithmSettings.P)
            {
                return(GlobalPollinationAsync(group, pollinator));
            }

            return(LocalPollinationAsync(group, pollinator));
        }
示例#14
0
        public void EqualsShouldReturnFalseIfPollinatorsAreNotEqualAtLeastInOneElement()
        {
            // Arrange
            var p1 = new Pollinator(new[] { 0.0, 1.0, 2.0, 3.0 });
            var p2 = new Pollinator(new[] { 0.0, 1.0, 2.0, 3.01 });

            // Act
            // Assert
            p1.Equals(p2).ShouldBeFalse();
            p2.Equals(p1).ShouldBeFalse();
        }
        public Task <Pollinator> ApplyRuleAsync(Pollinator pollinator, ResetPollinationRuleArgument ruleArgument)
        {
            var current = ruleArgument.NewPollinator;
            var group   = ruleArgument.Group;

            return(Task.Run(() =>
            {
                if (!current.CheckWhetherValuesCorrect())
                {
                    _logger.Error($"Pollinator got NaN or +/- Infinity. Pollinator - {PollinatorExtensions.ToString(current)}");
                    return pollinator;
                }

                Pollinator best;

                var currentSolution = pollinator.CountFunction(_functionStrategy);
                var newSolution = current.CountFunction(_functionStrategy);

                _logger.Trace($"Current solution {currentSolution}");
                _logger.Trace($"New solution {newSolution}");

                if (currentSolution > newSolution && _isMin ||
                    newSolution > currentSolution && !_isMin)
                {
                    group.Replace(pollinator, current);
                    best = current;
                }
                else
                {
                    best = pollinator;
                }

                if (RandomGenerator.Random.NextDouble() < _pReset)
                {
                    _logger.Trace($"Before pollinator reset is {PollinatorExtensions.ToString(best)}");

                    var generated = _pollinatorUpdater.Update(best);
                    group.Replace(best, generated);
                    best = generated;

                    _logger.Trace($"After pollinator reset is {PollinatorExtensions.ToString(best)}");
                }

                return best;
            }));
        }
示例#16
0
        public void AddShouldFailIfSizesAreNotEqual()
        {
            // Arrange
            var d1 = new[] { 0.0, 1.0, 2.0, 3.0 };
            var d2 = new[] { -1.0, 2.0, 4.5, 7.8, 9.1 };

            var p1 = new Pollinator(d1);
            var p2 = new Pollinator(d2);

            // Act
            Action action = () =>
            {
                var p = p1 + p2;
            };

            action.ShouldThrow <Exception>();
        }
        public bool Visit(Pollinator pollinator)
        {
            foreach (var element in pollinator)
            {
                if (double.IsNaN(element))
                {
                    return(false);
                }

                if (double.IsInfinity(element))
                {
                    return(false);
                }
            }

            return(true);
        }
        public Task <Pollinator> ApplyRuleAsync(Pollinator pollinator, LocalPollinationRuleArgument ruleArgument)
        {
            var randomPollinator = ruleArgument.RandomPollinator;

            _logger.Trace($"Random pollinator is {PollinatorExtensions.ToString(randomPollinator)}");
            _logger.Trace($"Current pollinator is {PollinatorExtensions.ToString(pollinator)}");

            return(Task.Run(() =>
            {
                var rand = RandomGenerator.Random.NextDouble();

                var result = pollinator + rand * randomPollinator - pollinator;

                _logger.Trace($"Global result pollinator is {PollinatorExtensions.ToString(result)}");

                return result;
            }));
        }
    public void SendRegisterEmail(UserDetail userInfo, Pollinator.DataAccess.PolinatorInformation pollinator)
    {
        var emails = new List<ConfirmationEmailTemplate>();

        var userEmailTemplate = GetUserEmailTemplate(userInfo, pollinator);
        emails.Add(userEmailTemplate);

        var Administrators = new List<string>();
        Administrators.Add("Truong"); //Dummy data, must be replaced with real Admin name

        foreach(var admin in Administrators)
        {
            string adminEmail = "*****@*****.**";//DUMMY data, must replaced with real data of Admin user

            var adminEmailTemplate = GetAdminEmailTemplate(admin, adminEmail, userInfo, pollinator);
            emails.Add(adminEmailTemplate);
        }

        Session["Emails"] = emails;
    }
示例#20
0
        public void AddShouldDoIt()
        {
            // Arrange
            var d1 = new[] { 0.0, 1.0, 2.0, 3.0 };
            var d2 = new[] { -1.0, 2.0, 4.5, 7.8 };

            var p1 = new Pollinator(d1);
            var p2 = new Pollinator(d2);

            // Act
            var p = p1 + p2;

            var d = new double[d1.Length];

            for (var i = 0; i < d1.Length; i++)
            {
                d[i] = d1[i] + d2[i];
            }

            // Assert
            p.SequenceEqual(d).ShouldBeTrue();
        }
    //This function will send emails in background...
    public void SendRegisterEmail(UserDetail userInfo, Pollinator.DataAccess.PolinatorInformation pollinator)
    {
        phEmailTasks.Controls.Add(new LiteralControl("<iframe src='" + ResolveUrl("../AsyncSendEmail") + "' id='AsyncSendEmails' scrolling='no'></iframe>"));

        var emails = new List<ConfirmationEmailTemplate>();

        var userEmailTemplate = GetUserEmailTemplate(userInfo, pollinator);
        emails.Add(userEmailTemplate); //Add emailing for new user

        //var Administrators = new List<string>();
        //Administrators.Add("Truong"); //Dummy data, must be replaced with real Admin name

        foreach (var adminEmail in GetListAdmin())
        {
            var adminName = adminEmail.Substring(0, adminEmail.IndexOf("@"));
            var adminEmailTemplate = GetAdminEmailTemplate(adminName, adminEmail, userInfo, pollinator);
            emails.Add(adminEmailTemplate); //Add emailing for Administrators
        }

        //Put them all in session object which will be retrieved in Async process running in background
        Session["Emails"] = emails;
    }
        public Task <Pollinator> ApplyRuleAsync(Pollinator pollinator, GlobalPollinationRuleArgument ruleArgument)
        {
            var bestPollinator = ruleArgument.BestPollinator;

            _logger.Trace($"Best pollinator is {PollinatorExtensions.ToString(bestPollinator)}");
            _logger.Trace($"Current pollinator is {PollinatorExtensions.ToString(pollinator)}");

            return(Task.Run(() =>
            {
                var distanceDifference = (pollinator - bestPollinator)
                                         .CountFunction(FunctionStrategies.FunctionStrategies.DistanceFunction);

                var lambda = FunctionStrategies.FunctionStrategies.LambdaFunction(distanceDifference);

                var rand = FunctionStrategies.FunctionStrategies.MantegnaFunction(lambda);

                var result = pollinator + rand * (pollinator - bestPollinator);

                _logger.Trace($"Global result pollinator is {PollinatorExtensions.ToString(result)}");

                return result;
            }));
        }
 public string Visit(Pollinator pollinator)
 {
     return(string.Join(";", pollinator));
 }
        public LocalPollinationRuleArgument(Pollinator randomPollinator)
        {
            ThrowIf.Null(randomPollinator, nameof(randomPollinator));

            RandomPollinator = randomPollinator;
        }
示例#25
0
 public static bool CheckWhetherValuesCorrect(this Pollinator pollinator)
 {
     return(pollinator.Accept(RootCheckerPollinatorVisitor));
 }
 public double Visit(Pollinator pollinator)
 {
     return(_func(pollinator.ToArray()));
 }
示例#27
0
 public static string ToString(this Pollinator pollinator)
 {
     return(pollinator.Accept(ToStringPollinatorVisitor));
 }
 public StepFinishedArgs(Pollinator best, int step)
 {
     Best = best;
     Step = step;
 }
        public GlobalPollinationRuleArgument(Pollinator bestPollinator)
        {
            ThrowIf.Null(bestPollinator, nameof(bestPollinator));

            BestPollinator = bestPollinator;
        }
示例#30
0
 public static double CountFunction(this Pollinator pollinator, Func <double[], double> functionStrategy)
 {
     return(pollinator.Accept(new CountFunctionPollinatorVisitor(functionStrategy)));
 }
    private ConfirmationEmailTemplate GetUserEmailTemplate(UserDetail userInfo, Pollinator.DataAccess.PolinatorInformation pollinator)
    {
        String path = Request.PhysicalApplicationPath + "\\EmailTemplates\\RegisterEmail.html";
        Uri uri = HttpContext.Current.Request.Url;
        string webAppUrl = uri.GetLeftPart(UriPartial.Authority); //Return both host and port
        string userType = userInfo.MembershipLevel == 0 ? "NORMAL" : "PREMIUM";
        using (StreamReader reader = File.OpenText(path))
        {
            String content = reader.ReadToEnd();  // Load the content from your file...
            content = content.Replace("{RegisterName}", userInfo.FirstName);
            content = content.Replace("{UserName}", System.Web.Security.Membership.GetUser(userInfo.UserId).UserName);
            content = content.Replace("{UserType}", userType);
            content = content.Replace("{ShareMapUrl}", webAppUrl + "/ShareMap");
            content = content.Replace("{OrganizationName}", pollinator.OrganizationName);
            content = content.Replace("{PhoneNumber}", userInfo.PhoneNumber);
            content = content.Replace("{LandscapeStreet}", pollinator.LandscapeStreet);
            content = content.Replace("{LandscapeCity}", pollinator.LandscapeCity);
            content = content.Replace("{LandscapeState}", pollinator.LandscapeState);
            content = content.Replace("{LandscapeZipcode}", pollinator.LandscapeZipcode);
            content = content.Replace("{PollinatorSize}", pollinator.PollinatorSize.ToString());
            content = content.Replace("{PollinatorType}", pollinator.PollinatorType.ToString());
            content = content.Replace("{LogonLink}", webAppUrl + "/ShareMap#login_form");

            var webAppPath = WebHelper.FullyQualifiedApplicationPath;
            content = content.Replace("{SiteLogo}", webAppPath + WebHelper.SiteLogo);

            var membership = System.Web.Security.Membership.GetUser(userInfo.UserId);

            var emailTemplate = new ConfirmationEmailTemplate();
            emailTemplate.EmailTo = membership.Email;// "[email protected];[email protected]"; //DUMMY data, must replaced with real data of register user
            emailTemplate.EmailFrom = Utility.EmailConfiguration.WebMasterEmail;
            emailTemplate.Subject = "Thank you for registering with S.H.A.R.E!";
            emailTemplate.EmailBodyTemplate = content;

            return emailTemplate;
        }
    }