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