Search in sources :

Example 31 with Result

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

the class DesignCase method testSOS.

/**
 * Essentilly this test case just verifies that the SOS presolver doesn't screw things up.
 */
@Test
public void testSOS() {
    final ExpressionsBasedModel model = new ExpressionsBasedModel();
    final List<Variable> starts1 = new ArrayList<>();
    final List<Variable> works1 = new ArrayList<>();
    final List<Variable> starts2 = new ArrayList<>();
    final List<Variable> works2 = new ArrayList<>();
    final Set<Variable> orderedSet1 = new HashSet<>();
    final Set<Variable> orderedSet2 = new HashSet<>();
    for (int h = 0; h < 24; h++) {
        final Variable start1 = model.addVariable("Start activity A at " + h).binary();
        starts1.add(start1);
        final Variable start2 = model.addVariable("Start activity B at " + h).binary();
        starts2.add(start2);
        final Variable work1 = model.addVariable("Activity A ongoing at " + h).binary().weight(Math.random());
        works1.add(work1);
        orderedSet1.add(work1);
        final Variable work2 = model.addVariable("Activity B ongoing at " + h).binary().weight(Math.random());
        works2.add(work2);
        orderedSet2.add(work2);
        model.addExpression("Maximum one ongoing activity at " + h).upper(1).set(work1, 1).set(work2, 1);
    }
    model.addSpecialOrderedSet(orderedSet1, 3, 3);
    model.addSpecialOrderedSet(orderedSet2, 3, 3);
    for (int h = 0; h < 21; h++) {
        final Expression expr1 = model.addExpression("Finish A when started at " + h);
        expr1.upper(0);
        expr1.set(starts1.get(h), 3);
        expr1.set(works1.get(h), -1);
        expr1.set(works1.get(h + 1), -1);
        expr1.set(works1.get(h + 2), -1);
        final Expression expr2 = model.addExpression("Finish B when started at " + h);
        expr2.upper(0);
        expr2.set(starts2.get(h), 3);
        expr2.set(works2.get(h), -1);
        expr2.set(works2.get(h + 1), -1);
        expr2.set(works2.get(h + 2), -1);
    }
    for (int h = 21; h < 24; h++) {
        starts1.get(h).level(0);
        starts2.get(h).level(0);
    }
    model.addExpression("Only start activity A once").level(1).setLinearFactorsSimple(starts1);
    model.addExpression("Only start activity B once").level(1).setLinearFactorsSimple(starts2);
    final Result resultMin = model.minimise();
    TestUtils.assertStateNotLessThanOptimal(resultMin);
    TestUtils.assertTrue(resultMin.getValue() >= 0.0);
    TestUtils.assertTrue(resultMin.getValue() <= 6.0);
    final Result resultMax = model.maximise();
    TestUtils.assertStateNotLessThanOptimal(resultMax);
    TestUtils.assertTrue(resultMax.getValue() >= 0.0);
    TestUtils.assertTrue(resultMax.getValue() <= 6.0);
    TestUtils.assertTrue(resultMin.getValue() <= resultMax.getValue());
}
Also used : Variable(org.ojalgo.optimisation.Variable) Expression(org.ojalgo.optimisation.Expression) ArrayList(java.util.ArrayList) ExpressionsBasedModel(org.ojalgo.optimisation.ExpressionsBasedModel) HashSet(java.util.HashSet) Result(org.ojalgo.optimisation.Optimisation.Result) Test(org.junit.jupiter.api.Test)

Example 32 with Result

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

the class IntegerProblems method testP20111010.

/**
 * If the relaxed problem was infeasible you got a NullPointerException instead of a result indicating
 * that the problem is infeasible.
 */
@Test
public void testP20111010() {
    final Variable[] tmpVariables = new Variable[] { Variable.makeBinary("X").weight(ONE), Variable.makeBinary("Y").weight(ONE), Variable.makeBinary("Z").weight(ONE) };
    final ExpressionsBasedModel tmpModel = new ExpressionsBasedModel(tmpVariables);
    final Expression tmpC1 = tmpModel.addExpression("C1");
    for (int i = 0; i < tmpModel.countVariables(); i++) {
        tmpC1.set(i, ONE);
    }
    tmpC1.level(ONE);
    final Expression tmpC2 = tmpModel.addExpression("C2");
    for (int i = 0; i < tmpModel.countVariables(); i++) {
        tmpC2.set(i, ONE);
    }
    tmpC2.level(TWO);
    final Expression tmpC3 = tmpModel.addExpression("C3");
    for (int i = 0; i < tmpModel.countVariables(); i++) {
        tmpC3.set(i, ONE);
    }
    tmpC3.level(THREE);
    // tmpModel.options.debug(LinearSolver.class);
    final Optimisation.Result tmpResult = tmpModel.minimise();
    TestUtils.assertEquals(State.INFEASIBLE, tmpResult.getState());
}
Also used : Variable(org.ojalgo.optimisation.Variable) Expression(org.ojalgo.optimisation.Expression) Result(org.ojalgo.optimisation.Optimisation.Result) Optimisation(org.ojalgo.optimisation.Optimisation) ExpressionsBasedModel(org.ojalgo.optimisation.ExpressionsBasedModel) Test(org.junit.jupiter.api.Test)

Example 33 with Result

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

the class IntegerProblems method testP20100412.

/**
 * 20120227: Forgot to document what the problem was. Now I just check there is an optimal solution.
 */
@Test
public void testP20100412() {
    final boolean tmpDebug = false;
    final ExpressionsBasedModel tmpModel = OptimisationIntegerData.buildModelForP20100412();
    if (tmpDebug) {
        BasicLogger.debug("Model Before");
        BasicLogger.debug(tmpModel.toString());
    }
    final Result tmpResult = tmpModel.maximise();
    if (tmpDebug) {
        BasicLogger.debug("Model After");
        BasicLogger.debug(tmpModel.toString());
    }
    TestUtils.assertTrue(tmpResult.getState().isOptimal());
}
Also used : 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