Comments (11)
I'll have to make a guess here:
There are several sources of solution candidates in SCIP. The most common is that of solutions of the relaxation in branch-and-bound nodes. These should also satisfy the constraints added earlier. Of course, if you have several lazy cut callbacks, all of them will be asked about the same candidate (from the same node).
But other than that, a solution candidate could also come from some heuristic. I think that linear constraints are checked before the lazy constraints, and that the checking stops as soon as some constraint is violated, but here I'm not so sure.
See also the relevant SCIP documentation. The lazy cut callback is called in all three of the mentioned methods, but if the user adds a cut within a call of CONSCHECK
, it is not added to the problem. So this makes it possible that a solution is violating a cut that was apparently (but not actually) added earlier.
from scip.jl.
An important detail in this respect is the priority
that is given to SCIP to check this constraint. In CSIP, we set a priority of 1, which is the lowest value larger than 0 (to check integrality). Interestingly, the default priority of linear constraints is negative.
@fserra : Is it right to follow that LP-feasibility is not checked prior to calling our CONSCHECK
for solutions from heuristics?
from scip.jl.
Thank you! I will look at the documentation. This is causing issues for us
in pajarito, where we have a very expensive subproblem that takes the
integer subvector only and adds conic cuts based on this subvector. We want
to avoid solving this conic subproblem on the same integer subvector more
than once.
On Sep 23, 2016 11:45 AM, "Robert Schwarz" [email protected] wrote:
An important detail in this respect is the priority that is given to SCIP
to check this constraint. In CSIP, we set a priority of 1
https://github.com/SCIP-Interfaces/CSIP/blob/master/src/csip.c#L1242,
which is the lowest value larger than 0 (to check integrality).
Interestingly, the default priority of linear constraints is negative.@fserra https://github.com/fserra : Is it right to follow that
LP-feasibility is not checked prior to calling our CONSCHECK for
solutions from heuristics?—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
#22 (comment),
or mute the thread
https://github.com/notifications/unsubscribe-auth/AJq0kw2TsDofHPY7XLgp2T5VCxr5V9_uks5qs_P5gaJpZM4KFGo-
.
from scip.jl.
We were required to set the priority to a positive value in order to fully support the fractional
parameter in JuMP. If you know that you want your callback be called only for integral candidates, you could in principal set the priority to a "large" negative value. But this is currently not implemented.
Also, I don't think it will solve the issue with CONSCHECK
.
Maybe (but this not a simple fix), we could store the lazy cuts added from CONSCHECK
in a special cut pool and add them later, when appropriate?
from scip.jl.
@leethargo yes, I guess it is correct to assume that the solution has not been checked for LP feasibility in our CONSCHECK
... However, only our enfopriority
is positive, which means that we get LP solutions that might not be integer to enforce. Our checkpriority
is -1, which we setted without further consideration. The checkpriority
of linear constraints is -1000000
, but still, we should probably be even smaller than nonlinear constraints' checkpriority (-4000010)
So I am missing the big picture right now, but to correctly handle this, we should
- Add the linear constraints generated in
CONSCHECK
- Set the
checkpriority
to be very small
Would that be ok??
I also think that we can just add the constraints generated in CONSCHECK
, we don't need to store them.
@chriscoey is it easy to reproduce this behaviour??
from scip.jl.
@fserra, that sounds good to me. I thought that adding constraints from CONSCHECK
was not allowed.
from scip.jl.
well, the stage will not forbid adding a constraint, so I wouldn't know who
will. We just can't inform via result
that a constraint was added.
Of course, I am not a 100% sure ;)
On Sat, Sep 24, 2016 at 10:16 AM, Robert Schwarz [email protected]
wrote:
@fserra https://github.com/fserra, that sounds good to me. I thought
that adding constraints from CONSCHECK was not allowed.—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
#22 (comment),
or mute the thread
https://github.com/notifications/unsubscribe-auth/AFNG9muRZzHTaP77X6nxODJYJsUpwwvyks5qtNxfgaJpZM4KFGo-
.
from scip.jl.
We made the change in CSIP.
@chriscoey: Can you check whether the callback is still called twice on the same solution, by using the CSIP master?
CC: @mlubin
from scip.jl.
Thanks for the help here. Miles and I have been talking about what is going on in the lazy cuts in Pajarito and I think we understand what the MIP solvers do and don't do a bit better now.
The change you made should help reduce the number of redundant solutions we get from the solver. We are going to start running computational tests soon and that will give us a better idea. But ultimately there aren't currently any options we can give any MIP solver to make it to do what we want for Pajarito. We only care about getting different integer subvectors of the full mixed-integer vector (we reformulate to only have continuous variables in nonlinear cones). It's pretty specific.
from scip.jl.
Sounds good, the updated code will be merged with #23.
Given that several MIP solvers are "misbehaving" in this respect, it might help to keep a pool of already handled (partial) solution candidates on the Pajarito side, right?
from scip.jl.
@leethargo Yeah over the past few days I have implemented a few new ideas and now Pajarito is cacheing dual cuts and has an option for fast primal cuts, so it is doing as much as it can to avoid wasting time on repeated integer solutions. Ultimately I guess the goal is for MIP solvers to re-implement the ideas behind Pajarito internally, and they will be able to do it better because they have a level of control that we don't.
from scip.jl.
Related Issues (20)
- Can I develop models in Julia and solve them in Python? HOT 6
- SCIP 8.0 support?! HOT 1
- SCIP EXCEPTION_ACCESS_VIOLATION In JuMP 1.1.0 and SCIP V0.11.3 on Windows 11 HOT 26
- How to trigger SCIPsolveConcurrent? HOT 3
- Multiple threads HOT 10
- SCIP not working on Windows HOT 4
- Crash When Optimizing HOT 15
- Get original variables from constraint
- Collect all feasible solutions HOT 4
- Cannot install globally in Windows HOT 1
- [EXCEPTION_ACCESS_VIOLATION] Julia 1.8.5 incompatibility with SCIP v0.11.12 HOT 1
- MultipleObjectiveAlgorithms usage HOT 1
- Implement LazyConstraint from ConstraintHandler HOT 4
- SCIP solver -- issue in "quadratic_constraints.jl". HOT 2
- Not solving the optimization model with the SCIP solver HOT 12
- `MathOptInterface.ScalarNonlinearFunction` not supported by the solver HOT 9
- A new release is probably warranted - `is_valid()` is broken in `v0.11.14`
- How to get ConstraintDual? HOT 2
- SCIP optimizer status likely ser incorrectly. HOT 4
- Update to allow SCIP version 9?
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from scip.jl.