Rename enum to uppercase, make test deterministic.

git-svn-id: https://svn.apache.org/repos/asf/commons/proper/math/trunk@1551058 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Thomas Neidhart 2013-12-15 21:15:21 +00:00
parent 05aae985d9
commit f7222ca6c3
3 changed files with 11 additions and 9 deletions

View File

@ -29,11 +29,11 @@ public enum PivotSelectionRule implements OptimizationData {
* The classical rule, the variable with the most negative coefficient * The classical rule, the variable with the most negative coefficient
* in the objective function row will be chosen as entering variable. * in the objective function row will be chosen as entering variable.
*/ */
Dantzig, DANTZIG,
/** /**
* The first variable with a negative coefficient in the objective function * The first variable with a negative coefficient in the objective function
* row will be chosen as entering variable. This rule guarantees to prevent * row will be chosen as entering variable. This rule guarantees to prevent
* cycles, but may take longer to find an optimal solution. * cycles, but may take longer to find an optimal solution.
*/ */
Bland BLAND
} }

View File

@ -129,7 +129,7 @@ public class SimplexSolver extends LinearOptimizer {
this.epsilon = epsilon; this.epsilon = epsilon;
this.maxUlps = maxUlps; this.maxUlps = maxUlps;
this.cutOff = cutOff; this.cutOff = cutOff;
this.pivotSelection = PivotSelectionRule.Dantzig; this.pivotSelection = PivotSelectionRule.DANTZIG;
} }
/** /**
@ -203,7 +203,7 @@ public class SimplexSolver extends LinearOptimizer {
minPos = i; minPos = i;
// Bland's rule: chose the entering column with the lowest index // Bland's rule: chose the entering column with the lowest index
if (pivotSelection == PivotSelectionRule.Bland && isValidPivotColumn(tableau, i)) { if (pivotSelection == PivotSelectionRule.BLAND && isValidPivotColumn(tableau, i)) {
break; break;
} }
} }

View File

@ -55,7 +55,7 @@ public class SimplexSolverTest {
PointValuePair solution = solver.optimize(f, new LinearConstraintSet(constraints), PointValuePair solution = solver.optimize(f, new LinearConstraintSet(constraints),
GoalType.MAXIMIZE, GoalType.MAXIMIZE,
new NonNegativeConstraint(true), new NonNegativeConstraint(true),
PivotSelectionRule.Bland); PivotSelectionRule.BLAND);
Assert.assertEquals(1.0d, solution.getValue(), epsilon); Assert.assertEquals(1.0d, solution.getValue(), epsilon);
Assert.assertTrue(validSolution(solution, constraints, epsilon)); Assert.assertTrue(validSolution(solution, constraints, epsilon));
} }
@ -98,8 +98,10 @@ public class SimplexSolverTest {
constraints.add(new LinearConstraint(new double[] {15.0, -46.0, -41.0, -83.0, -98.0, -99.0, -21.0, -35.0, -7.0, -14.0, -80.0, -63.0, -18.0, -42.0, -5.0, -34.0, -56.0, -70.0, -16.0, -18.0, -74.0, -61.0, -47.0, -41.0, -15.0, -79.0, -18.0, -47.0, -88.0, -68.0, -55.0,}, Relationship.GEQ, 0.0)); constraints.add(new LinearConstraint(new double[] {15.0, -46.0, -41.0, -83.0, -98.0, -99.0, -21.0, -35.0, -7.0, -14.0, -80.0, -63.0, -18.0, -42.0, -5.0, -34.0, -56.0, -70.0, -16.0, -18.0, -74.0, -61.0, -47.0, -41.0, -15.0, -79.0, -18.0, -47.0, -88.0, -68.0, -55.0,}, Relationship.GEQ, 0.0));
double epsilon = 1e-6; double epsilon = 1e-6;
PointValuePair solution = new SimplexSolver().optimize(DEFAULT_MAX_ITER, f, new LinearConstraintSet(constraints), PointValuePair solution = new SimplexSolver().optimize(DEFAULT_MAX_ITER, f,
GoalType.MINIMIZE, new NonNegativeConstraint(true)); new DeterministicLinearConstraintSet(constraints),
GoalType.MINIMIZE, new NonNegativeConstraint(true),
PivotSelectionRule.BLAND);
Assert.assertEquals(1.0d, solution.getValue(), epsilon); Assert.assertEquals(1.0d, solution.getValue(), epsilon);
Assert.assertTrue(validSolution(solution, constraints, epsilon)); Assert.assertTrue(validSolution(solution, constraints, epsilon));
} }
@ -765,7 +767,7 @@ public class SimplexSolverTest {
// we need to use a DeterministicLinearConstraintSet to always get the same behavior // we need to use a DeterministicLinearConstraintSet to always get the same behavior
solver.optimize(new MaxIter(100), f, new DeterministicLinearConstraintSet(constraints), solver.optimize(new MaxIter(100), f, new DeterministicLinearConstraintSet(constraints),
GoalType.MINIMIZE, new NonNegativeConstraint(true), callback, GoalType.MINIMIZE, new NonNegativeConstraint(true), callback,
PivotSelectionRule.Bland); PivotSelectionRule.BLAND);
Assert.fail("expected TooManyIterationsException"); Assert.fail("expected TooManyIterationsException");
} catch (TooManyIterationsException ex) { } catch (TooManyIterationsException ex) {
// expected // expected
@ -779,7 +781,7 @@ public class SimplexSolverTest {
// we need to use a DeterministicLinearConstraintSet to always get the same behavior // we need to use a DeterministicLinearConstraintSet to always get the same behavior
solver.optimize(new MaxIter(111), f, new DeterministicLinearConstraintSet(constraints), solver.optimize(new MaxIter(111), f, new DeterministicLinearConstraintSet(constraints),
GoalType.MINIMIZE, new NonNegativeConstraint(true), callback, GoalType.MINIMIZE, new NonNegativeConstraint(true), callback,
PivotSelectionRule.Bland); PivotSelectionRule.BLAND);
//Assert.fail("expected TooManyIterationsException"); //Assert.fail("expected TooManyIterationsException");
} catch (TooManyIterationsException ex) { } catch (TooManyIterationsException ex) {
// expected // expected