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

Improve the Xpress interface and add dynamic loading of the Xpress library #3966

Merged
merged 204 commits into from
Dec 11, 2023

Conversation

sgatto
Copy link
Contributor

@sgatto sgatto commented Oct 27, 2023

We have been working on several improvements of the Xpress interface at RTE.
These include

  • the possibility to lazily load the Xpress library (like Gurobi) without the need of the header files during the compilation of Ortools
  • a first implementation to make use of callbacks in C++
  • implementation of OR-Tool's SetHint method into the XPRESS interface to suggest a feasible solution to Xpress
  • update to Xpress 9.0
  • allow for a better control on the log level of Xpress
  • implement the Write method, a specific exception is raised in case of failure
  • Xpress now looks for the standard environment variables that are set during the Xpress installation
  • Add new extraction and set method for LP basis for Xpress:
    - MPSolver::GetFinalLpBasisInt,
    - MPSolver::SetStartingLpBasisInt
  • add xpress specific tests that can be activated using the CMake flag BUILD_XPRESS_TEST_AND_EXAMPLES
    - these tests can be run using the community licence of Xpress (bundled with the python installation)

sgatto and others added 3 commits November 16, 2023 14:17
…axim (#114)

* use XPRSmipoptimize and XPRSlpoptimize instead of XPRSminim and XPRSmaxim

* clean xpress/environment files

* accept changes: empty char* parameter for XPRS*optimize
flomnes and others added 2 commits November 20, 2023 12:43
* remove python script

* remove RTE actions

* fix test_xpress_interface.cc

* remove callback_xpress.py

* revert writing colnames and rownames

* accept suggestion from Mizux

* clean

* change cmake/README.md

* try fix build bazel

* try fix build bazel add MPSWriteError.h

* xpress tests gracefully exit if Xpress not found

* add integer and linear programming test for dotnet python and java

* remove MPSWriteError

* try fix Window build

* remove useless line from CMakeLists.txt

* try fix test under windows

* reformat

* use XPRESS_LP instead of XPRESS for linear programming examples

* tools: add --platform arg when possible

make script more resilient/cross-platform

* [CP-SAT] convert to PEP8 convention

* use XPRSmipoptimize and XPRSlpoptimize instead of XPRSminim and XPRSmaxim (#114)

* use XPRSmipoptimize and XPRSlpoptimize instead of XPRSminim and XPRSmaxim

* clean xpress/environment files

* accept changes: empty char* parameter for XPRS*optimize

* Add test on number iterations with LP basis

* fix gtests flags

* refactor

* suggestions by @flomnes

* remove unwanted files

---------

Co-authored-by: Andrea Sgattoni <[email protected]>
Co-authored-by: Laurent Perron <[email protected]>
Co-authored-by: Corentin Le Molgat <[email protected]>
Co-authored-by: Andrea Sgattoni <[email protected]>
@flomnes flomnes force-pushed the feature/xpress_only branch from e663e05 to 2f543db Compare November 20, 2023 11:50
@lperron lperron marked this pull request as ready for review November 21, 2023 10:43
@lperron
Copy link
Collaborator

lperron commented Nov 21, 2023

I know the basis status is not optimal.
I would still push for merging now.

@sgatto
Copy link
Contributor Author

sgatto commented Nov 21, 2023

I know the basis status is not optimal. I would still push for merging now.

Thanks @lperron ,
After checking the differences we realized that we changed the dynamic_library.h file in order to have a graceful exit if some Xpress functions are not found. This change would not be compatible with your implementation of the Gurobi interface and we are unable to propose a different solution for Gurobi (we have no way to test it).
We are checking internally (at RTE) for a different solution or in case mimic what you have done for Gurobi (having a fatal_error if any function is not_found).
We will correct this issue and push a final commit to remove the draft tag this week.
Would it be ok for you ?

@lperron
Copy link
Collaborator

lperron commented Nov 21, 2023 via email

@sgatto
Copy link
Contributor Author

sgatto commented Nov 22, 2023

@lperron I consider this work finalized. We are ready for a merge/further review.

Copy link
Contributor

@flomnes flomnes left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@sgatto Could you please remove all references to names ? This is not fully integrated yet because of performance issues

ortools/linear_solver/xpress_interface.cc Outdated Show resolved Hide resolved
ortools/linear_solver/xpress_interface.cc Outdated Show resolved Hide resolved
ortools/linear_solver/xpress_interface.cc Outdated Show resolved Hide resolved
ortools/linear_solver/xpress_interface.cc Outdated Show resolved Hide resolved
ortools/linear_solver/xpress_interface.cc Outdated Show resolved Hide resolved
@lperron
Copy link
Collaborator

lperron commented Dec 11, 2023

Should I merge ?

@sgatto
Copy link
Contributor Author

sgatto commented Dec 11, 2023

Should I merge ?

It's good for me

@lperron lperron merged commit 0bb7d0c into google:main Dec 11, 2023
81 of 120 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Feature Request Missing Feature/Wrapper Lang: C++ Native implementation issue Solver: XPRESS XPRESS Solver related issue
Projects
Archived in project
Development

Successfully merging this pull request may close these issues.

5 participants