[SCIP] Pricer keeps generating single-vertex segments for partitioning problem
Gerald Gamrath
gamrath at zib.de
Tue Jul 18 12:29:57 CEST 2017
Hi Robert,
do you apply some tolerance when checking if a segment has negative
reduced costs? You should probably use SCIPisDualfeasNegative() to check
this.
Did you print information about the variables you created to see that
there are duplicates? From the output you added to your mail, I don't
see an immediate problem. Actually, there is obviously something
changing in your LP solution, since you find a new primal feasible
solution by rounding the LP solution. You could activate the display
column for the optimal objective value of your current (restricted) LP
to see if this improves: display/lpobj/active = 2
Concerning the things you tried:
- explicit upper bounds on variable cause a lot of problems for column
generation, so you should use lazy upper bounds whenever you have upper
bounds on your variables which are implicitly enforced by some constraints
- the maxrestarts parameter is about restarting the complete solving
process, including another round of presolving. As you guessed, this
does not refer to reoptimizing the LP, which will need to be done in
order to complete the column generation process and obtaining a dual bound.
Best,
Gerald
Am 13.07.2017 um 12:25 schrieb Robert Schütz:
> Hey all,
>
> I have implemented an image partitioning problem in SCIP, involving a
> pricer that generates segments with negative reduced costs.
> Each possible segment has a fitting error calculated by the sum of the
> fitting errors of each pixel in it and the fitting value of a segment is
> given by the color of one "super" node in that segment and therefore
> constant when solving the pricing problem.
> The pricing problem is of itself a MIP involving constraints on the
> connectivity of the generated segment and solved using SCIP.
>
> Now the problem is that after a while, the pricer keeps generating
> single-pixel segments consisting only of a super node (which are
> therefore added multiple times, even though they should have positive
> reduced costs after adding them once).
> This happens shortly after I get the following output:
>
> (node 1) solution of LP 43 not optimal (pfeas=1, dfeas=0) -- solving again with tighter feasibility tolerance
> 34.6s| 1 | 0 | 844 | - |2444k| 0 | 0 | 215 | 56 | 215 | 56 | 0 | 0 | 0 | -- | 5.000000e+04 | Inf
> r34.6s| 1 | 0 | 844 | - |2444k| 0 | 0 | 215 | 56 | 215 | 56 | 0 | 0 | 0 | -- | 1.955779e+04 | Inf
>
> and after another round of the pricer:
>
> time | node | left |LP iter|LP it/n| mem |mdpt |frac |vars |cons |cols |rows |cuts |confs|strbr| dualbound | primalbound | gap
> 36.6s| 1 | 0 | 877 | - |2583k| 0 | 0 | 220 | 56 | 220 | 56 | 0 | 0 | 0 | -- | 1.955779e+04 | Inf
> r36.6s| 1 | 0 | 877 | - |2583k| 0 | 0 | 220 | 56 | 220 | 56 | 0 | 0 | 0 | -- | 1.912082e+04 | Inf
>
> After doing some research on the mailing list etc, I tried these two
> - SCIPchgVarUbLazy(scip, var, 1.0)
> but the behaviour does not change regardless of the segment variables
> being binary or contiunous and this setting being set.
> - SCIPsetIntParam(scip, "presolving/maxrestarts", 0)
> which did obviously not hinder SCIP from solving again (see SCIP's
> output above) so I guess this does not count as restarting :)
>
> Do you have an idea what the problem could be?
>
> Yours, Robert
> _______________________________________________
> Scip mailing list
> Scip at zib.de
> https://listserv.zib.de/mailman/listinfo/scip
More information about the Scip
mailing list