Search in sources :

Example 11 with Result

use of org.ojalgo.optimisation.Optimisation.Result in project ojAlgo by optimatika.

the class BurkardtDatasetsMps method testMPStestprob.

/**
 * A simple problem with 4 rows and 3 variables. I got my version from here (same numbers but different
 * names): <a href="http://en.wikipedia.org/wiki/MPS_(format)">testprob@wikipedia</a> and/or
 * <a href="http://lpsolve.sourceforge.net/5.5/mps-format.htm">testprob@lpsolve</a>
 */
@Test
public void testMPStestprob() {
    final Variable tmpXONE = new Variable("XONE").weight(ONE).lower(ZERO).upper(FOUR);
    final Variable tmpYTWO = new Variable("YTWO").weight(FOUR).lower(NEG).upper(ONE);
    final Variable tmpZTHREE = new Variable("ZTHREE").weight(NINE).lower(ZERO).upper(null);
    final Variable[] tmpVariables = new Variable[] { tmpXONE, tmpYTWO, tmpZTHREE };
    final ExpressionsBasedModel tmpExpModel = new ExpressionsBasedModel(tmpVariables);
    final Expression tmpLIM1 = tmpExpModel.addExpression("LIM1");
    for (int v = 0; v < tmpVariables.length; v++) {
        tmpLIM1.set(v, new BigDecimal[] { ONE, ONE, ZERO }[v]);
    }
    tmpLIM1.upper(FIVE);
    final Expression tmpLIM2 = tmpExpModel.addExpression("LIM2");
    for (int v = 0; v < tmpVariables.length; v++) {
        tmpLIM2.set(v, new BigDecimal[] { ONE, ZERO, ONE }[v]);
    }
    tmpLIM2.lower(TEN);
    final Expression tmpMYEQN = tmpExpModel.addExpression("MYEQN");
    for (int v = 0; v < tmpVariables.length; v++) {
        tmpMYEQN.set(v, new BigDecimal[] { ZERO, ONE.negate(), ONE }[v]);
    }
    tmpMYEQN.level(SEVEN);
    TestUtils.assertTrue(tmpExpModel.validate());
    final File tmpFile = new File(PATH + "testprob.mps");
    final MathProgSysModel tmpActModel = MathProgSysModel.make(tmpFile);
    TestUtils.assertTrue(tmpActModel.validate());
    final Result tmpExpMinRes = tmpExpModel.minimise();
    final Result tmpActMinRes = tmpActModel.minimise();
    TestUtils.assertEquals(tmpExpMinRes.getValue(), tmpActMinRes.getValue(), PRECISION);
    TestUtils.assertEquals(tmpVariables.length, tmpExpMinRes.count());
    TestUtils.assertEquals(tmpVariables.length, tmpActMinRes.count());
    TestUtils.assertEquals(tmpExpMinRes, tmpActMinRes, PRECISION);
    for (int i = 0; i < tmpVariables.length; i++) {
        TestUtils.assertEquals(tmpVariables[i].getName(), tmpExpMinRes.doubleValue(i), tmpActMinRes.doubleValue(i), PRECISION);
    }
    if (!tmpExpModel.validate(tmpExpMinRes, PRECISION)) {
        TestUtils.fail(SOLUTION_NOT_VALID);
    }
    if (!tmpActModel.validate(tmpActMinRes, PRECISION)) {
        TestUtils.fail(SOLUTION_NOT_VALID);
    }
    this.assertMinMaxVal(tmpActModel.getExpressionsBasedModel(), new BigDecimal("54"), new BigDecimal("80"));
}
Also used : Variable(org.ojalgo.optimisation.Variable) MathProgSysModel(org.ojalgo.optimisation.MathProgSysModel) Expression(org.ojalgo.optimisation.Expression) ExpressionsBasedModel(org.ojalgo.optimisation.ExpressionsBasedModel) File(java.io.File) BigDecimal(java.math.BigDecimal) Result(org.ojalgo.optimisation.Optimisation.Result) Test(org.junit.jupiter.api.Test)

Example 12 with Result

use of org.ojalgo.optimisation.Optimisation.Result in project ojAlgo by optimatika.

the class LinearProblems method testP20150127.

/**
 * Problemet var att en av noderna som IntegerSolver genererade var infeasible, men det misslyckades
 * LinearSolver med att identifiera och returnerade en felaktig lösning som OPTIMAL. Detta testfall
 * motsvarar
 */
@Test
public void testP20150127() {
    final ExpressionsBasedModel tmpModel = P20150127b.getModel(true, true);
    // tmpModel.options.debug(LinearSolver.class);
    // Kan få testfallet att gå igenom, men dåsmäller andra testfall
    // tmpModel.options.objective = tmpModel.options.objective.newScale(8);
    final Result tmpResult = tmpModel.minimise();
    // Should be infeasible
    TestUtils.assertStateLessThanFeasible(tmpResult);
    TestUtils.assertFalse(tmpModel.validate(tmpResult));
}
Also used : ExpressionsBasedModel(org.ojalgo.optimisation.ExpressionsBasedModel) Result(org.ojalgo.optimisation.Optimisation.Result) Test(org.junit.jupiter.api.Test)

Example 13 with Result

use of org.ojalgo.optimisation.Optimisation.Result in project ojAlgo by optimatika.

the class LinearProblems method testP20180310_61.

/**
 * https://github.com/optimatika/ojAlgo/issues/61
 */
@Test
public void testP20180310_61() {
    final Variable x = Variable.make("x").lower(0);
    final Variable y = Variable.make("y").lower(0);
    final ExpressionsBasedModel model = new ExpressionsBasedModel();
    model.addVariable(x);
    model.addVariable(y);
    model.addExpression("first").set(x, 2).set(y, 3).upper(1);
    model.addExpression("second").set(x, -2).set(y, 3).lower(1);
    final BigArray expected = BigArray.wrap(BigMath.ZERO, BigMath.THIRD);
    final Optimisation.Result result = model.maximise();
    TestUtils.assertEquals(expected, result);
    TestUtils.assertStateNotLessThanOptimal(result);
}
Also used : BigArray(org.ojalgo.array.BigArray) Variable(org.ojalgo.optimisation.Variable) Result(org.ojalgo.optimisation.Optimisation.Result) Optimisation(org.ojalgo.optimisation.Optimisation) ExpressionsBasedModel(org.ojalgo.optimisation.ExpressionsBasedModel) Test(org.junit.jupiter.api.Test)

Example 14 with Result

use of org.ojalgo.optimisation.Optimisation.Result in project ojAlgo by optimatika.

the class MarketShareCase method testMipButLinearConstrainedToOptimal.

@Test
@Disabled("Underscored before JUnit 5")
public void testMipButLinearConstrainedToOptimal() {
    final ExpressionsBasedModel tmpModel = MarketShareCase.makeModel();
    for (final Variable tmpVariable : tmpModel.getVariables()) {
        final String tmpName = tmpVariable.getName();
        if (tmpName.startsWith("s")) {
            tmpVariable.level(SOLUTION.get(tmpName));
        }
    }
    final Result tmpResult = tmpModel.minimise();
    TestUtils.assertEquals("OBJECTIVE_MIP", OBJECTIVE_MIP.doubleValue(), tmpResult.getValue(), 1E-14 / PrimitiveMath.THREE);
    for (final Variable tmpVariable : tmpModel.getVariables()) {
        TestUtils.assertEquals(tmpVariable.getName(), SOLUTION.get(tmpVariable.getName()).doubleValue(), tmpVariable.getValue().doubleValue(), 1E-14 / PrimitiveMath.THREE);
    }
}
Also used : Variable(org.ojalgo.optimisation.Variable) ExpressionsBasedModel(org.ojalgo.optimisation.ExpressionsBasedModel) Result(org.ojalgo.optimisation.Optimisation.Result) Test(org.junit.jupiter.api.Test) Disabled(org.junit.jupiter.api.Disabled)

Example 15 with Result

use of org.ojalgo.optimisation.Optimisation.Result in project ojAlgo by optimatika.

the class MarketShareCase method testRelaxedButIntegerConstrainedToOptimal.

@Test
public void testRelaxedButIntegerConstrainedToOptimal() {
    final ExpressionsBasedModel tmpModel = MarketShareCase.makeModel();
    tmpModel.relax(true);
    for (final Variable tmpVariable : tmpModel.getVariables()) {
        final String tmpName = tmpVariable.getName();
        if (tmpName.startsWith("x")) {
            tmpVariable.level(SOLUTION.get(tmpName));
        }
    }
    final Result tmpResult = tmpModel.minimise();
    TestUtils.assertEquals("OBJECTIVE_MIP", OBJECTIVE_MIP.doubleValue(), tmpResult.getValue(), 1E-14 / PrimitiveMath.THREE);
    for (final Variable tmpVariable : tmpModel.getVariables()) {
        TestUtils.assertEquals(tmpVariable.getName(), SOLUTION.get(tmpVariable.getName()).doubleValue(), tmpVariable.getValue().doubleValue(), 1E-14 / PrimitiveMath.THREE);
    }
}
Also used : Variable(org.ojalgo.optimisation.Variable) ExpressionsBasedModel(org.ojalgo.optimisation.ExpressionsBasedModel) Result(org.ojalgo.optimisation.Optimisation.Result) Test(org.junit.jupiter.api.Test)

Aggregations

Result (org.ojalgo.optimisation.Optimisation.Result)33 Test (org.junit.jupiter.api.Test)27 ExpressionsBasedModel (org.ojalgo.optimisation.ExpressionsBasedModel)27 Variable (org.ojalgo.optimisation.Variable)20 Expression (org.ojalgo.optimisation.Expression)12 Optimisation (org.ojalgo.optimisation.Optimisation)8 NumberContext (org.ojalgo.type.context.NumberContext)8 BigArray (org.ojalgo.array.BigArray)5 BigDecimal (java.math.BigDecimal)4 ArrayList (java.util.ArrayList)3 Builder (org.ojalgo.optimisation.convex.ConvexSolver.Builder)3 Disabled (org.junit.jupiter.api.Disabled)2 PrimitiveDenseStore (org.ojalgo.matrix.store.PrimitiveDenseStore)2 File (java.io.File)1 HashMap (java.util.HashMap)1 HashSet (java.util.HashSet)1 LinkedHashMap (java.util.LinkedHashMap)1 List (java.util.List)1 Map (java.util.Map)1 Collectors (java.util.stream.Collectors)1