commons-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Andrea (JIRA)" <j...@apache.org>
Subject [jira] Created: (MATH-293) Matrix's "OutOfBoundException" in SimplexSolver
Date Wed, 09 Sep 2009 14:08:57 GMT
Matrix's "OutOfBoundException" in SimplexSolver
-----------------------------------------------

                 Key: MATH-293
                 URL: https://issues.apache.org/jira/browse/MATH-293
             Project: Commons Math
          Issue Type: Bug
    Affects Versions: Nightly Builds
         Environment: java 1.6 on Windows XP 32-Bit
            Reporter: Andrea


Hi all,
This bug is somehow related to incident MATH-286, but not necessarily...

Let's say I have an LP and I solve it using SimplexSolver. Then I create a second LP similar
to the first one, but with "stronger" constraints. The second LP has the following properties:
* the only point in the feasible region for the second LP is the solution returned for the
first LP
* the solution returned for the first LP is also the (only possible) solution to the second
LP

This shows the problem:

{code:borderStyle=solid}
LinearObjectiveFunction f = new LinearObjectiveFunction(new double[] { 0.8, 0.2, 0.7, 0.3,
0.4, 0.6}, 0 );
Collection<LinearConstraint> constraints = new ArrayList<LinearConstraint>();
constraints.add(new LinearConstraint(new double[] { 1, 0, 1, 0, 1, 0 }, Relationship.EQ, 30.0));
constraints.add(new LinearConstraint(new double[] { 0, 1, 0, 1, 0, 1 }, Relationship.EQ, 30.0));
constraints.add(new LinearConstraint(new double[] { 0.8, 0.2, 0.0, 0.0, 0.0, 0.0 }, Relationship.GEQ,
10.0));
constraints.add(new LinearConstraint(new double[] { 0.0, 0.0, 0.7, 0.3, 0.0, 0.0 }, Relationship.GEQ,
10.0));
constraints.add(new LinearConstraint(new double[] { 0.0, 0.0, 0.0, 0.0, 0.4, 0.6 }, Relationship.GEQ,
10.0));

RealPointValuePair solution = new SimplexSolver().optimize(f, constraints, GoalType.MAXIMIZE,
true);

double valA = 0.8 * solution.getPoint()[0] + 0.2 * solution.getPoint()[1];
double valB = 0.7 * solution.getPoint()[2] + 0.3 * solution.getPoint()[3];
double valC = 0.4 * solution.getPoint()[4] + 0.6 * solution.getPoint()[5];

f = new LinearObjectiveFunction(new double[] { 0.8, 0.2, 0.7, 0.3, 0.4, 0.6}, 0 );
constraints = new ArrayList<LinearConstraint>();
constraints.add(new LinearConstraint(new double[] { 1, 0, 1, 0, 1, 0 }, Relationship.EQ, 30.0));
constraints.add(new LinearConstraint(new double[] { 0, 1, 0, 1, 0, 1 }, Relationship.EQ, 30.0));
constraints.add(new LinearConstraint(new double[] { 0.8, 0.2, 0.0, 0.0, 0.0, 0.0 }, Relationship.GEQ,
valA));
constraints.add(new LinearConstraint(new double[] { 0.0, 0.0, 0.7, 0.3, 0.0, 0.0 }, Relationship.GEQ,
valB));
constraints.add(new LinearConstraint(new double[] { 0.0, 0.0, 0.0, 0.0, 0.4, 0.6 }, Relationship.GEQ,
valC));

solution = new SimplexSolver().optimize(f, constraints, GoalType.MAXIMIZE, true);
{code} 

Instead of returning the solution, SimplexSolver throws an Exception:

{noformat} Exception in thread "main" org.apache.commons.math.linear.MatrixIndexException:
no entry at indices (0, 7) in a 6x7 matrix
	at org.apache.commons.math.linear.Array2DRowRealMatrix.getEntry(Array2DRowRealMatrix.java:356)
	at org.apache.commons.math.optimization.linear.SimplexTableau.getEntry(SimplexTableau.java:408)
	at org.apache.commons.math.optimization.linear.SimplexTableau.getBasicRow(SimplexTableau.java:258)
	at org.apache.commons.math.optimization.linear.SimplexTableau.getSolution(SimplexTableau.java:336)
	at org.apache.commons.math.optimization.linear.SimplexSolver.doOptimize(SimplexSolver.java:182)
	at org.apache.commons.math.optimization.linear.AbstractLinearOptimizer.optimize(AbstractLinearOptimizer.java:106){noformat}


I was too optimistic with the bug MATH-286 ;-)

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


Mime
View raw message