You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@commons.apache.org by "Thomas Weise (JIRA)" <ji...@apache.org> on 2016/06/11 12:39:20 UTC

[jira] [Created] (MATH-1376) SimplexOptimizer.doOptimize(): Wrong Iteration Number (0) Passed to Convergence Checker

Thomas Weise created MATH-1376:
----------------------------------

             Summary: SimplexOptimizer.doOptimize(): Wrong Iteration Number (0) Passed to Convergence Checker
                 Key: MATH-1376
                 URL: https://issues.apache.org/jira/browse/MATH-1376
             Project: Commons Math
          Issue Type: Bug
    Affects Versions: 3.6.1
            Reporter: Thomas Weise
            Priority: Minor


The convergence checker used in method doOptimize() of SimplexOptimizer always receives 0 as iteration counter. This can very easily be fixed. Check this out:

Original (with added comments):

{code}
int iteration = 0; // XXXXXXXXX set to zero and never update
        final ConvergenceChecker<PointValuePair> checker = getConvergenceChecker();
        while (true) {
            if (getIterations() > 0) {
                boolean converged = true;
                for (int i = 0; i < simplex.getSize(); i++) {
                    PointValuePair prev = previous[i];
                    converged = converged && // XXXXXXXXX ouch below
                        checker.converged(iteration, prev, simplex.getPoint(i));
                }
                if (converged) {
                    // We have found an optimum.
                    return simplex.getPoint(0);
                }
            }
{code}

should be (with added comments)

{code}
int iteration = 0;
        final ConvergenceChecker<PointValuePair> checker = getConvergenceChecker();
        while (true) {
            iteration = getIterations(); // XXXXXXXX CHANGE 1
            if (iteration > 0) {  // XXXXXXXX CHANGE 2
                boolean converged = true;
                for (int i = 0; i < simplex.getSize(); i++) {
                    PointValuePair prev = previous[i];
                    converged = converged &&
                        checker.converged(iteration, prev, simplex.getPoint(i));
                }
                if (converged) {
                    // We have found an optimum.
                    return simplex.getPoint(0);
                }
            }
{code}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)