0

In the SCIP Optimization Suite 6.0 paper, there is a section on Aggregation Presolver. The example given is a linear constraint with 2 variables a1x1+a2x2=b where either x1 or x2 is made the subject, then substituting it to the other constraints. I understand the logic when this is a linear program.

However, for SAT problems, my problem file and transproblem files show the following:

[logicor] <c301>: logicor(<x591>[B],<~x666>[B]); (This comes from problem file)
[logicor] <c302>: logicor(<~x591>[B],<x666>[B]);

is transformed to

[binary] <t_x666>: obj=-0, global bounds=[-0,1], local bounds=[-0,1], aggregated: +1<t_x591>

and

[logicor] <c1402>: logicor(<x538>[B],<x138>[B]); (This comes from problem file)
[logicor] <c1403>: logicor(<~x538>[B],<~x138>[B]);

is transformed to

  [binary] <t_x138>: obj=-0, global bounds=[-0,1], local bounds=[-0,1], aggregated: 1 -1<t_x538>

I don't understand how aggregation works in these 2 cases because of the logicor constraints. Would anybody explain this to me please? Thank you!

1 Answers1

0

(Lots of guessing as i don't know much about scip internals)

The example

[logicor] <c301>: logicor(<x591>[B],<~x666>[B]); (This comes from problem file)
[logicor] <c302>: logicor(<~x591>[B],<x666>[B]);

is equivalent (boolean alg) to:

~591 -> ~x666
x591 -> x666

This really looks like case 2 of 4 (from presol_implics.h):

x=0 ⇒ y=lb and x=1 ⇒ y=ub : aggregate y == lb + (ub − lb)x

with:

lb = 0 
ub = 1

leading to:

aggregate y == lb + (ub − lb)x
<-> x666 == 0 + (1-0) x591 
<-> x666 == +1 x591

for comparison:
[binary] <t_x666>: obj=-0, global bounds=[-0,1], local bounds=[-0,1], aggregated: +1<t_x591>

So if scip's output means t_x666 is the replaced version of x666 this makes some sense to me.

The final aggregation-term also fits the truth-table:

a    b    (a | ~b) & (~a | b)
0    0        1
0    1        0
1    0        0
1    1        1

-> basically a negated XOR -> equality -> true iff both are equal

As the implication-graph is the natural thing to reason about 2-sat clauses, i'm inclined to say, that this really is the part of scips internals acting here.

sascha
  • 32,238
  • 6
  • 68
  • 110