# Max 2CSP
param maxd integer = 5;
set DEGREES := 0..maxd;
var W {DEGREES}; # Weights for vertices according to degree
var We; # Weights for edges
minimize Obj: We;
# ensure that vertex weights only improve the bound,
# so we may ignore them in the final bound
subject to Vneg {d in DEGREES}:
W[d] <= 0;
# Nonnegative measure
subject to Nonneg {d in DEGREES}:
0.5*d*We + W[d] >= 0;
subject to Deg0: # 0-reduction
-W[0] <= 0;
subject to Red2: # 2-reduction
-We-W[2] <= 0;
# Branching: in the worst case, all neighbors have equal degree
subject to Branch {d in 3..maxd, d1 in 3..d}:
1 - W[d] - d*We - d*(W[d1] - W[d1-1]) <= 0;
Resource created Thursday 20 August 2015, 01:39:13 PM, last modified Thursday 20 August 2015, 01:39:31 PM.
file: m2csp.mod