Opened 9 years ago

Closed 9 years ago

Last modified 9 years ago

#7268 closed enhancement (fixed)

GLPK: named constraints and variables, export functions

Reported by: ncohen Owned by: tbd
Priority: major Milestone: sage-4.3
Component: packages: optional Keywords:
Cc: Merged in:
Authors: Nathann Cohen Reviewers: Martin Albrecht
Report Upstream: N/A Work issues:
Branch: Commit:
Dependencies: Stopgaps:

Description (last modified by ncohen)

Hello everybody !

This is an update of the GLPK package to match the changes in numerical.mip. Here is the list of changes :

  • Names for the objective function, the whole problem, variables and constraints can be set through the newly exposed GLPK functions
  • A problem can be exported to MPS or LP files
  • GLPK now returns Exceptions when it fails ( it used to silently return the 0 solution ).
  • As solveGLPK, write_mps and write_lp all need the problem to be built as a GLPK structure, a new function build_glp_prob does this job and is used by the three of them.

Comments have also been added when felt necessary. The code should be more efficient (and Cythonized) in this version ( this was the whole purpose of redefining the structure of numerical.mip )

The spkg is available on sagemath at : ~ncohen/glpk-4.38.p4.spkg or at http://www-sop.inria.fr/members/Nathann.Cohen/glpk-4.38.p4.spkg or http://sage.math.washington.edu/home/malb/spkgs/glpk-4.38.p4.spkg

Nathann

Attachments (1)

glpk_sage_free.patch (10.5 KB) - added by malb 9 years ago.

Download all attachments as: .zip

Change History (18)

comment:1 Changed 9 years ago by ncohen

  • Status changed from new to needs_review

comment:2 Changed 9 years ago by ncohen

  • Description modified (diff)

comment:3 Changed 9 years ago by mvngu

  • Report Upstream set to N/A
  • Status changed from needs_review to needs_work

The package installs OK on Sage 4.3.alpha0. Here are some documentation issues in the file patch/mipGlpk.pyx that I think need to be addressed:

  1. the function solve_glpk() --- document the input log and objective_only, and explain the expected output (if any).
  2. the function write_mps() --- document the input filename and modern, and explain the expected output (if any).
  3. the function write_lp() --- document what this function does. Also document the input filename and explain the expected output (if any).

comment:4 Changed 9 years ago by ncohen

  • Status changed from needs_work to needs_review

Sorry !! :-)

I wrote these in the wrappers for these functions in class MixedIntegerLinearProgram? but forgot to copy them there.... Both files updated ! :-)

comment:5 Changed 9 years ago by malb

A new SPKG is available at

http://sage.math.washington.edu/home/malb/spkgs/glpk-4.38.p4.spkg

I give Nathan's SPKG a positive review if my referee patch is accepted. The referee patch fixes a mem leak and makes some of the code in the Cython wrapper more Pythonic (I also reverted some pre-mature optimisation which wouldn't speed things up)

I am attaching the patch here for convenience (it is applied in p4 linked above).

comment:6 Changed 9 years ago by ncohen

  • Status changed from needs_review to needs_work

Your new spkg file contains a build/ directory and a file .cpp in the patch/ directory ( it seems you installed the patch then packaged it without removing these temporary files ). Coild you update it ?

Besides, is there any way for me to get the diff files since the last version ? I am still not that used to mercurial :-)

Thank youuuuuuuuuu !!!

Nathann

comment:7 Changed 9 years ago by malb

I've updated the SPKG and I'll attach the diff.

Changed 9 years ago by malb

comment:8 follow-up: Changed 9 years ago by ncohen

  • Status changed from needs_work to needs_info

Looks good :-)

Two questions though :

  • Why do you replace == and != by is and is not ?
  • is enumerating range(500) faster than 0<= i< 500 or is there another reason ?
  • Why did you remove the leading 'r' before the docstrings ? I was under the impression they were requried for the docstring to display correctly...

I knew nothing about enumerate()... I'll remember this one ! :-)

Nathann

comment:9 in reply to: ↑ 8 Changed 9 years ago by malb

Why do you replace == and != by is and is not ?

False and None are unique objects thus it is sufficient to compare by checking identities. Feel free to change it back, though.

  • is enumerating range(500) faster than 0<= i< 500 or is there another reason ?

Cython will write 0<= i < 500 automatically, so you can just write proper Python code and Cython will optimise it for you.

Why did you remove the leading 'r' before the docstrings ? I was under the impression they were requried for the docstring to display correctly...

Only if they contain a backslash.

comment:10 Changed 9 years ago by ncohen

  • Status changed from needs_info to needs_review

Then.... Positive review ! And thank you for your answers and your help ! :-)

Nathann

comment:11 Changed 9 years ago by ncohen

  • Status changed from needs_review to positive_review

comment:12 Changed 9 years ago by ncohen

  • Description modified (diff)

comment:13 Changed 9 years ago by ncohen

Depends on #7270 !!!!!!!!!!!!!!!

comment:14 Changed 9 years ago by mhansen

  • Authors set to Nathann Cohen
  • Resolution set to fixed
  • Reviewers set to Martin Albrecht
  • Status changed from positive_review to closed

Merged in the with the optional packages.

comment:15 Changed 9 years ago by jason

FYI: enumerate is now recognized and sped up by Cython (in version 0.12, which will be in the next version of Sage). See http://trac.cython.org/cython_trac/ticket/316

So hooray!

comment:16 Changed 9 years ago by ncohen

Thank you !! :-)

If you are interested by (shorter) reviews, I am splitting the big Flow patch into small ones... The flow is already available, the matching will be available soon too, and the others ( less important ) will follow.

comment:17 Changed 9 years ago by mvngu

  • Summary changed from GLPK : named constraints and variables, export functions ... to GLPK: named constraints and variables, export functions
Note: See TracTickets for help on using tickets.