Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

LP model import not working in Java #4205

Open
constantin-ungureanu-github opened this issue Apr 27, 2024 · 1 comment
Open

LP model import not working in Java #4205

constantin-ungureanu-github opened this issue Apr 27, 2024 · 1 comment
Assignees
Milestone

Comments

@constantin-ungureanu-github
Copy link

constantin-ungureanu-github commented Apr 27, 2024

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]
@lperron
Copy link
Collaborator

lperron commented Apr 27, 2024

  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.

@Mizux Mizux added this to the v10.0 milestone Apr 27, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants