google / or-tools

Google's Operations Research tools:

Home Page:https://developers.google.com/optimization/

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

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]
  1. the LP reader is very limited.i do not think it will parse any meaningful problem.
  2. I believe the export to LP is broken.

Conclusion: for the time being, use mps.