LP model import not working in Java
constantin-ungureanu-github opened this issue · comments
What version of OR-Tools and what language are you using?
Version: main/v9.9/v9.8 etc.
Language: Java
Which solver are you using ?
GLOP
What operating system ?
Linux, Windows
What did you do?
Importing model in LP format and trying to solve it results in error
I0000 00:00:1714212037.689364 679427 lp_parser.cc:111] Error in line: \ Generated by MPModelProtoExporter
Create a valid model, try to solve it, all ok.
Then export this to LP format and then import this from LP format and retry to solve it.
import com.google.ortools.Loader;
import com.google.ortools.modelbuilder.LinearConstraint;
import com.google.ortools.modelbuilder.LinearExpr;
import com.google.ortools.modelbuilder.ModelBuilder;
import com.google.ortools.modelbuilder.ModelSolver;
import com.google.ortools.modelbuilder.SolveStatus;
import com.google.ortools.modelbuilder.Variable;
public final class LinearProgrammingExampleModelBuilder {
public static void main(String[] args) {
Loader.loadNativeLibraries();
final ModelSolver solver = new ModelSolver("GLOP");
final ModelBuilder model = new ModelBuilder();
// [START variables]
final double infinity = Double.POSITIVE_INFINITY;
// x and y are continuous non-negative variables.
final Variable x = model.newNumVar(0.0, 5.0, "x");
final Variable y = model.newNumVar(0.0, infinity, "y");
// [END variables]
// [START constraints]
// x + 2*y <= 14.
final LinearConstraint c0 = model.addLinearConstraint(LinearExpr.newBuilder().addTerm(x, 1).addTerm(y, 2).build(), -infinity, 14);
c0.setName("c0");
// 3*x - y >= 0.
final LinearConstraint c1 = model.addLinearConstraint(LinearExpr.newBuilder().addTerm(x, 3).addTerm(y, -1).build(), 0, infinity);
c1.setName("c1");
// x - y <= 2.
final LinearConstraint c2 = model.addLinearConstraint(LinearExpr.newBuilder().addTerm(x, 1).addTerm(y, -1).build(), -infinity, 2);
c2.setName("c2");
// [END constraints]
// [START objective]
// Maximize 3 * x + 4 * y.
model.maximize(LinearExpr.newBuilder().addTerm(x, 3).addTerm(y, 4).build());
// [END objective]
// [START solve]
final SolveStatus resultStatus = solver.solve(model);
// [END solve]
// [START print_solution]
if (resultStatus == SolveStatus.OPTIMAL) {
System.out.println("Solution:");
System.out.println("Objective value = " + solver.getObjectiveValue());
System.out.println("x = " + solver.getValue(x));
System.out.println("y = " + solver.getValue(y));
System.out.println("c0 " + solver.getActivity(c0));
System.out.println("c1 " + solver.getActivity(c1));
System.out.println("c2 " + solver.getActivity(c2));
} else {
System.err.println("The problem does not have an optimal solution!");
}
// [END print_solution]
// [START advanced]
System.out.println("\nAdvanced usage:");
System.out.println("Problem solved in " + solver.getWallTime() + " milliseconds");
// [END advanced]
model.setName("NEW_TEST");
System.out.println(model.exportToMpsString(false));
System.out.println(model.exportToLpString(false));
final ModelBuilder modelLP = new ModelBuilder();
final String lpString = model.exportToLpString(false);
modelLP.importFromLpString(lpString);
// [START solve]
final SolveStatus resultStatusLP = solver.solve(modelLP);
// [END solve]
// [START print_solution]
if (resultStatusLP == SolveStatus.OPTIMAL) {
System.out.println("Solution:");
System.out.println("Objective value = " + solver.getObjectiveValue());
System.out.println("x = " + solver.getValue(x));
System.out.println("y = " + solver.getValue(y));
System.out.println("c0 " + solver.getActivity(c0));
System.out.println("c1 " + solver.getActivity(c1));
System.out.println("c2 " + solver.getActivity(c2));
} else {
System.err.println("The problem does not have an optimal solution!");
}
// [END print_solution]
}
private LinearProgrammingExampleModelBuilder() {}
}
// [END program]
- the LP reader is very limited.i do not think it will parse any meaningful problem.
- I believe the export to LP is broken.
Conclusion: for the time being, use mps.