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
make MIP backend interface more Python-ic #10341
Comments
comment:1
Attachment: mip_interface_changes.patch.gz The attached patch makes the necessary changes to the |
comment:2
And here are the modifications to CPLEX and Coin. The doctests pass, plus all the methods of Graph/Digraph/GenericGraph pass with both GLPK, Coin and CPLEX. I agreed with you patch almost everywhere ! The only modification I made is the "constraints" argument you had placed in the add_constraint method. I really didn't get why you picked this name. I made it "coefficients", as the pairs are actually the coefficient of the sparse matrix, but of course we can discuss it during the review Nathann |
Attachment: trac_10431-part2.patch.gz |
Changed author from Martin Albrecht to Martin Albrecht, Nathann Cohen |
This comment has been minimized.
This comment has been minimized.
comment:4
Sure, your naming makes much more sense. Are you reviewing mine first, or is your patch your review? I can review your's then? |
comment:5
I noticed two more interface "issues" we may decide to "fix":
Neither of those changes I view as mandatory, just throwing the idea out there to see what others think. |
comment:6
Well, I checked yours while working on it and fixed this "constraints->coefficients" inside of my patch ... If you review mine, both files will have be read by two sets of eyes, so I guess it would count as a valid review Nathann |
comment:7
Replying to @malb:
Though they sound right... Nathann |
comment:8
One more thing: you assume in your interface that one can change column and row names after those have been created. However, this isn't easy in SCIP (I could possibly hack around it by hacking around the API). Can we change that, e.g. by adding name as an optional parameter to add_variable() and add_linear_constraint()? |
comment:9
Well, if that's how SCIP's interface is written, I see no way around that .... I just hope all these optional parameters won't hurt the interface's efficiency. I am eager to have a working stable version of it in Sage, that would let me rebase other patches that have been made invalid because of the work we are doing here. I may spend some time trying to do some performance analysis on the interface afterwards I'm already sick of these names... They are totally useless for all practical purposes, their only aim is to produce different results in p.show() (which doesn't even use them for the moment) or when writing the LP to files, which is totally orthogonal to actually solving them. Besides, each solver has a different way of managing them, especially Coin. I spent nights just fighting with it, for nothing in the end (oh yes.. it compiles, and there was no regression since the first version of LP.. Who the hell cares ?) Just to know : are you yourself using names for variables and constraints ? Nathann P.S. : Oh, yes.. Let's add this optional argument if there is no way around. If at some point we find a trick, it won't be as hard to remove an optional argument from an interface as any other, as most of the method calls don't include it. So in the end |
comment:10
I usually set them (e.g. when converting from polynomial systems), but I guess I'm not really using them usually. |
comment:11
So what are they useful for in SCIP ? Can it produce outputs at .lp or .mpw files ? Nathann |
comment:12
Yep, and other formats. You can also query a variable (which is a C struct) for its name in your code. For example, you can search for variables by name. |
comment:13
Replying to @malb:
Nice !!
Same in GLPK. For the moment, I do not do any work on the matrix once it has been defined. Or rather, I only add more information, but never remove/read anything from it O_o Nathann |
comment:14
Okay, what remains to be done then:
Anything I missed? |
comment:15
Oh... Hem.. Actually, if we are to actually drop these methods... I can not stand these names... Here is the problem : right now, there are no names when you add variables or constraints in MixedIntegerLinearProgram. When p.show() is called, the names are filled with something which makes them at least distinct and recognizable... But if we want to drop these methods, then p.show() has to be rewritten too.. Nathann |
comment:16
I would suggest an optional parameter "name=None" for add_variable()? |
comment:52
Please fix the commit messages to contain the correct ticket number 10341 on the first line. |
Attachment: trac_10431-part4.patch.gz |
Attachment: trac_10431-part5.patch.gz |
comment:53
Done ! Sorry about that ! Nathann |
comment:54
Commit message of first patch still needs to be fixed. |
comment:55
OOps.... I just uploaded a copy of this one (I can not overwrite it) Nathann |
comment:56
Please check Sphinx syntax:
|
comment:57
Replying to @jdemeyer:
Right.... Here it is ! Nathann |
This comment has been minimized.
This comment has been minimized.
Attachment: trac_10431-part6.patch.gz |
Merged: sage-4.6.2.alpha3 |
Sage 4.6.1 will contain a new set of backend classes for mixed integer programming, which will make it easier to write interfaces for other solvers. There has been some off-list discussion about this interface and the follow changes were agreed upon:
add_linear_constraint
should allowlb
andub
instead of direction and one bound, it's more expressive.add_variable
should return the index of the newly created variable instead of the next index.add_linear_constraint
to accept any iterable of the form[(c,v) ...]
min
andmax
should be lower bound (orlb
) and upper bound (orub
) to conform to MIP conventionsadd_variable
The patches are to be applied in this order:
CC: @nathanncohen
Component: linear programming
Author: Martin Albrecht, Nathann Cohen
Reviewer: Martin Albrecht, Nathann Cohen
Merged: sage-4.6.2.alpha3
Issue created by migration from https://trac.sagemath.org/ticket/10341
The text was updated successfully, but these errors were encountered: