# Translate in dzn format from an original pedigree instance (Linkage analysis) # Usage: awk -f linkage2dzn.awk pedigree1.wcsp TOP DIV > pedigree1.dzn # Maximum cost is given by TOP and all costs (including initial upper bound) are divided by DIV function cost2int(x) { if (x= 3 { if (tuple==0) { # read header of current unary or binary cost function constraint = ""; costs = ""; x = ""; y = ""; z = ""; nballowed = 0; nbtuple = 0; iscost = 0; if ($1 == 5) { c5++; nbtuples5 = nbtuples5 "," $NF; cumtuples5 = cumtuples5 "," cum5; cum5 += $NF; func5x = func5x "," 1+$2; func5y = func5y "," 1+$3; func5z = func5z "," 1+$4; func5v = func5v "," 1+$5; func5w = func5w "," 1+$6; arity = 5; } else if ($1 == 4) { c4++; cumtuples4 = cumtuples4 "," cum4; func4x = func4x "," 1+$2; func4y = func4y "," 1+$3; func4z = func4z "," 1+$4; func4v = func4v "," 1+$5; arity = 4; } else if ($1 == 3) { # c3++; # nbtuples3 = nbtuples3 "," $NF; # cumtuples3 = cumtuples3 "," cum3; # cum3 += $NF; # func3x = func3x "," 1+$2; # func3y = func3y "," 1+$3; # func3z = func3z "," 1+$4; nbtuple = $NF; x = 1+$2; y = 1+$3; z = 1+$4; arity = 3; } else if ($1 == 2) { c2++; nbtuples2 = nbtuples2 "," $NF; cumtuples2 = cumtuples2 "," cum2; cum2 += $NF; func2x = func2x "," 1+$2; func2y = func2y "," 1+$3; arity = 2; } else if ($1 == 1) { c1++; nbtuples1 = nbtuples1 "," $NF; cumtuples1 = cumtuples1 "," cum1; cum1 += $NF; func1x = func1x "," 1+$2; arity = 1; } else if ($1 == 0) { lb += $(NF-1); } else { print "ERROR bad arity" > "/dev/stderr"; err = 1; exit(err); } tuple = $NF; e++; } else { if (arity==5) { if ($NF > maxcost5) maxcost5=$NF; constraint = constraint "," cost2int($NF) "," $1 "," $2 "," $3 "," $4 "," $5; tuple--; if (tuple==0) { costs5 = costs5 "," substr(constraint,2) ""; } } else if (arity==4) { if ($NF==0) { constraint = constraint "," $1 "," $2 "," $3 "," $4; nballowed++; } else if ($NF < TOP) { print "ERROR" > "/dev/stderr"; err = 2;nbtuple exit(err); } tuple--; if (tuple==0) { nbtuples4 = nbtuples4 "," nballowed; cum4 += nballowed; constraints4 = constraints4 "," substr(constraint,2) ""; } } else if (arity==3) { if ($NF < TOP && $NF > maxcost3) maxcost3=$NF; if ($NF==0) { constraint = constraint "," $1 "," $2 "," $3; nballowed++; } else if ($NF < TOP) { iscost = 1; } costs = costs "," cost2int($NF) "," $1 "," $2 "," $3; tuple--; if (tuple==0) { if (iscost) { c3++; nbtuples3 = nbtuples3 "," nbtuple; cumtuples3 = cumtuples3 "," cum3; cum3 += nbtuple; func3x = func3x "," x; func3y = func3y "," y; func3z = func3z "," z; costs3 = costs3 "," substr(costs,2) ""; } else { c33++; nbtuples33 = nbtuples33 "," nballowed; cumtuples33 = cumtuples33 "," cum33; cum33 += nballowed; func33x = func33x "," x; func33y = func33y "," y; func33z = func33z "," z; constraints33 = constraints33 "," substr(constraint,2) ""; } } } else if (arity==2) { if ($NF > maxcost2) maxcost2=$NF; constraint = constraint "," cost2int($NF) "," $1 "," $2; tuple--; if (tuple==0) { costs2 = costs2 "," substr(constraint,2) ""; } } else { if ($NF > maxcost1) maxcost1=$NF; constraint = constraint "," cost2int($NF) "," $1; tuple--; if (tuple==0) { costs1 = costs1 "," substr(constraint,2) ""; } } } } END { print "num_variables= " n ";"; print "max_domain = " maxd ";"; print "domains = [" substr(doms,2) "];"; print "top = " cost2int(ub) ";"; print "cost0 = " cost2int(lb) ";"; print "num_constraints1= " c1 ";"; print "max_constraints1 = " cum1*2 ";"; print "max_costs1 = " cost2int(maxcost1) ";"; print "num_constraints2= " c2 ";"; print "max_constraints2 = " cum2*3 ";"; print "max_costs2 = " cost2int(maxcost2) ";"; print "num_constraints3= " c3 ";"; print "max_constraints3 = " cum3*4 ";"; print "max_costs3 = " cost2int(maxcost3) ";"; print "num_constraints33= " c33 ";"; print "max_constraints33 = " cum33*3 ";"; print "num_constraints4= " c4 ";"; print "max_constraints4 = " cum4*4 ";"; print "num_constraints5= " c5 ";"; print "max_constraints5 = " cum5*6 ";"; print "max_costs5 = " cost2int(maxcost5) ";"; print "func1x = [" substr(func1x,2) "];"; print "num_tuples1 = [" substr(nbtuples1,2) "];"; print "cum_tuples1 = [" substr(cumtuples1,2) "];"; print "costs1 = [" substr(costs1,2) "];"; print "func2x = [" substr(func2x,2) "];"; print "func2y = [" substr(func2y,2) "];"; print "num_tuples2 = [" substr(nbtuples2,2) "];"; print "cum_tuples2 = [" substr(cumtuples2,2) "];"; print "costs2 = [" substr(costs2,2) "];"; print "func3x = [" substr(func3x,2) "];"; print "func3y = [" substr(func3y,2) "];"; print "func3z = [" substr(func3z,2) "];"; print "num_tuples3 = [" substr(nbtuples3,2) "];"; print "cum_tuples3 = [" substr(cumtuples3,2) "];"; print "costs3 = [" substr(costs3,2) "];"; print "func33x = [" substr(func33x,2) "];"; print "func33y = [" substr(func33y,2) "];"; print "func33z = [" substr(func33z,2) "];"; print "num_tuples33 = [" substr(nbtuples33,2) "];"; print "cum_tuples33 = [" substr(cumtuples33,2) "];"; print "constraints33 = [" substr(constraints33,2) "];"; print "func4x = [" substr(func4x,2) "];"; print "func4y = [" substr(func4y,2) "];"; print "func4z = [" substr(func4z,2) "];"; print "func4v = [" substr(func4v,2) "];"; print "num_tuples4 = [" substr(nbtuples4,2) "];"; print "cum_tuples4 = [" substr(cumtuples4,2) "];"; print "constraints4 = [" substr(constraints4,2) "];"; print "func5x = [" substr(func5x,2) "];"; print "func5y = [" substr(func5y,2) "];"; print "func5z = [" substr(func5z,2) "];"; print "func5v = [" substr(func5v,2) "];"; print "func5w = [" substr(func5w,2) "];"; print "num_tuples5 = [" substr(nbtuples5,2) "];"; print "cum_tuples5 = [" substr(cumtuples5,2) "];"; print "costs5 = [" substr(costs5,2) "];"; }