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());
}
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());
}
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());
}
Aggregations