// // Minimize Blocking Pairs in SR (and SM) with Forbidden edges // import java.io.*; import java.util.*; import static choco.Choco.*; import choco.cp.model.CPModel; import choco.cp.solver.CPSolver; import choco.kernel.model.Model; import choco.kernel.solver.Solver; import choco.kernel.model.variables.integer.IntegerVariable; import choco.kernel.solver.variables.integer.IntDomainVar; import choco.kernel.solver.ContradictionException; import choco.cp.solver.search.integer.varselector.*; public class MinBPSRForbidden { int n; int[][] pref; // preference of agent_i for agent_j is pref[i][j] int[][] rank; // agent in postion j in agent_i's preference list is rank[i][j] int[] length; // length of agent's preference list boolean[][] forbidden; // forbidden[i][j] <-> forbidden matching between agents i and j Model model; Solver solver; IntegerVariable[] agent; // domain of preferences, last is unmatched IntegerVariable[][] conflict; // conflict[i][j] = 0 <-> stable(i,j) IntegerVariable[] flatConflict; // flattened version of conflict, to minimise sum IntegerVariable totalConflicts; // sum of flatConflict long totalTime, modelTime, solveTime, readTime, modelSize; int size; // size of matching boolean search; MinBPSRForbidden(String fname) throws IOException { search = true; totalTime = System.currentTimeMillis(); readTime = System.currentTimeMillis(); read(fname); readTime = System.currentTimeMillis() - readTime; } void read(String fname) throws IOException { BufferedReader fin = new BufferedReader(new FileReader(fname)); n = Integer.parseInt(fin.readLine()); pref = new int[n][n]; rank = new int[n][n]; length = new int[n]; forbidden = new boolean[n][n]; for (int i=0;i 1) sr.minimize(args[1]); else sr.minimize(""); sr.stats(); } }