On Sat, Apr 09, 2011 at 07:20:48PM -0000, l...@apache.org wrote:
> Author: luc
> Date: Sat Apr  9 19:20:47 2011
> New Revision: 1090656
> 
> URL: http://svn.apache.org/viewvc?rev=1090656&view=rev
> Log:
> Fixed two errors in simplex solver when entries are close together or
> when variables are not restricted to non-negative.
> 
> Jira: MATH-434
> 
> Modified:
>     commons/proper/math/trunk/pom.xml
>     
> commons/proper/math/trunk/src/main/java/org/apache/commons/math/optimization/linear/SimplexSolver.java
>     
> commons/proper/math/trunk/src/main/java/org/apache/commons/math/optimization/linear/SimplexTableau.java
>     commons/proper/math/trunk/src/site/xdoc/changes.xml
>     
> commons/proper/math/trunk/src/test/java/org/apache/commons/math/optimization/linear/SimplexSolverTest.java
> 
> Modified: commons/proper/math/trunk/pom.xml
> URL: 
> http://svn.apache.org/viewvc/commons/proper/math/trunk/pom.xml?rev=1090656&r1=1090655&r2=1090656&view=diff
> ==============================================================================
> --- commons/proper/math/trunk/pom.xml (original)
> +++ commons/proper/math/trunk/pom.xml Sat Apr  9 19:20:47 2011
> @@ -187,6 +187,9 @@
>        <name>J. Lewis Muir</name>
>      </contributor>
>      <contributor>
> +      <name>Thomas Neidhart</name>
> +    </contributor>
> +    <contributor>
>        <name>Fredrik Norin</name>
>      </contributor>
>      <contributor>
> 
> Modified: 
> commons/proper/math/trunk/src/main/java/org/apache/commons/math/optimization/linear/SimplexSolver.java
> URL: 
> http://svn.apache.org/viewvc/commons/proper/math/trunk/src/main/java/org/apache/commons/math/optimization/linear/SimplexSolver.java?rev=1090656&r1=1090655&r2=1090656&view=diff
> ==============================================================================
> --- 
> commons/proper/math/trunk/src/main/java/org/apache/commons/math/optimization/linear/SimplexSolver.java
>  (original)
> +++ 
> commons/proper/math/trunk/src/main/java/org/apache/commons/math/optimization/linear/SimplexSolver.java
>  Sat Apr  9 19:20:47 2011
> @@ -22,6 +22,7 @@ import java.util.List;
>  
>  import org.apache.commons.math.optimization.OptimizationException;
>  import org.apache.commons.math.optimization.RealPointValuePair;
> +import org.apache.commons.math.util.FastMath;
>  import org.apache.commons.math.util.MathUtils;
>  
>  
> @@ -31,26 +32,34 @@ import org.apache.commons.math.util.Math
>   * @since 2.0
>   */
>  public class SimplexSolver extends AbstractLinearOptimizer {
> -
> -    /** Default amount of error to accept in floating point comparisons. */
> +    
> +    /** Default amount of error to accept for algorithm convergence. */
>      private static final double DEFAULT_EPSILON = 1.0e-6;
> -
> -    /** Amount of error to accept in floating point comparisons. */
> +     
> +    /** Amount of error to accept for algorithm convergence. */
>      protected final double epsilon;
>  
> +    /** Default amount of error to accept in floating point comparisons (as 
> ulps). */
> +    private static final int DEFAULT_ULPS = 10;
> +
> +    /** Amount of error to accept in floating point comparisons (as ulps). */
> +    protected final int maxUlps;
> +
>      /**
>       * Build a simplex solver with default settings.
>       */
>      public SimplexSolver() {
> -        this(DEFAULT_EPSILON);
> +        this(DEFAULT_EPSILON, DEFAULT_ULPS);
>      }
>  
>      /**
>       * Build a simplex solver with a specified accepted amount of error
> -     * @param epsilon the amount of error to accept in floating point 
> comparisons
> +     * @param epsilon the amount of error to accept for algorithm convergence
> +     * @param maxUlps amount of error to accept in floating point 
> comparisons 
>       */
> -    public SimplexSolver(final double epsilon) {
> +    public SimplexSolver(final double epsilon, final int maxUlps) {
>          this.epsilon = epsilon;
> +        this.maxUlps = maxUlps;
>      }
>  
>      /**
> @@ -62,8 +71,9 @@ public class SimplexSolver extends Abstr
>          double minValue = 0;
>          Integer minPos = null;
>          for (int i = tableau.getNumObjectiveFunctions(); i < 
> tableau.getWidth() - 1; i++) {
> -            if (MathUtils.compareTo(tableau.getEntry(0, i), minValue, 
> epsilon) < 0) {
> -                minValue = tableau.getEntry(0, i);
> +            final double entry = tableau.getEntry(0, i);
> +            if (MathUtils.compareTo(entry, minValue, getEpsilon(entry)) < 0) 
> {

                                                       ^^^^^^^^^^^^^^^^^^

I thought that Thomas agreed that "MathUtils.equals(double,double,int)"
should be used instead of "getEpsilon".


Gilles

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org
For additional commands, e-mail: dev-h...@commons.apache.org

Reply via email to