[Cbc] The new cut generator required?

design at np-soft.ru design at np-soft.ru
Wed Feb 27 03:11:32 EST 2008


Dear developers,

I use cbc for solving middle school scheduling problem. Seems some changes
should be done in "cbc" because today this problem is too hard for solver.

********************************
The contradictions and input data mistakes in requirements is the ordinary
situation. I use ratings for all requirements to avoid "no solution"
situation. So, feasible solution always exists when all variables in model
are zero. After solving the scheduling problem schedule-dispatcher can
analyze the requirements discrepancies and do changes in its. Stupid
mistakes and unequal requirements can be really found in this way and
school schedule can be tabled.

I have found two "problems" in cbc. Maybe I should switch on some options
in cbc but I can't found its.

First problem is no "dominating" cuts. For example, some teacher should
have 2 working days per week. This requirement can be modeled as follow:
Minimize :+1000*y+:
:
x1+x2+x3+x4+x5<=2+y
:
Where x1, x2, x3, x4, x5 are pseudoboolean variables of working days, y is
integer variable of extra working days, 1000 is rating of extra day
shortcoming. Variable y is consisted only in one constraint and in the
objective. Obviously values 4, 5, 6, : of variable y can be dominated by
value 3. So range [4, Infinity] of y can be cut by dominating.
Of course, dominating cuts can be generalized on any numbers of
constraints. This is a "simple" and effective cutter for problems of this
type. If I "manually" reduced the ranges of "y" variables then "cbc"
solving result was better.

The second problem is the "post-calculated" variables. Let the v(d) is the
number lessons in day d. Hence
:
x1<=v1<=8*x1
x2<=v2<=8*x2
x3<=v3<=8*x3
x4<=v4<=8*x4
x5<=v5<=8*x5
:
x1+x2+x3+x4+x5 <= 2 + y
Instead of those constraints the follows can be used:
:
v1<=8*x1
v2<=8*x2
v3<=8*x3
v4<=8*x4
v5<=8*x5
:
x1+x2+x3+x4+x5 <= 2 + y
After feasible solution is found variables x(d) should be recalculated
from initial constraints:
x1<=v1<=8*x1
x2<=v2<=8*x2
x3<=v3<=8*x3
x4<=v4<=8*x4
x5<=v5<=8*x5
So, the size of problem can be significantly reduced.
*******************************************

If those fetches are already exists in "cbc" then how its can be switched
on? If no then should I create enhancements ticket?

Sergey.



More information about the Cbc mailing list